SQL Server 2008 R2 (Suspect) 模式 - 如何修复?

Vyt*_*999 5 sql-server dbcc sql-server-2008-r2 corruption

我有处于可疑模式的 SQL Server 2008 R2 数据库。我试图修复它运行此查询:

EXEC sp_resetstatus ‘yourDBname’;
ALTER DATABASE yourDBname SET EMERGENCY
DBCC checkdb(’yourDBname’)
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (’yourDBname’, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)

但修复输出是这条消息:

Warning: You must recover this database prior to access.
Msg 8921, Level 16, State 1, Line 5
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Warning: The log for database 'ServeDB' has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer 
has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has 
been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
Msg 8921, Level 16, State 1, Line 9
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Run Code Online (Sandbox Code Playgroud)

如何彻底修复数据库?我做的这个修复只工作了几天,然后数据库再次进入可疑模式......

Mar*_*sen 7

您无法修复此数据库,并且您可能进行的修复尚未完成。您应该确保明白为什么你的数据库正在成为腐败-检查您的磁盘系统,这是最有可能是罪魁祸首。

然后从备份中恢复您的数据库 - 但请确保在该备份上运行 DBCC CHECKDB 以确保它本身不会损坏。

带有 REPAIR_ALLOW_DATA_LOSS 的 DBCC CHECKDB 是您应该去的最后手段。在此之前,您应该恢复一个有效的备份。一旦您确实使用了 REPAIR_ALLOW_DATA_LOSS,就不要指望您的数据库会神奇地再次恢复生机——很可能已经发生了无法修复的损坏——尤其是在这种情况下,因为它会抱怨系统表损坏。


Car*_*est 6

你试过保罗兰德尔推荐的吗?创建、分离、重新附加和修复可疑数据库

  1. 使用完全相同的文件布局创建一个新的虚拟数据库,并尽可能接近分离数据库的文件大小
  2. 关闭 SQL Server
  3. 交换损坏的数据库文件
  4. 重新启动 SQL Server
  5. 使用紧急模式修复


小智 5

我遇到了类似的问题。但是,我无法排除数据库的怀疑,因为备份也是可疑的。我使用 SSMS 中的导出功能将表和数据移动到新的空白数据库。

然而,这不会移动您所有的存储过程、视图、函数等。我有一份 RedGate 的 SQL Compare(我强烈推荐给任何定期使用 SQL 模式的人)的副本,它处理了所有的结构迁移。所以它使这个过程相当轻松。如果您需要使用它,RedGate 有 14 天的软件试用期。

如果你只有表,或者少量的程序、视图等,你可以使用SSMS的“生成脚本”功能为这些项目制作创建脚本,然后在你的新数据库上运行它们。

RedGate 的 SQL 比较:http : //www.red-gate.com/products/sql-development/sql-compare/