從MDF檔案恢複Sql Server2000資料庫
來源:互聯網
上載者:User
如果您的mdf檔案是當前資料庫產生的,那麼很僥倖,也許你使用sp_attach_db或者sp_attach_single_file_db可以恢複資料庫,但是會出現類似下面的提示資訊
裝置啟用錯誤。物理檔案名稱 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有誤。
已建立名為 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新記錄檔。
但是,如果您的資料庫檔案是從其他電腦上複製過來的,那麼很不幸,也許上述辦法就行不通了。你也許會得到類似下面的錯誤資訊
伺服器: 訊息 1813,層級 16,狀態 2,行 1
未能開啟新資料庫 'test'。CREATE DATABASE 將終止。
裝置啟用錯誤。物理檔案名稱 'd:\test_log.LDF' 可能有誤。
怎麼辦呢?別著急,下面我們舉例說明恢複辦法。
A.我們使用預設建立一個供恢複使用的資料庫(如test)。可以在SQL Server Enterprise Manager裡面建立。
B.停掉資料庫伺服器。
C.將剛才產生的資料庫的記錄檔test_log.ldf刪除,用要恢複的資料庫mdf檔案覆蓋剛才產生的資料庫資料檔案test_data.mdf。
D.啟動資料庫伺服器。此時會看到資料庫test的狀態為“置疑”。這時候不能對此資料庫進行任何操作。
E.設定資料庫允許直接作業系統表。此操作可以在SQL Server Enterprise Manager裡面選擇資料庫伺服器,按右鍵,選擇“屬性”,在“伺服器設定”頁面中將“允許對系統目錄直接修改”一項選中。也可以使用如下語句來實現。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.設定test為緊急修複模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
此時可以在SQL Server Enterprise Manager裡面看到該資料庫處於“唯讀\置疑\離線\緊急模式”可以看到資料庫裡面的表,但是僅僅有系統資料表
G.下面執行真正的恢複操作,重建資料庫記錄檔
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
執行過程中,如果遇到下列提示資訊:
伺服器: 訊息 5030,層級 16,狀態 1,行 1
未能排它地鎖定資料庫以執行該操作。
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
說明您的其他程式正在使用該資料庫,如果剛才您在F步驟中使用SQL Server Enterprise Manager開啟了test庫的系統資料表,那麼退出SQL Server Enterprise Manager就可以了。
正確執行完成的提示應該類似於:
警告: 資料庫 'test' 的日誌已重建。已失去事務的一致性。應運行 DBCC CHECKDB 以驗證物理一致性。將必須重設資料庫選項,並且可能需要刪除多餘的記錄檔。資料恢複 sql資料庫修複 密碼恢複 sql資料庫恢複 硬碟異響 壞道修複 檔案恢複 sql server修複 檔案修複 raid資料恢複 sql資料庫修複 raid磁碟陣列 sql恢複 sql server恢複 硬碟資料恢複 硬碟壞道修複 硬碟資料修複 資料修複
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
此時開啟在SQL Server Enterprise Manager裡面會看到資料庫的狀態為“只供DBO使用”。此時可以訪問資料庫裡面的使用者表了。
H.驗證資料庫一致性(可省略)
dbcc checkdb('test')
一般執行結果如下:
CHECKDB 發現了 0 個分配錯誤和 0 個一致性錯誤(在資料庫 'test' 中)。
DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理員聯絡。
I.設定資料庫為正常狀態
sp_dboption 'test','dbo use only','false'
如果沒有出錯,那麼恭喜,現在就可以正常的使用恢複後的資料庫啦。
J.最後一步,我們要將步驟E中設定的“允許對系統目錄直接修改”一項恢複。因為平時直接作業系統表是一件比較危險的事情。當然,我們可以在SQL Server Enterprise Manager裡面恢複,也可以使用如下陳述式完成
sp_configure 'allow updates',0
go
reconfigure with override
go