Sql 서버 의 DBCC 명령 상세 설명

오늘 연구개 발 센터 에서 연 회 를 하 는데 저녁 에 각 부서 에서 회식 을 합 니 다.저 는 개인 적 으로 건 홍 을 좋아 합 니 다.건 홍 에서 당신 은 그런 신맛 과 쓴맛 을 맛 볼 수 있 습 니 다.인생 은 언제 이 렇 지 않 은 적 이 있 습 니까?마침 ceo 가 미국 에서 건 홍 을 가 져 와 서 나 는 가 는 길에 즐 거 운 시간 을 보 냈 다.한 글자...시원 하 다좀 많이 마셔 서...아직도 머리 가 아파...지하철 에 돌아 와 서 이번 주말 에 집 을 구 하 느 라 바 빠 서 책 을 하나 도 보지 않 았 고 블 로그 에서 계속 흔 들 리 지 않 았 다.지난 블 로그 에 DBCC 보급 이 라 고 했 던 친구 가 생각 났 다.좀 어리둥절 하지만............................................새로운 디자인 을 쓸 수 있 을 지...어떤 언어 를 배우 든 데이터 베 이 스 를 배우 든 너 는 다른 사람 보다 한 층 더 깊이 보아 야 한다.가장 슬 픈 것 은 표층 에 머 무 르 는 것 이다.이렇게 매번 버 전이 업 그 레이 드 된 후에 새로운 디자인 이 나 왔 다.그리고 너 는 그의 어머니 가 너무 신기 하 다 고 느 꼈 다.그런데 사실은 정말 그런 가?현실 적 인 예 가 C\#각 버 전의 문법 사탕...ILdasm 이후,당신 은 더 이상 기초 가 될 수 없다 는 것 을 알 게 될 것 입 니 다.
기본 적 인 것,C\#좋 은 점 이 있 습 니 다.바로 소스 코드 를 볼 수 있 고 ILdasm 도 볼 수 있 습 니 다.기본적으로 나체로 당신 을 만 나 게 할 수 있 습 니 다.그러나 sqlserver 는 약간 특수 합 니 다.프로 그래 밍 언어 가 아 닙 니 다.컴 파일 을 통 해 배우 지 않 을 것 입 니 다.그러면 더 깊 은 것 은 바 텀 데이터 페이지 일 수 밖 에 없습니다. 。그래서 이것 은 sqlserver 를 배 우 는 기본 기 입 니 다.
 DBCC
1:DBCC 란 무엇 인가
저 는 교수 선생님 이 아니 라 빈 틈 없 는 정의 가 없다 고 할 수 없습니다.전체 이름:Database Console Commands.말 그대로'데이터베이스 콘 솔 명령','콘 솔'이 라 고 하면 제 첫 반응 은 chrome 개발 자 도구 입 니 다.첫 반응 이 어떻게 될 지 모 르 겠 습 니 다.개발 자 도구 에 서 는 자바 script 이 알 아 볼 수 있 는 문법 만 있 으 면 콘 솔 에 입력 할 수 있 습 니 다.같은 이치 입 니 다.sqlserver 가 알 아 볼 수 있 는 것 도 마찬가지 입 니 다.
 2:DBCC 에 몇 개의 명령 이 있 는 지
   당신 은 알 아야 합 니 다.모든 콘 솔 은 대부분 help 명령 을 제공 합 니 다.예 를 들 어 cmd 인터페이스 나 mongodb 의 console 등 입 니 다.

 그리고 DBCC 의 help 가 어떻게 되 는 지 볼 까요?

 위의 그림 에서 나 는 위 에서 아래로 세 어 보 았 는데 32 개의 명령 이 있 었 다.그러나 재 미 있 는 것 은 마이크로소프트 가 제공 한 이 32 개의 명령 은 모두 대외 적 으로 공 개 된 것 이다.내 가 이렇게 말 한 것 은 아직 공개 되 지 않 은 명령 이 마이크로소프트 만 사용 한 다 는 것 이다.나 는 너 에 게 눈 으로 똑똑히 볼 수 있다.

위 에서 우 리 는 대략 보 았 을 것 이다.공개 와 미 공개 dbcc 명령 을 합치 면 약 100 개가 있 지만,너 는 나 에 게 이 dbcc 명령 들 을 어떻게 사용 하 는 지 물 어 봐 야 한다.나 도 너 에 게 말 할 수 없다.왜냐하면 나의 머리 는 이런 무료 한 것들 을 기억 하 는 데 그렇게 발달 하지 않 았 기 때문이다.게다가 이런 것들 을 전문 적 으로 기억 하 는 데 시간 을 들 이 고 싶 지 않다.마치 영어 로 단 어 를 외 우 는 것 과 같다.하지만 방법 은 있 습 니 다.대부분 은 끈 질 기 게 매달 리 는 것 을 참 지 못 합 니 다.여자 에 게 도 마찬가지 입 니 다.그녀 가 당신 을 좋아 하 게 매달 리 거나 경찰 에 신고 해서 당신 을 잡 았 습 니 다.
 3:DBCC 명령 을 어떻게 기억 합 니까?
<1>온라인 총서
온라인 총 서 는 sqlserver 의 어머니 라 고 할 수 있 습 니 다.이 세상 에서 당신 은 그것 보다 더 권위 있 고 완전한 자 료 를 찾 지 못 할 것 입 니 다.당신 은 그것 의 신 위 를 볼 수 있 습 니 다.그리고 당신 은 그것 을 볼 수 있 습 니 다.
dbcc 를 입력 하고 찾 아야 할 것 을 찾 으 십시오.아래 그림 에서 도 볼 수 있 습 니 다.dbcc 는 대략 4 가지 로 나 뉘 어 있 습 니 다.안 타 깝 게 도 공개 되 지 않 은 dbcc 명령 은 온라인 총서 에서 찾 을 수 없습니다.

<2> help('xxx')
명령 의 용법 에 대해 대략적인 인식 을 가지 고 있 지만 인 자 를 어떻게 부여 하 는 지 잊 어 버 리 면 help(xxx)로 개발 시간 을 절약 할 수 있 습 니 다.예 를 들 어 buffer 와 ind 명령 등 입 니 다.

 2.상용 명령 의 실천
1: DBCC TRACEON
     온라인 총서 에 따 르 면 이것 은 지정 한 추적 표 지 를 사용 하 는 것 입 니 다.지정 한 이상 이것 은 의미 가 있 습 니 다.내 가 자주 연구 하 는 것 은 두 가지 밖 에 없다.
<1> TRACEON(2588)
이것 은 방금 알 고 있 었 습 니 다.2588 표 시 를 지정 하면 공개 되 지 않 은 dbcc 명령 을 볼 수 있 습 니 다.그리고 각종 명령 매개 변수 에 대한 힌트 도 볼 수 있 습 니 다.
<2> TRACEON(3604)
이 지정 한 표 시 는 DBCC Page 의 결 과 를 클 라 이언 트 에 표시 할 수 있 습 니 다.그렇지 않 으 면 표시 되 지 않 습 니 다.앞의 몇 장 에서 알 아 봤 는 지 모 르 겠 습 니 다.?  
 2:DBCC IND
이 명령 은 이 시리즈 에서 매우 자주 사 용 될 것 입 니 다.왜냐하면 이것 은'더미 표'나'색인'의 데이터 페이지 정 보 를 보 는 데 사용 되 기 때 문 입 니 다.그것 이 없 으 면 저 는 연구 할 것 이 없습니다.아니면 낡은 규칙 인지 먼저 보 겠 습 니 다.
그것 의 매개 변수 정 보 는 다음 과 같다.

앞의 두 개의 매개 변 수 를 잘 이해 하고 싶 습 니 다.저 는 앞의 소절 에서 도 말 했 습 니 다.하 나 는 dbname 이 고 하 나 는 tablename or view name or procname 등 입 니 다.세 번 째 매개 변 수 는 가장 좋 습 니 다.
재 밌 어 요.이 안에 1,0,-1,-2 가 무슨 뜻 이에 요?
 
<1>1:집합 색인 데이터 페이지 정보 와 IAM 추적 데이터 페이지 정 보 를 표시 합 니 다.
<2> 0:   테이블 데이터 페이지 정보 와 IAM 추적 데이터 페이지 정 보 를 표시 합 니 다.
<3>-1:모든 데이터 페이지 정 보 를 표시 합 니 다.예 를 들 어(IAM,색인 데이터 페이지,목록 데이터 페이지).
<4>-2:IAM 데이터 페이지 정 보 를 표시 합 니 다.
<5>nonclustered indid:이 매개 변수의 순위 목록 에서 당신 은 아마'무한대'에서 1,0,-1,-2 까지 의 모델 을 볼 수 있 을 것 입 니 다.이 뜻 을 자세히 생각해 보면 당신 도 알 것 같 습 니 다.예 를 들 어
2 는 첫 번 째 비 집합 색인 을 대표 하고,3 은 두 번 째 비 집합 색인 을 대표 하 며,이런 식 으로 유추 하면...
 
정말 예 를 들 고 싶 지 않 아 요.더 이상 말 하면 다 할 수 없 으 니까 요................................................됐어,그래도 예 를 하나 들 자.
 
위의 그림 을 통 해 내 가 무엇 을 하고 있 는 지 알 겠 지??현재 비 집합 색인 데이터 가(PageFID:PagePID)(1:110),(1:115)...등 4 개 데이터 페이지 에 분포 되 어 있 는 것 을 볼 수 있 습 니 다.(1:114)그들의 데이터 추적 페이지 일 뿐 입 니 다.IAM 스 토 킹 페이지 라 는 걸 어떻게 알 아 냈 을 까?IAMFID 와 IAMPID 가 null 인 것 만 보면 IAM 추적 페이지 라 고 볼 수 있 습 니 다.IndexID>0 을 보면 색인 페이지 입 니 다.
 
3:DBCC PAGE
이 명령 도 본 시리즈 에서 자주 언급 되 는 것 입 니 다.왜냐하면 이것 은 정말 유용 하기 때 문 입 니 다.제 가 IND 로 데이터 페이지 를 내 보 낸 후에 다음 단 계 는 이 데이터 페이지 에 어떤 정보 가 있 는 지 꼭 보 는 것 입 니 다.사람들 은 모두 이렇게 탐욕 적 이 고 유혹 적 입 니 다.

그림 에서 볼 수 있 듯 이 두 번 째 와 세 번 째 매개 변 수 는 별로 재미 가 없습니다.왜냐하면 저 는 IND 로 색인 이 어떤 데이터 페이지(fileID:pageid)위 에 있 는 지 알 아 냈 기 때 문 입 니 다.아래 에 저희 가 자세히 알 아 보 겠 습 니 다.
네 번 째 매개 변 수 를 보 세 요.
<1>0:읽 을 수 있 는 형식의 데이터 페이지 헤더 데 이 터 를 출력 합 니 다.그 이 유 는 이 렇 습 니 다.한 데이터 페이지 에 96 개의 바이트 공간 이 데이터 페이지 를 표시 하고 그 안의 내용 이 풍부 합 니 다.
<2>1:읽 을 수 있 는 형식의 데이터 페이지 헤더 데 이 터 를 출력 하고 슬롯 에 대응 하 는 16 진수 내용 도 있 습 니 다.  
<2>2:전체 데이터 페이지 의 16 진수 데 이 터 를 출력 합 니 다.(페이지,내용,slot)를 포함 합 니 다.이것 은 제 가 가장 자주 사용 하 는 명령 입 니 다.
<3>3:읽 을 수 있 는 형식의 데이터 페이지 헤더 데 이 터 를 출력 하고 기록 에 있 는 각 필드 의 읽 을 수 있 는 형식 을 포함 합 니 다.
 
위의 명령 은 좀 허황 해 보이 지만,나 는 단지 하나의 예 만 들 고,다른 것 은 모두 에 게 남 겨 두 었 다.

DBCC TRACEON(3604)
DBCC PAGE(Ctrip,1,110,2)

DBCC     。   DBCC        ,         。

PAGE: (1:110)


BUFFER:


BUF @0x0000000085F8ED00

bpage = 0x000000008519A000      bhash = 0x0000000000000000      bpageno = (1:110)
bdbid = 8              breferences = 0           bUse1 = 8576
bstat = 0x3c00009          blog = 0x32159            bnext = 0x0000000000000000

PAGE HEADER:


Page @0x000000008519A000

m_pageId = (1:110)          m_headerVersion = 1         m_type = 2
m_typeFlagBits = 0x0         m_level = 0             m_flagBits = 0x204
m_objId (AllocUnitId.idObj) = 58   m_indexId (AllocUnitId.idInd) = 256 
Metadata: AllocUnitId = 72057594041729024                 
Metadata: PartitionId = 72057594040877056                 Metadata: IndexId = 2
Metadata: ObjectId = 245575913    m_prevPage = (0:0)          m_nextPage = (1:115)
pminlen = 909            m_slotCnt = 8            m_freeCnt = 784
m_freeData = 7392          m_reservedCnt = 0          m_lsn = (141:194:170)
m_xactReserved = 0          m_xdesId = (0:0)           m_ghostRecCnt = 0
m_tornBits = -788728362       

Allocation Status

GAM (1:2) = ALLOCATED        SGAM (1:3) = ALLOCATED        
PFS (1:1) = 0x60 MIXED_EXT ALLOCATED  0_PCT_FULL             DIFF (1:6) = CHANGED
ML (1:7) = NOT MIN_LOGGED      

DATA:


Memory Dump @0x0000000010CEA000

0000000010CEA000:  01020000 04020001 00000000 00008d03 †................ 
0000000010CEA010:  73000000 01000800 3a000000 1003e01c †s.......:....... 
0000000010CEA020:  6e000000 01000000 8d000000 c2000000 †n............... 
0000000010CEA030:  aa000000 00000000 00000000 d6f5fcd0 †................ 
0000000010CEA040:  00000000 00000000 00000000 00000000 †................ 

...........

0000000010CEBFE0:  21212121 21212121 21212121 21212121 †!!!!!!!!!!!!!!!! 
0000000010CEBFF0:  5019c015 3012a00e 100b8007 f0036000 †P...0.........`. 

OFFSET TABLE:

Row - Offset             
7 (0x7) - 6480 (0x1950)       
6 (0x6) - 5568 (0x15c0)       
5 (0x5) - 4656 (0x1230)       
4 (0x4) - 3744 (0xea0)        
3 (0x3) - 2832 (0xb10)        
2 (0x2) - 1920 (0x780)        
1 (0x1) - 1008 (0x3f0)        
0 (0x0) - 96 (0x60)         


DBCC     。   DBCC        ,         。

좋은 웹페이지 즐겨찾기