欢迎来到天天文库
浏览记录
ID:9511822
大小:69.00 KB
页数:9页
时间:2018-05-02
《sqlserver数据文件(mdf)的页面文件头结构剖析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、SQLserver数据文件(MDF)的页面文件头结构剖析>>教育资源库 先执行一下以下SQL语句,我的测试环境为SQL2005dbcctraceon(3604) godbccpage(master,1,0,2) 可以看到MDF文件的一些物理结构信息,其中包括重要的头96个字节。也就是第一个页面的文件头。........ PAGEHEADER: Page0x03FA0000 m_pageId=(1:0) m_headerVersion=1 m_type=15m_typeFlagBits=0x0 m_level=0
2、 m_flagBits=0x8m_objId(AllocUnitId.idObj)=99 m_indexId(AllocUnitId.idInd)=0 Metadata:AllocUnitId=6488064Metadata:PartitionId=0 Metadata:IndexId=0 Metadata:ObjectId=99m_prevPage=(0:0) m_nextPage=(0:0) pminlen=0m_slotCnt=1 m_freeCnt=7937
3、 m_freeData=3059m_reservedCnt=0 m_lsn=(149:448:1) m_xactReserved=0m_xdesId=(0:0) m_ghostRecCnt=0 m_tornBits=-1073741694 ........ DATA:MemoryDump0x62FEC000 62FEC000: 010f0000080000000000000000000000†................ 62FEC010: 000000000000
4、010063000000011ff30b†........c....... 62FEC020: 000000000100000095000000c0010000†................ 62FEC030: 010000000000000000000000820000c0†................ 62FEC040: 00000000000000000000000000000000†................ 62FEC050: 0000000000000000000000
5、0000000000†................ 以上蓝色的文字就是文件头的一些信息。如果这些信息损坏将会造成严重的后果。 经过简单的逐个字节分析,中间借助了_headerVersionm_typem_typeFlagBitsm_levelm_flagBitsm_indexIdm_prevPage(2)m_prevPage(1)pminlen10:1Fm_nextPage(2)m_nextPage(1)m_slotCntAllocUnitId.idObjm_freeCntm_freeData20:2Fm_pageId(2)m_pageId(1)m
6、_reservedCntm_lsn(1)m_lsn(2)30:3Fm_lsn(3)m_xactReservedm_xdesId(2)m_xdesId(1)m_ghostRecCntm_tornBits 在数据库的头96个字节中第0x40开始直道0x5F应该都是0。 我发现只有测试页的m_pageId的冒号前面的数字不为1时才在0x40到0x5f写入数据。但是具体代表什么还没有看出来。 姑且认为数据库第一个页面的0x00-0x3f就如上图所示,0x40-0x5f都为0(不正确的话请纠正一下) 这张图有什么用呢,如果你理解了上述参数的意义,用二进制编辑器打开一个头文件损
7、坏的mdf文件就有可能恢复这个已经损坏的数据库。 偶不是dba也不是专业恢复数据的,只是个普通的开发人员,怎么恢复还请有经验人士补充一下。 有情提醒,这些东西非常危险,请不要随意测试,最好找一个没用的数据库来研究。 参数的意义m_pageIdThisidentifiesthefilenumberthepageispartofandthepositioneanspage143infile1.m_headerVersionThisisthepageheaderversion.Sinceversion7.0this
此文档下载收益归作者所有