摘自: http://wenku.baidu.com/link?url=QYrNtEu3F3-3fhW45imoNIKkArcMAfqfUc6PNhvpv0UCHu4ChjF-OEiveN2xqPcwnGF6-1UiQY4Tyo4km5qAP_jRi-PJhub6OidIWgFZNl_
A、檢查資料庫常用方法:
隔一定時間或計算機經常當機、突然掉電、軟體經常連接配接不上資料庫時,需要進行檢查資料庫的完整性和正确性。
一、進入sqlserver“查詢分析器”,選中“消費資料庫”後輸入檢測資料庫指令:
DBCC CHECKDB ('消費資料庫名稱', NOINDEX)
二、Sqlserver開始檢查“消費資料庫”的完整性和正确性。
檢查結果:
1、如果為“0個配置設定性錯誤,0個一緻性錯誤”,消費資料庫正常。退出。
2、否則“消費資料庫”需要進行恢複。
步驟:
1、把“查詢分析器”的目前資料庫改為master資料庫。
2、在查詢分析器裡面依次執行下面指令:
A、SP_DBOPTION '消費資料庫名稱','SINGLE USER',TRUE
B、DBCC CHECKDB('消費資料庫名稱',REPAIR_ALLOW_DATA_LOSS)
C、SP_DBOPTION '消費資料庫名稱','SINGLE USER',FALSe
3、最後重複步驟一再次檢查資料庫正确性
B、LOG檔案損壞處理方法:
1、停止服務,copy mdf與ldf檔案到别處(不要做sp_detach_db分離資料庫)
2、建立一個新資料庫
3、将你複制出去的 mdf檔案改名字,替換剛剛建立的資料庫的mdf檔案(此時你再重新整理資料庫仍為置疑狀态,可以不管)
4、進入查詢分析器,運作以下語句
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1
GO
RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS=-32768 WHERE NAME='資料庫名稱'
5、重建LOG
DBCC REBUILD_LOG('資料庫名稱','C:PROGRAM FILESMICROSOFT SQL SERVERMSSQLDATA資料庫名稱_LOG.LDF')
如果提示“檔案已存在”的話,請在相應目錄下把原來的LOG檔案删除
6、DBCC檢查 DBCC CHECKDB('資料庫名稱')
7、設定資料庫為正常狀态
UPDATE SYSDATABASES SET STATUS =28 WHERE NAME='資料庫名稱'
GO
8、不允許對系統目錄直接修改
SP_CONFIGURE 'ALLOW UPDATES',0
GO
RECONFIGURE WITH OVERRIDE
GO
9、以上步驟執行完畢後應該就可以進入系統了,但有可能資料庫還是有錯誤,這時可以使用A中的方法對資料庫進行修複
10、如在執行“SP_DBOPTION '消費資料庫名稱','SINGLE USER',TRUE”報錯“伺服器: 消息 5070,級别 16,狀态 2,行 1
如果其他使用者正使用資料庫 'elong',則資料庫狀态不能更改 伺服器: 消息 5069,級别 16,狀态 1,行 1 ALTER DATABASE 語句失敗。 sp_dboption 指令失敗。”
就進行以下步驟: 進入查詢分析器 執行以下語句(注意資料庫名稱)
use master
go
--kill所有會話
Declare @tblConnectedUsers Table (SPID int)
Declare @vcSQLText varchar(200),@iSPID int
Insert into @tblConnectedUsers
Select p.spid
from master.dbo.sysprocesses p (nolock)
join master..sysdatabases d (nolock) on p.dbid = d.dbid
Where d.[name] = '資料庫名稱'
While 1 = 1
Begin
Select top 1 @iSPID = SPID
From @tblConnectedUsers
Where SPID > IsNull(@iSPID, 0)
order by SPID asc
If @@RowCount = 0
Break
Set @vcSQLText = 'Kill ' + Convert(varchar(10), @iSPID)
Exec(@vcSQLText)
End
11、再重新操作A中的步驟修複資料庫