一、出錯情況
有些時候當你重啟了資料庫服務,會發現有些資料庫變成了正在恢複、置疑、可疑等情況,這個時候DBA就會很緊張了,下面是一些在實踐中得到證明的方法。
在一次重啟資料庫服務後,資料庫顯示正在恢複,過了很久還是這個狀態,離線時間不能太長,所以就想起了一個方法,就是把資料庫服務停止了,把資料檔案mdf和ldf拷貝出來,刪除了ldf檔案,按照之前的經驗,好像是在沒有ldf的情況下可以使用mdf來恢複資料庫。建立了一個同名的資料庫,停止資料庫服務,覆蓋mdf檔案,再啟動資料庫服務,這個時候還是處於可疑的狀態。
其中使用mdf來附加資料庫是附加不了的,一直報錯。
二、解決步驟
方法一:使用指令碼進行資料庫恢複。 複製代碼 代碼如下:--DataBaseName為修複的資料名
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE [DataBaseName] SET EMERGENCY
GO
sp_dboption 'DataBaseName', 'single user', 'true'
GO
DBCC CHECKDB('DataBaseName','REPAIR_ALLOW_DATA_LOSS')
GO
ALTER DATABASE [DataBaseName] SET ONLINE
GO
sp_configure 'allow updates', 0 reconfigure with override
GO
sp_dboption 'DataBaseName', 'single user', 'false'
GO
SQL講解:
1) 使用指定值強制重新設定:(1、0表示為真假)
sp_configure 'allow updates', 1 reconfigure with override
2) 設定為緊急狀態:
alter database DataBaseName set emergency
3) 設定為單一使用者模式:
alter database [DataBaseName] set single_user
或者:Sp_dboption 'DataBaseName', 'single user', 'true'
4) 修複發現的錯誤:
DBCC CHECKDB('DataBaseName','REPAIR_ALLOW_DATA_LOSS')
5) 設定為聯機、線上:
ALTER DATABASE [DataBaseName] SET ONLINE
方法二:這個方法還沒嘗試過,大家可以試試看。
複製代碼 代碼如下:CREATE DATABASE DataBaseName
ON (FILENAME = 'D:\DataBase\Name.mdf')
FOR ATTACH_REBUILD_LOG ;
GO