SQL 服务器:如何附加/修复分离/损坏的数据库?
SQL Server: How to attach / repair a detached / damaged database?
数据库服务器崩溃。我能够获取 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)
我不知道如何修复数据库。维修前需要贴上吗?那么,我该如何附加呢?
您可以尝试解决方法。简而言之:
- 创建一个同名的虚拟数据库(可能需要先删除真实数据库,然后保存原始文件或重命名)。
- 使虚拟机脱机(分离并(设置脱机或停止 SQL 服务))。
- 删除虚拟文件,然后用真正的数据库文件替换。
- 尝试重新附加数据库
编辑
如 OP 评论所述,您还可能需要重建日志(如果您丢失了事务)
ALTER DATABASE [MyDatabase] 重建登录 (NAME='MyDatabaseLog',FILENAME='D:\Microsoft SQL Server\YourDataPath\Data\Logfile.ldf')
并将数据库放入多用户日志中(关闭数据库可能需要您将其置于单机使用模式)
更改数据库 [nomdb] 设置 MULTI_USER
有关所有血腥细节,您可以参考 Paul Randal Article
(注意本文作者使用紧急模式(尝试)修复事务日志)
我已经成功地使用了它,但根据损坏程度或其他细节,这可能是一项不可能完成的任务。考虑恢复备份。
请注意,这种特技在开发服务器中很好,但您确实需要在生产服务器中计划(和演练)灾难恢复。
数据库服务器崩溃。我能够获取 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)
我不知道如何修复数据库。维修前需要贴上吗?那么,我该如何附加呢?
您可以尝试解决方法。简而言之:
- 创建一个同名的虚拟数据库(可能需要先删除真实数据库,然后保存原始文件或重命名)。
- 使虚拟机脱机(分离并(设置脱机或停止 SQL 服务))。
- 删除虚拟文件,然后用真正的数据库文件替换。
- 尝试重新附加数据库
编辑
如 OP 评论所述,您还可能需要重建日志(如果您丢失了事务)
ALTER DATABASE [MyDatabase] 重建登录 (NAME='MyDatabaseLog',FILENAME='D:\Microsoft SQL Server\YourDataPath\Data\Logfile.ldf')
并将数据库放入多用户日志中(关闭数据库可能需要您将其置于单机使用模式)
更改数据库 [nomdb] 设置 MULTI_USER
有关所有血腥细节,您可以参考 Paul Randal Article
(注意本文作者使用紧急模式(尝试)修复事务日志)
我已经成功地使用了它,但根据损坏程度或其他细节,这可能是一项不可能完成的任务。考虑恢复备份。
请注意,这种特技在开发服务器中很好,但您确实需要在生产服务器中计划(和演练)灾难恢复。