這兩天被MSSQL給搞死,某個系統資料庫的LDF檔出了問題,所以該資料庫一整個不正常,連卸離資料庫也不行。正常來說MSSQL可以以卸離某資料庫的方法來刪除過大的LDF檔,只要先卸離然後在移除LDF,然後在將MDF檔以附掛的方式回復該資料庫。
但是遇到連卸載都有問題時就麻煩了,以下是我這次處理的心得和步驟。
1.先停止MSSQL,並將XXX_log.LDF檔刪除
2.此時會看到XXX資料庫狀態為suspend(有疑問的),執行下面指令
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
3.執行下面指令,將XXX資料庫轉為緊急模式
update sysdatabases set status=-32768 where dbid=DB_ID('XXX')
4.進行重建LDF檔的工作
dbcc rebuild_log('XXX','C:\Program Files\Microsoft SQL Server\MSSQL\Data\XXX_log.ldf')
5.設定資料庫為正常狀態
sp_dboption 'XXX','dbo use only','false'
6.回復原存取設定
sp_configure 'allow updates',0
go
reconfigure with override
go
回復之後如果某些資料表有發生資料錯誤的問題
伺服器: 訊息 7105,層級 22,狀態 6,行 1
text、ntext、或是 image 節點的分頁 (1:62855),插槽 19 不存在。
連線中斷
類似上面這樣的訊息,就需要進行資料復原,可以執行下列指令
alter database XXX set single_user with ROLLBACK IMMEDIATE
go
dbcc checkdb('XXX',REPAIR_ALLOW_DATA_LOSS)
go
alter database XXX set multi_user
go
一般都能夠順利修復(不過可能有資料遺失的問題)
如果在救不會來 那只好祈求平常有備份了吧
1 則留言:
這個某系統應該就是線上申辦吧~
張貼留言