SQL Server 置疑、可疑、正在恢復(fù)等情況分析
更新時(shí)間:2011年12月19日 21:38:02 作者:
有些時(shí)候當(dāng)你重啟了數(shù)據(jù)庫服務(wù),會發(fā)現(xiàn)有些數(shù)據(jù)庫變成了正在恢復(fù)、置疑、可疑等情況,這個(gè)時(shí)候DBA就會很緊張了,下面是一些在實(shí)踐中得到證明的方法
一、出錯(cuò)情況
有些時(shí)候當(dāng)你重啟了數(shù)據(jù)庫服務(wù),會發(fā)現(xiàn)有些數(shù)據(jù)庫變成了正在恢復(fù)、置疑、可疑等情況,這個(gè)時(shí)候DBA就會很緊張了,下面是一些在實(shí)踐中得到證明的方法。
在一次重啟數(shù)據(jù)庫服務(wù)后,數(shù)據(jù)庫顯示正在恢復(fù),過了很久還是這個(gè)狀態(tài),離線時(shí)間不能太長,所以就想起了一個(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ù)。
--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è)方法還沒嘗試過,大家可以試試看。
CREATE DATABASE DataBaseName
ON (FILENAME = 'D:\DataBase\Name.mdf')
FOR ATTACH_REBUILD_LOG ;
GO
有些時(shí)候當(dāng)你重啟了數(shù)據(jù)庫服務(wù),會發(fā)現(xiàn)有些數(shù)據(jù)庫變成了正在恢復(fù)、置疑、可疑等情況,這個(gè)時(shí)候DBA就會很緊張了,下面是一些在實(shí)踐中得到證明的方法。
在一次重啟數(shù)據(jù)庫服務(wù)后,數(shù)據(jù)庫顯示正在恢復(fù),過了很久還是這個(gè)狀態(tài),離線時(shí)間不能太長,所以就想起了一個(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
您可能感興趣的文章:
相關(guān)文章
一段腳本實(shí)現(xiàn)自動(dòng)備份并保存最近幾天的SQL數(shù)據(jù)庫
這篇文章主要介紹了如何自動(dòng)備份并保存最近幾天的SQL數(shù)據(jù)庫,需要的朋友可以參考下2014-03-03
SQL?Server?2022?AlwaysOn新特性之包含可用性組詳解
這篇文章主要介紹了SQL?Server?2022?AlwaysOn新特性之包含可用性組介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
SQL Server 數(shù)據(jù)庫分區(qū)分表(水平分表)詳細(xì)步驟
最近幾個(gè)擔(dān)心網(wǎng)站數(shù)據(jù)量大會影響sqlserver數(shù)據(jù)庫的性能,所以提前將數(shù)據(jù)庫分表處理好,下面是ExceptionalBoy同學(xué)分享的詳細(xì)方法,需要的朋友可以參考下2021-03-03
sql 百萬級數(shù)據(jù)庫優(yōu)化方案分享
這篇文章介紹了sql 百萬級數(shù)據(jù)庫優(yōu)化方案,有需要的朋友可以參考一下2013-10-10
sqlserver建立新用戶及關(guān)聯(lián)數(shù)據(jù)庫教程
本文講的是SQLserver數(shù)據(jù)庫創(chuàng)建新用戶方法以及賦予此用戶特定權(quán)限的方法,非常的簡單實(shí)用,有需要的小伙伴可以參考下2018-01-01

