SQL Server:如何附加/修复分离/损坏的数据库?

Posted

技术标签:

【中文标题】SQL Server:如何附加/修复分离/损坏的数据库?【英文标题】:SQL Server: How to attach / repair a detached / damaged database? 【发布时间】:2016-08-17 11:28:23 【问题描述】:

数据库服务器崩溃。我能够获取 mdf 和日志文件,并且正在尝试将其安装在另一台服务器上。我没有备份,因为它是一个开发数据库。

当我尝试附加 mdf 和 ldf 文件时,Sql Server Management Studio 给我这个错误:

    TITLE: Microsoft SQL Server Management Studio
    ------------------------------

    Attach database failed for Server

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

    Could not redo log record (457:14202:19), for transaction ID (0:478674), on page (1:519205), database 'WSS_Content_5555' (database ID 15). Page: LSN = (370:463:113), type = 1. Log: OpCode = 2, context 2, PrevPageLSN: (298:40524:64).
    Restore from a backup of the database, or repair the database.
    During redoing of a logged operation in database 'WSS_Content_5555', an error occurred at log record ID (457:14202:19).
    Typically, the specific failure is previously logged as an error in the Windows Event Log service.
    Restore the database from a full backup, or repair the database.
    Could not open new database 'WSS_Content_5555'.
    CREATE DATABASE is aborted. (Microsoft SQL Server, Error: 3456)

我不知道如何修复数据库。维修前需要安装吗?那样的话,怎么附上呢?

【问题讨论】:

这有帮助吗? dba.stackexchange.com/questions/42762/… 【参考方案1】:

您可以尝试解决方法。简而言之:

    创建一个同名的虚拟数据库(可能需要先删除真实数据库,然后保存原始文件或重命名)。 使虚拟对象脱机(分离并(设置脱机或停止 SQL 服务))。 删除虚拟文件,然后用真实的数据库文件替换。 尝试重新附加 de DB

编辑

根据 OP 注释,您还可能需要重建日志(如果您丢失了事务)

    ALTER DATABASE [MyDatabase] REBUILD LOG ON (NAME='MyDatabaseLog',FILENAME='D:\Microsoft SQL Server\YourDataPath\Data\Logfile.ldf')

    并将数据库放入多用户日志中(关闭数据库可能需要您将其置于单次使用模式)

    ALTER DATABASE [nomdb] SET MULTI_USER

有关所有血腥细节,您可以参考Paul Randal Article

(注意本文作者使用紧急模式来(尝试)修复事务日志)

我已经成功使用了它,但根据损坏程度或其他细节,这可能是一项不可能完成的任务。考虑恢复备份。

请注意,这种特技在开发服务器中很好,但您确实需要为生产服务器中的灾难恢复进行计划(和演练)。

【讨论】:

感谢您的回答,该回答有效,但 Ranjana 回答中还有一些其他步骤在 Paul Randal 文章中没有。 缺少的步骤是 7 和 8。ALTER DATABASE [MyDatabase ] REBUILD LOG ON (NAME=’MyDatabaseLog’,FILENAME=’D:\Microsoft SQL Server\YourDataPath\Data\Logfile.ldf’)ALTER DATABASE [nomdb] SET MULTI_USER @Cyril 感谢稍后会正确编辑问题。另外我认为我在文章中看到了这一点,因为这是当您获得包含未提交事务的日志文件时使用的可选步骤(我猜)

以上是关于SQL Server:如何附加/修复分离/损坏的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的SQL Server 2008把数据库分离出来后就附加不进去了呢?

sql server 2008 日志文件删除后怎么附加

HIS医院信息系统主服务器RAID5崩溃 硬盘损坏 SQL数据库损坏修复 SQL SERVER数据库修复 备份文件无法还原数据恢复

MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)

SQL Server 分离与附加数据库

金蝶12.0 SQL SERVER数据库可能发生了架构损坏,请运行 DBCC CHECKCATALOG的错误修复