摘要:全文Copy 自:
http://bbs.cnetnews.com.cn/redirect.php?tid=127166&goto=lastpost
SQLServer2000提供了一个读取数据页结构的命令DBCC Page。该命令为非文档化的命令,具体如下:DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])具体参数描述如下:dbid 包含页面的数据库IDdbname 包含页面的数据库的名称filenum 包含页面的文件编号pagenum 文件内的页面printopt 可选的输出选项;选用其中一个值: 0:默认值,输出缓冲区的标题和页面标题 1:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表 2:输出缓冲区的标题、页面标题(整体输出页面),以及行偏移量表 3:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表;每一行 后跟分别列出的它的列值要想看到这些输出的结果,还需要设置DBCC TRACEON(3604)。对于表来说,它所在的dbid或者dbname很容易知道,那么它的filenum和pagenum怎么知道呢?其实这个值存在系统表sysindexes的列first中(当indid为0或者1时,indid为0表示该表是一个堆表,没有任何聚集索引,indid为1表示该索引为聚集索引),列first的数据类型为binary(6),它是以16进制的形式储的,需要进行转换。在16进制中,每两个16进制数字表示一个字节,并且是逆序排列的。比如假设一个表的first的值为0xC70000000100,怎么转换呢?因为它是逆序排列的,并且每两个表示一个字节,所以每次都将剩下first值的最后两位移到转换后数据的最后,具体转换步骤如下:步骤 此时的first值 转换后的数据第0步 0xC70000000100 第1步 0xC700000001 00第2步 0xC7000000 0001第3步 0xC70000 000100第4步 0xC700 00010000第5步 0xC7 0001000000第6步 ......[
阅读全文]