MS SQL 에서 문서화 되어있지는 않지만, 페이지의 내용을 확인할 수 있는 DBCC PAGE 를 제공합니다.
DBCC PAGE 의 명령문 구문
DBCC PAGE(DB 이름, 파일 번호, 페이지 번호, 옵션)
옵션에는 다음과 같은 것이 있습니다.
0 : 헤더만
1 : 행 단위
2 : 페이지 단위
3 : 행 그리고 컬럼 값 (대부분 이 옵션을 사용)
파일 번호와 페이지 번호는 아래 방식으로 찾을 수 있습니다.
한 예를 들어보겠습니다.
1. text 컬럼을 가진 TEX 테이블을 생성합니다.
CREATE TABLE TEX(C1 CHAR(5), C2 TEXT); INSERT INTO TEX VALUES('AAAAA', REPLICATE('ABCDE', 50));
2. SYSINDEXES 테이블의 FIRST 컬럼을 조회하여 파일, 페이지 번호를 알아냅니다.
SELECT FIRST FROM SYSINDEXES WHERE ID = OBJECT_ID('TEX') AND INDID = 0
FIRST
0x120100000100
FIRST 컬럼의 LSB 쪽 2 바이트인 0100 은 파일번호
MSB 쪽 4 바이트인 12010000 은 페이지 번호이다.
해당 바이트는 스와핑해서 읽어야 합니다.
SELECT CONVERT(int, 0x00000112) -- 274 SELECT CONVERT(int, 0x0001) -- 1
즉 파일 번호는 1, 페이지 번호는 274 입니다.
3. 3604 플래그 추적을 ON 으로 변경한뒤 DBCC PAGE 로 조회합니다.
DBCC TRACEON(3604) DBCC PAGE(MASTER, 1, 274, 3)
0000000000000000: 70000900 41414141 41020080 01002080 †p. .AAAAA..... . 0000000000000010: 0000a30f 00000000 10010000 01000100 †................ 0000000000000020: 00000000 00000000 34000000 0000††††††........4..... Version Information = Transaction Timestamp: 52 Version Pointer: Null Slot 0 Column 1 Offset 0x4 Length 5 Length (physical) 5 C1 = AAAAA C2 = [Textpointer] Slot 0 Column 2 Offset 0x10 Length 16 Length (physical) 16 TextTimeStamp = 262340608 RowId = (1:272:1)
4. TEXT 컬럼은 해당 위치에 16바이트 포인터가 저장되어 있고, 해당 포인터 위치에 실제 데이터가 저장된다. 이 위치는 RowId 로 확인 할 수 있다.
DBCC PAGE(MASTER, 1, 272, 1)
0000000000000000: 48000801 0000a30f 00000000 03004142 †H.............AB 0000000000000010: 43444541 42434445 41424344 45414243 †CDEABCDEABCDEABC 0000000000000020: 44454142 43444541 42434445 41424344 †DEABCDEABCDEABCD 0000000000000030: 45414243 44454142 43444541 42434445 †EABCDEABCDEABCDE 0000000000000040: 41424344 45414243 44454142 43444541 †ABCDEABCDEABCDEA 0000000000000050: 42434445 41424344 45414243 44454142 †BCDEABCDEABCDEAB 0000000000000060: 43444541 42434445 41424344 45414243 †CDEABCDEABCDEABC 0000000000000070: 44454142 43444541 42434445 41424344 †DEABCDEABCDEABCD 0000000000000080: 45414243 44454142 43444541 42434445 †EABCDEABCDEABCDE 0000000000000090: 41424344 45414243 44454142 43444541 †ABCDEABCDEABCDEA 00000000000000A0: 42434445 41424344 45414243 44454142 †BCDEABCDEABCDEAB 00000000000000B0: 43444541 42434445 41424344 45414243 †CDEABCDEABCDEABC 00000000000000C0: 44454142 43444541 42434445 41424344 †DEABCDEABCDEABCD 00000000000000D0: 45414243 44454142 43444541 42434445 †EABCDEABCDEABCDE 00000000000000E0: 41424344 45414243 44454142 43444541 †ABCDEABCDEABCDEA 00000000000000F0: 42434445 41424344 45414243 44454142 †BCDEABCDEABCDEAB 0000000000000100: 43444541 42434445 00000000 00000000 †CDEABCDE........ 0000000000000110: 34000000 0000††††††††††††††††††††††††4.....
'SQL Server > SQL Server 기타' 카테고리의 다른 글
[MsSQL] Windows Server 2016 에 한글팩 설치하기 (0) | 2019.01.19 |
---|---|
[MsSQL] VMWare에 Windows Server 2016 설치하기 (2) | 2019.01.16 |
[MsSQL] MS-SQL, SQL Server 데이터베이스 구동, 시작, 종료, 재구동 등의 작업 수행하기 (0) | 2018.12.26 |
[MsSQL] SQL Server 2008 시스템 함수 알아보기 (0) | 2018.12.26 |
[MsSQL] SQL Server 2008 시스템 프로시저 sp_helpdb 알아보기 (0) | 2018.12.25 |