none
sql server 2012 附加数据库错误,错误5172 文件头不是有效的数据库文件头。FILE SIZE 属性不正确 RRS feed

  • 问题

  • 数据库被误删后,只找回了mdf文件。重新附加到数据库时候报错5172。附加时并没有选择日志文件。请问,这种状况该什么解决?
    2015年12月6日 8:29

答案

  • rebuild_log 不行的话,可以尝试文件替换的方法,先建一个空数据库,然后将数据库脱机(offline), 然后用你要恢复的 mdf 替换新建空数据库的 mdf, 再尝试将数据库 online, 如果不能 online, 那么尝试使用 EMERGENCY 模式(alter database xx set EMERGENCY )

      能进入 EMERGENCY 模式,章法着数据库可读,你可以把能够读取到的数据都读出来写入新库了

    EMERGENCY  模式都无法进入就没招了

    • 已标记为答案 穆荇 2015年12月7日 5:01
    2015年12月7日 1:27

全部回复

  • 附加的时候加上ATTACH_REBUILD_LOG选项

    如果还不行,估计无办法挽救了 


    Love SQL

    2015年12月6日 14:56
  • rebuild_log 不行的话,可以尝试文件替换的方法,先建一个空数据库,然后将数据库脱机(offline), 然后用你要恢复的 mdf 替换新建空数据库的 mdf, 再尝试将数据库 online, 如果不能 online, 那么尝试使用 EMERGENCY 模式(alter database xx set EMERGENCY )

      能进入 EMERGENCY 模式,章法着数据库可读,你可以把能够读取到的数据都读出来写入新库了

    EMERGENCY  模式都无法进入就没招了

    • 已标记为答案 穆荇 2015年12月7日 5:01
    2015年12月7日 1:27
  • 嗯,最后使用了紧急模式。 把过程在这里说下吧,下次遇到同样问题好解决。

    新建一个同名数据库,断开服务,替换误删找回的mdf文件,启动服务,(启动服务后不操作数据库,一旦操作数据库或刷新就进入不紧急模式,这个挺奇怪的。我遇到的应该算特例吧),然后执行sql转紧急模式

    alter database 数据库名 set emergency --设置数据库为紧急模式

    设置好后就可以操作数据库了,紧急模式下不能使用备份,所以把数据库表结构和数据生成脚本。然后使用脚本重新建立一个新数据库。

    -------------------

    但我又测试了下,在误删数据库文件后,直接使用紧急模式是可以的。。

    附:

    alter database 数据库名 set online --设置数据库为正常模式。

    2015年12月7日 5:01
  • 谢你的回复,问题已近解决了。
    2015年12月7日 5:02
  • 666 成功附加上去了
    2019年10月22日 7:17