我們重要的數據是存放在MDF文件中的,如果LDF文件丟失,MDF文件沒有丟失,那麼數據也可以還原。如果LDF文件沒有丟失,MDF文件丟失,且LDF文件是完整的,也是可以提供一定手段還原數據。
現象描述
我們現在要面對的問題是,針對wtlog_2008_m12這個數據庫,只有MDF文件而LDF文件丟失了,SQL Server Management Studio中也沒有這個數據庫,附加上也會提示錯誤。
解決方法
(1)在SQL Server Management Studio刪除狀態為Recovery Pending的(即丟失了LDF的)問題數據庫(如果有的話,應該是在數據庫管理中沒有的)
(2)重命名老的MDF文件. 比如改為wtlog_2008_m12_bak.mdf
(3) 重建一個新的數據庫, 名字跟丟失的數據庫完全一樣,比如為wtlog_2008_m12,LDF文件的名字如果為wtlog_2008_m12的話,數據庫提示報錯,說邏輯名字已存在,但文件怎麼也找不到,此處的LDF的文件命名為wtlog_2008_m12_log。 注意, 新的MDF的位置跟我們老的MDF的文件的位置相同. 這裡的LDF文件的位置選在你想要存放的最終位置上(這個就是你所要的被恢復的LDF文件了).
(4)關閉SQL Server服務,將新的MDF(wtlog_2008_m12.mdf)重命名掉(比如改為wtlog_2008_m12___.mdf), 老的MDF(wtlog_2008_m12_bak.mdf)命名回原來的名字(wtlog_2008_m12.mdf).
(5)開啟SQL Server服務,連接數據庫,執行下面語句,如果報錯的話,請查看是否連接上數據庫,或者有其他進程連著數據庫。
復制代碼 代碼如下:
alter database wtlog_2008_m12 set emergency
alter database wtlog_2008_m12 set single_user with rollback immediate
alter database wtlog_2008_m12 rebuild log on (name=wtlog_2008_m12, filename='D:/watcher/database/wtlog_2008_m12.ldf')
alter database wtlog_2008_m12 SET MULTI_USER with rollback immediate
(6)此時,mdf和ldf的名字都為wtlog_2008_m12,刪除多余的mdf文件即可。