一、出錯(cuò)情況
有些時(shí)候當(dāng)你重啟了數(shù)據(jù)庫服務(wù),會(huì)發(fā)現(xiàn)有些數(shù)據(jù)庫變成了正在恢復(fù)、置疑、可疑等情況,這個(gè)時(shí)候DBA就會(huì)很緊張了,下面是一些在實(shí)踐中得到證明的方法。
在一次重啟數(shù)據(jù)庫服務(wù)后,數(shù)據(jù)庫顯示正在恢復(fù),過了很久還是這個(gè)狀態(tài),離線時(shí)間不能太長(zhǎng),所以就想起了一個(gè)方法,就是把數(shù)據(jù)庫服務(wù)停止了,把數(shù)據(jù)文件mdf和ldf拷貝出來,刪除了ldf文件,按照之前的經(jīng)驗(yàn),好像是在沒有l(wèi)df的情況下可以使用mdf來恢復(fù)數(shù)據(jù)庫。創(chuàng)建了一個(gè)同名的數(shù)據(jù)庫,停止數(shù)據(jù)庫服務(wù),覆蓋mdf文件,再啟動(dòng)數(shù)據(jù)庫服務(wù),這個(gè)時(shí)候還是處于可疑的狀態(tài)。
其中使用mdf來附加數(shù)據(jù)庫是附加不了的,一直報(bào)錯(cuò)。
二、解決步驟
方法一:使用腳本進(jìn)行數(shù)據(jù)庫恢復(fù)。
復(fù)制代碼 代碼如下:
--DataBaseName為修復(fù)的數(shù)據(jù)名
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) 使用指定值強(qiáng)制重新配置:(1、0表示為真假)
sp_configure 'allow updates', 1 reconfigure with override
2) 設(shè)置為緊急狀態(tài):
alter database DataBaseName set emergency
3) 設(shè)置為單用戶模式:
alter database [DataBaseName] set single_user
或者:Sp_dboption 'DataBaseName', 'single user', 'true'
4) 修復(fù)發(fā)現(xiàn)的錯(cuò)誤:
DBCC CHECKDB('DataBaseName','REPAIR_ALLOW_DATA_LOSS')
5) 設(shè)置為聯(lián)機(jī)、在線:
ALTER DATABASE [DataBaseName] SET ONLINE
方法二:這個(gè)方法還沒嘗試過,大家可以試試看。
復(fù)制代碼 代碼如下:
CREATE DATABASE DataBaseName
ON (FILENAME = 'D:\DataBase\Name.mdf')
FOR ATTACH_REBUILD_LOG ;
GO
您可能感興趣的文章:- sqlserver數(shù)據(jù)庫出現(xiàn)置疑的解決思路