sql server mdf文件損壞了如何進行數(shù)據(jù)庫修復(fù)
廣告:
你已經(jīng)將數(shù)據(jù)庫分離出來了,但是日志文件太大,大到你沒有多余的空間干別的;現(xiàn)在你將日志文件直接刪除了,
咱開始新建一個同名數(shù)據(jù)庫,修改數(shù)據(jù)庫為緊急模式;把SQL server服務(wù)停掉;用原來的數(shù)據(jù)庫mdf文件把這個同名的mdf文件覆蓋掉
啟動SQL server服務(wù),執(zhí)行代碼塊:單用戶模式---->分析數(shù)據(jù)庫--->撤銷單用戶----->重啟SQL server服務(wù)------>完成
設(shè)為緊急模式
ALTER DATABASE yourdbname SET EMERGENCY
或者
update sysdatabases set status = -32768 where name = 'test'
--可能會提示:不允許對系統(tǒng)目錄進行即席更新。
go
ALTER DATABASE yourdbname SET SINGLE_USER
或者
sp_dboption 'test', 'single user', 'true'
dbcc checkdb('test') 驗證數(shù)據(jù)一致性
dbcc checkdb('test') with no_infomsgs --只顯示錯誤信息
DBCC CHECKDB ('test', REPAIR_FAST) --未處理修復(fù)語句。當數(shù)據(jù)庫處于緊急模式下時,不支持此級別的修復(fù)。
dbcc checkdb('test',REPAIR_REBUILD) --未處理修復(fù)語句。當數(shù)據(jù)庫處于緊急模式下時,不支持此級別的修復(fù)。
DBCC CheckDB ('test', REPAIR_ALLOW_DATA_LOSS) --支持緊急模式下修復(fù)
ALTER DATABASE yourdbname SET MULTI_USER
或者
sp_dboption 'test','dbo use only','false' --設(shè)置數(shù)據(jù)庫為正常狀態(tài)
或者
sp_dboption 'test','single user','false'------撤銷單用戶模式
恢復(fù)掛起---變?yōu)榫o急模式----關(guān)閉服務(wù)---刪掉日志文件
---啟動服務(wù)---重新生成日志文件
alter database [test] Rebuild Log on(name=test_log,filename='D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\test_log.LDF')
--重新生成LDF的日志文件
或者
dbcc rebuild_log('test','D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\test_log.LDF')
--重新生成LDF的日志文件
備注:
1 替換mdf文件后,sql server日志提示(打開企業(yè)管理器會跳出對話框提示,后臺也會記錄):
一個或多個文件與數(shù)據(jù)庫的主文件不匹配。如果是嘗試附加數(shù)據(jù)庫,請使用正確的文件重試該操作。如果這是現(xiàn)有數(shù)據(jù)庫,則文件可能已損壞,應(yīng)該從備份進行還原。(Microsoft SQL Server,錯誤: 5173) --表示mdf文件已被替換
2 需要重新打開企業(yè)管理器(ssms)會提示恢復(fù)掛起
或者在單用戶模式下,分離數(shù)據(jù)庫,再附加數(shù)據(jù)庫(附加時只選mdf文件,不選ldf文件),也可以解決。
廣告: