SQL Server数据库的5172 5171错误处理 Msg 5172 Msg 5171

 

如果自己搞不定可以找诗檀软件专业SQL SERVER数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638   QQ号:47079569    邮箱:service@parnassusdata.com

 

SQL Server数据库的损坏处理相比于oracle数据库而言是简单一些的,这个简单主要体现在微软或者说sybase提供了对损坏/置疑数据库的紧急EMERGENCY模式,以便用户能够从有问题而无备份的数据库中拯救出数据。而oracle则官方不提供这种方案。但对于连数据文件头都损失的场景在SQL Server的紧急模式也没法发挥作用,这是因为启动块等重要数据都在MDF文件头部。所以实际上即便不备份整个MDF文件,但备份其头部也是有意义的。这和我们在Oracle ASM中定期备份ASM disk header是类似的。但这种想法还是过于理想,没有备份就是没有备份计划或者备份计划不当的结果。

所以任何其他RDBMS(MYSQL Oracle)都会出现的问题,在SQL Server中也无从避免。数据文件头丢失也是类似的,与普通的数据块丢失不同。普通的数据块丢失可能只影响少数表或索引,用户也可以割舍这少部分数据。而数据文件头的丢失将导致数据库彻底不可用,这是有本质区别的。

4> alter database testn1 set emergency;
5> go
Msg 5172, Level 16, State 15, Server DESKTOP-L414PA5\SQLEXPRESS, Line 4
The header for file 'E:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\testn1.mdf' is not a valid database file header. The PageAudit property is incorrect.
Msg 5172, Level 16, State 15, Server DESKTOP-L414PA5\SQLEXPRESS, Line 4
The header for file 'E:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\DATA\testn1.mdf' is not a valid database file header. The PageAudit property is incorrect.


相对于oracle而言SQL Server的企业环境中,可能更加缺失DBA的角色。所以我们可以说当你接手一套SQL server数据库时,不管它有多少其他问题,那些都可以看做小问题,检查你接受库的备份情况才能减少未来可能发生的损失。

 

了解MDF文件头

 

SQL server中数据的最小存储单元是page,与之对应的是oracle中的block。page的ID从0开始数;0号page至关重要这是因为它存放了数据文件的重要信息。每一个mdf/ndf文件有一个自己的文件号FileID ,从1开始数。所以FileID+PageID可以定位一个page。下面是前8个page存放的信息:

 

Page No Page Identify
Page 0 Header
Page 1 First PFS
Page 2 First GAM
Page 3 First SGAM
Page 4 Unused
Page 5 Unused
Page 6 First DCM
Page 7 First BCM

 

一些造成SQL SERVER MDF文件头损坏的原因

 

以下列出近几年file header损坏的一些主要原因:

  1. 目前最主要的因素是勒索病毒损坏,因为勒索病毒一般都会优先损坏文件的前1~10MB,所以文件头必然被损坏
  2. 磁盘故障占第二位,主要是多年运行的磁盘容易出该问题
  3. 重启不当,其实这个原因是和磁盘故障结合的;已有的磁盘问题在数据库运行过程中不爆发,一旦重启就爆发。还是就是没有干净的关闭服务就重启,例如断电重启

 

 

对于SQL SERVER MDF文件头损坏的恢复手段

注意dbcc checkdb命令是对文件头损坏无效的。

最简单有效的方法,就是基于备份文件恢复,主要谈没备份的情况下:

因为是文件头受损,我们上面讲了0号page是文件头,但是我们可以基于重新建一个数据库来获得好的文件头,然后这个file header替换到坏的数据库上,来达到恢复目的,这个一般用windows平台上的dd或者bbcopy就能实现。

如果前几MB的文件头都被损坏了,那么这个时候方案1很难生效。我们可以利用一些恢复软件恢复,例如DBRECOVER FOR SQL SERVER。

 

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号