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