![从可疑数据库中获取数据](https://linux22.com/image/549617/%E4%BB%8E%E5%8F%AF%E7%96%91%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE.png)
我们遇到了一次停电,我们的一个 SQL 2000 数据库被标记为可疑。我们有一个备份,但它已经超过一天了(停电发生在计划备份之前),我们不想丢失那一天的数据。
有没有办法恢复数据库,然后将丢失的数据从可疑数据库表中复制出来?
答案1
首先我要说的是,一旦数据库被标记为“可疑”,您的处境就会非常糟糕——无论您如何恢复,都很有可能丢失一些数据。
也就是说,您应该能够以紧急模式启动数据库并从那里开始修复过程(checkdb)。 http://gargmanoj.wordpress.com/2008/07/17/how-to-repair-a-sql-server-2005-suspect-database/有更多针对 SQL Server 2005 的细节,但我相信它们在 2000 中也能起作用(下面为后人重现了命令)。
--- Find out why the DB is marked suspect
DBCC CHECKDB (‘YourDBname’) WITH NO_INFOMSGS, ALL_ERRORMSGS
--- Reset the DB to Emergency Mode
EXEC sp_resetstatus ‘yourDBname’;
ALTER DATABASE yourDBname SET EMERGENCY
--- Initial checkdb to get things working
DBCC checkdb(‘yourDBname’)
--- Single-User Mode & "Dangerous" repair (possibility of data loss!)
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (‘yourDBname’, REPAIR_ALLOW_DATA_LOSS)
--- Make the DB usable again
ALTER DATABASE yourDBname SET MULTI_USER
完成维修后(或者最好在开始维修前),你应该让老板为数据库服务器购买 UPS。当数据丢失的威胁悬在人们头上时,摇动摇钱树往往更容易。