只有mdf文件的數(shù)據(jù)庫附加失敗的修復(fù)
附加時報如下錯誤:
服務(wù)器: 消息 1813,級別 16,狀態(tài) 2,行 1
未能打開新數(shù)據(jù)庫 'test'。CREATE DATABASE 將終止。
設(shè)備激活錯誤。物理文件名 "d:\data\test_log.LDF' 可能有誤。
步驟:
A、用“企業(yè)管理器”新建一個同名的數(shù)據(jù)。可以修改默認(rèn)路徑,為表述方便,我使用D:\data\,數(shù)據(jù)文件名test.mdf,日志文件名test_log.ldf
B、停止SQL服務(wù)
C、刪除test_log.ldf文件,將新建的test.mdf文件用舊的test.mdf文件替換。
D、啟動SQL服務(wù)。進(jìn)入企業(yè)管理器后發(fā)現(xiàn)test數(shù)據(jù)顯示為“置疑”,此后保證無人連接上此數(shù)據(jù)庫,并不做任何操作。
E、設(shè)置test數(shù)據(jù)庫允許直接操作系統(tǒng)表。此操作可以在SQL Server Enterprise Manager里面選擇數(shù)據(jù)庫服務(wù)器,按右鍵,選擇“屬性”,在“服務(wù)器設(shè)置”頁面中將“允許對系統(tǒng)目錄直接修改”一項選中。也可以使用如下語句來實現(xiàn)。我在實際操作的時候沒有使用命令,命令方式大家可以自己測試 ^_^
復(fù)制代碼 代碼如下:
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F、設(shè)置test數(shù)據(jù)庫為緊急修復(fù)模式。在查詢分析器中執(zhí)行如下語句:update sysdatabases set status=-32768 where dbid=DB_ID('test')
復(fù)制代碼執(zhí)行后在企業(yè)管理器中刷新后會發(fā)現(xiàn)ttdb數(shù)據(jù)庫顯示為“只讀\置疑\脫機\緊急模式”??梢钥吹綌?shù)據(jù)庫里面的表,但是僅僅有系統(tǒng)表。
G、重建數(shù)據(jù)庫日志文件。在查詢分析器中執(zhí)行如下語句:
復(fù)制代碼 代碼如下:
dbcc rebuild_log('test','d:\Data\test_log.ldf')
執(zhí)行之前必須退出企業(yè)管理器,并且沒有人連接些數(shù)據(jù)庫。否則會報如下錯誤:
服務(wù)器: 消息 5030,級別 16,狀態(tài) 1,行 1
未能排它地鎖定數(shù)據(jù)庫以執(zhí)行該操作。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
正常的消息:
警告: 數(shù)據(jù)庫 'test' 的日志已重建。已失去事務(wù)的一致性。應(yīng)運行 DBCC CHECKDB 以驗證物理一致性。將必須重置數(shù)據(jù)庫選項,并且可能需要刪除多余的日志文件。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
此時打開在SQL Server Enterprise Manager里面會看到數(shù)據(jù)庫的狀態(tài)為“只供DBO使用”??梢栽L問數(shù)據(jù)庫里面的用戶表了。
H、驗證數(shù)據(jù)庫一致性(可省略,不過我忠實地執(zhí)行了^_^),查詢分析器中執(zhí)行:
復(fù)制代碼 代碼如下:
dbcc checkdb('test')
報出了每個表的執(zhí)行情況后,最后報:
CHECKDB 發(fā)現(xiàn)了 0 個分配錯誤和 0 個一致性錯誤(在數(shù)據(jù)庫 'test' 中)。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯誤信息,請與系統(tǒng)管理員聯(lián)系。
I、設(shè)置數(shù)據(jù)庫為正常狀態(tài)。執(zhí)行語句:
復(fù)制代碼 代碼如下:
sp_dboption 'test','dbo use only','false'
走到這一步,如果沒有報錯,已經(jīng)可以長長舒一口氣了,去喝口水吧。:P
J、最后一步,我們要將步驟E中設(shè)置的“允許對系統(tǒng)目錄直接修改”一項恢復(fù)。怎么做當(dāng)然不用再多說啦。也可以執(zhí)行語句:
復(fù)制代碼 代碼如下:
sp_configure 'allow updates',0
go
reconfigure with override
go
您可能感興趣的文章:- SQLServer2005 沒有日志文件(*.ldf) 只有數(shù)據(jù)文件(*.mdf) 恢復(fù)數(shù)據(jù)庫的方法
- 恢復(fù).mdf 數(shù)據(jù)庫步驟
- sqlserver只有MDF文件恢復(fù)數(shù)據(jù)庫的方法
- mssql server .ldf和.mdf的文件附加數(shù)據(jù)庫的sql語句
- MDF文件在SQL Server中的恢復(fù)技術(shù)