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

[复制链接]
  • TA的每日心情
    开心
    2012-8-24 02:51
  • 签到天数: 3 天

    [LV.2]九品芝麻官

    5

    主题

    13

    回帖

    18

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    18
    发表于 2012-8-21 14:51:27 | 显示全部楼层 |阅读模式
    在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。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表