2010-01-04 9 views
0

SQL Server 2000을 사용하고 있습니다. 즉 열이 4 개인 테이블이 있습니다. col1, col2, col3 및 col4. 테이블에 레코드가 있습니다. dbcc page 명령을 사용했는데 모든 열의 값을 볼 수있었습니다. 그런 다음 테이블에서 col2 열을 삭제하고 dbcc 페이지를 다시 수행했습니다. "Dropped"값을 가진 col2를 제외한 모든 열의 값을 볼 수 있습니다 (레코드 구조는 여전히 동일 함). 열 정보가 "syscolumn"테이블에 저장되어 있음을 알고 있습니다. 그러나 col2에 대한 레코드를 찾을 수 없습니다 (분명한 이유로). col2가 삭제 된 정보를 찾을 수있는 시스템 테이블이 궁금합니다. 이 정보는 어디에 저장되어 있습니까?삭제 된 열 식별

감사합니다, 유

+0

은 dbcc 명령을 사용하여 레코드 덤프를 처리합니다. 00000000 : 10001800 01000000 02000000 03000000 † ................ 00000010 : 04000000 05000000 0500e0 ††††††††††††† ...... ..... 슬롯 0 0 열 오프셋을 0x4 길이 4 COL1 = 1 슬롯 0 1 열 오프셋을 0x8 길이 DROPPED 4 = 2 슬롯 0 열 2 오프셋에서 0xc 길이 4 열 3 = 3 슬롯 0 열 3 오프셋 0x10 길이 4 Col4 = 4 ,210 슬롯 0 4 열 오프셋 당신이 볼 수있는 4 COL5은 = 5 여기, COL2가로 표시되어하는 0x14 길이 COL2가 삭제 한 정보가 저장되어있는 장소로서가 를 "떨어졌다". 감사합니다. – jude

답변

0

즉 2000 표시의 충분한 당신을 줄 수도 있지만 난 단지, 2005 대답 할 수있는 정보는 내가 정보에서 얻을, DMV의를 통해 알고로까지 사용할 수 없습니다 Dedicated Admin Console (DAC)을 사용해야합니다.

DAC 연결을 사용하면 테이블 열을 sys.sysrowsetsolumns에서 찾을 수 있습니다. 개체의 개별 rowsetid/hobtid로 필터링하면 해당 열을 볼 수 있으며 두 개의 필드, 상태 및 행 집합이 있습니다.

테스트 케이스로 열을 삭제하기 전후에 쿼리 값을 두 번 출력합니다.

select * from sys.sysrowsetcolumns where rowsetid = 72057594038845440 
    ALTER TABLE dbo.foo DROP COLUMN test2 
    select * from sys.sysrowsetcolumns where rowsetid = 72057594038845440 

출력 테스트는 3 열을

rowsetid   rowsetcolid hobtcolid status rcmodified maxinrowlen 
72057594038845440 1   1   0  0  4 
72057594038845440 2   2   0  0  4 
72057594038845440 3   3   0  0  4 
72057594038845440 4   4   0  0  4 

rowsetid   rowsetcolid hobtcolid status rcmodified maxinrowlen 
72057594038845440 1   1   0  0  4 
72057594038845440 2   2   0  0  4 
72057594038845440 4   4   0  0  4 
72057594038845440 65536  3   2  0  4 

하락 하였다 당신은 hobtcolid 3 2로 상태를 변경했고 rowsetcolid이 상태 및 ID는 I를 무엇을 의미 65536로 설정되어 볼 수 있습니다 오직 취해진 행동으로부터 만 추론 할 수 있습니다.

부록 : DAC를 통해 시스템 테이블의 데이터를 편집하지 마십시오. 매우 위험합니다.

+0

매우 유용한 정보를 제공해 주셔서 감사합니다! 하나 이상의 쿼리가 있습니다. 삭제 된 열 이 varchar – jude

+0

과 같은 가변 길이 열인지 여부를 식별합니다. 안녕하세요 andrew,이 정보는 syshobtcolumns 시스템 테이블에서 발견되었습니다. 도움 주셔서 감사합니다. 응원! – jude

+0

삭제 된 열을 식별하는 방법을 알려주십시오. 은 hobtcolid always = rowsetcolid입니다. – jude