SQL2000置疑數據庫修復

SQL置疑數據庫修復
說明:[dbname]爲示例置疑數據庫。此方法只適應SQLServer2000。

請先檢查一下:
USE master
go
SELECT * FROM sysdatabases WHERE name='dbname'

--檢查這個數據庫還存在不。
如果存在,請按下面的方法操作,如果不存在,請新建一個名稱不同數據庫,將數據庫文件和日誌文件放在置疑數據庫文件夾下。以便移動,接下面來還是接下面的方法進行修復。

use master
go
dbcc checkdb(dbname) --如果返回結果出現了紅色的提示文字,說明數據庫中存在錯誤,需要修復
go

查詢分析器返回錯誤信息,檢查出現那些錯誤情況(下面我會講怎樣識別數據庫損壞的情況),請嘗試以下步聚恢復數據庫.

1.停止SQL Server的服務,備份SQL Server安裝目錄下的data子目錄下故障數據庫的兩個文件,一個數據文件dbname_data.mdf,一個dbname_log.ldf(也有可能非此命名),同時查看磁盤空間是否有足夠的空間;

3.把sql安裝目錄中的data文件夾下的LDF文件(dbname_log.ldg)刪除。
4.重新啓動SQL Server服務,然後運行如下命令:

Use Master
go
sp_configure 'allow updates', 1
reconfigure with override
go
update sysdatabases set status = 32768 where name = 'dbname'
go
SHUTDOWN --停止SQL

6.停止SQL後重新啓動SQL Server服務,然後重建日誌文件(經驗告訴我在沒有出現在dbcc checkdb修復數據庫時出迴避模式下可在直接創建日誌文件,如果出現,在status = 28下創建日誌文件):

use master
go
DBCC REBUILD_LOG('dbname','D:/Data/Datadbname_log.ldf')
go
SHUTDOWN --停止SQL


7.停止SQL後重新啓動SQL Server服務,然後運行:

use master
go
update sysdatabases set status = 28 where name = 'dbname'
go

sp_configure 'allow updates', 0
reconfigure with override
go

8.修復數庫
--請只打開查詢分析器中執行下列語句.執行前斷開其它所有數據庫連接,最好是斷開網線

USE master
Go
--單用戶模式,也可在企業管理員右擊此數據庫選項上選上單用戶。經驗告訴給我,手動在企業數據庫裏設置單用戶最好。
ALTER DATABASE dbname SET SINGLE_USER
go
--修復數據庫
DBCC CHECKDB ('dbname','REPAIR_REBUILD') --建議使用
--OR
DBCC CHECKDB('dbname','REPAIR_ALLOW_DATA_LOSS') --出現一致性錯誤和分配頁錯誤,使用高級別的修復級別

 

--通常情況下我不會建議採用'REPAIR_ALLOW_DATA_LOSS'來修復數據庫,因爲可能會丟失數據的
--如果你檢查出來是一兩個表出現錯誤的話,請用下面的語句修復
DBCC CHECKTABLE('表名','REPAIR_REBUILD')
OR
DBCC CHECKTABLE('表名','REPAIR_ALLOW_DATA_LOSS') --意義同上
Go

--再次數據庫檢查,如果返回結果中沒有了紅色的提示文字,說明修復成功;
DBCC CHECKDB ('dbname')
--如果檢查出來還出現紅色字,這意味着還需要更高級別的修復;嘗試將上面修復語句的'repair_rebuild'換爲'repair_allow_data_loss'再試,之後再次檢查數據庫。
Go
--退出前請一定要執行以下語句返回到多用戶模式
ALTER DATABASE dbname SET MULTI_USER
go

 

在修復表的時候,出現“未處理修復語句。數據庫需要處於單用戶模式下。”那是因爲你沒有選擇要修復的數據庫,選擇的是master。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章