348978940 发表于 2012-8-21 14:51:27

SQLserver数据文件(MDF)的页面文件头结构剖析

在sql2005中执行以下语句:
dbcc traceon(3604)
    go
dbcc page(master,1,0,2)
可以看到MDF文件的一些物理结构信息,其中包括重要的头96个字节。也就是第一个页面的文件头。
........
__文件头
PAGE HEADER:

Page @0x03FA0000
m_pageId = (1:0)                     m_headerVersion = 1                  m_type = 15
m_typeFlagBits = 0x0               m_level = 0                        m_flagBits = 0x8
m_objId (AllocUnitId.idObj) = 99   m_indexId (AllocUnitId.idInd) = 0    Metadata: AllocUnitId = 6488064
Metadata: PartitionId = 0            Metadata: IndexId = 0                Metadata: ObjectId = 99//对象ID
m_prevPage = (0:0)                   m_nextPage = (0:0)                   pminlen = 0
m_slotCnt = 1   //槽的个数即行数                     m_freeCnt = 7937                     m_freeData = 3059
m_reservedCnt = 0                  m_lsn = (149:448:1)                  m_xactReserved = 0
m_xdesId = (0:0)                     m_ghostRecCnt = 0                  m_tornBits = -1073741694
........
DATA:

Memory Dump @0x62FEC00--反序排列
62FEC000:   010f0000 08000000 00000000 00000000 †................         
62FEC010:   00000000 00000100 63000000 011ff30b †........c.......         
62FEC020:   00000000 01000000 95000000 c0010000 †................         
62FEC030:   01000000 00000000 00000000 820000c0 †................         
62FEC040:   00000000 00000000 00000000 00000000 †................         
62FEC050:   00000000 00000000 00000000 00000000 †................   
如果这些信息损坏将会造成严重的后果。
其中每行4个字节,一共分析了文件头的前64个字节。
00:0F        m_headerVersion        m_type        m_typeFlagBits        m_level
        m_flagBits        m_indexId
        m_prevPage(2)
        m_prevPage(1)        pminlen
10:1F        m_nextPage(2)
        m_nextPage(1)        m_slotCnt
        AllocUnitId.idObj
        m_freeCnt        m_freeData
20:2F        m_pageId(2)
        m_pageId(1)        m_reservedCnt
        m_lsn(1)
        m_lsn(2)
30:3F        m_lsn(3)        m_xactReserved
        m_xdesId(2)
        m_xdesId(1)        m_ghostRecCnt
        m_tornBits
在数据库的头96个字节中第0x40开始直道0x5F应该都是0。
页: [1]
查看完整版本: SQLserver数据文件(MDF)的页面文件头结构剖析