LDF文件丟失, 如何僅用MDF文件恢復數據庫呢?


筆者的一個大小為2 TB的SQL Server的database的LDF文件在玩存儲盤映射的過程中莫名其妙的丟失了. 好在MDF文件還在. 筆者慌了, Bruce Ye告訴筆者, 不用着急, 光用MDF也可以把數據庫弄回來的. 筆者就問Bruce, 假設我可以容忍LDF中信息的丟失的話, 那么該如何恢復這個數據庫呢?

 

我們執行了下面的步驟:

1. 在SQL Server Management Studio中刪除狀態為Recovery Pending的(即丟失了LDF的)問題數據庫.

2. 重命名老的MDF文件.

3. 重建一個新的數據庫, 名字跟剛剛刪除的數據庫完全一樣. 注意, 新的MDF的位置跟我們老的MDF的文件的位置相同. 這里的LDF文件的位置選在你想要存放的最終位置上(這個就是你所要的被恢復的LDF文件了).

4. 停掉SQL Server服務, 將新的MDF重命名掉, 老的MDF命名回原來的名字.

5. 啟動SQL Server服務, 這時這個數據庫的狀態會變為Recovery Pending. 我們開始執行下面的腳本.

alter database contentdb1 set emergency
alter database contentdb1 set single_user with rollback immediate
alter database contentdb1 rebuild log on (name=ContentDB1_log, filename='E:\CDBLOG\contentdb1log.ldf')
ALTER DATABASE contentdb1 SET MULTI_USER with rollback immediate

5. 這時數據庫的狀態就應該恢復正常了.

 

問題解決.

 

筆者在運行上面的腳本的時候, 遇到了一個報錯. 在運行了命令alter database contentdb1 set single_user with rollback immediate之后, 運行alter database contentdb1 rebuild log on 的時候說數據庫在single user mode, 我的當前用戶無法執行命令.

我使用了命令exec sp_who2, 發現我的contentdb1上有個suspend的session, 執行命令kill XY 殺掉這個死掉的session之后, 問題解決.

 

參考資料

=====================

SQL – Get Exclusive Lock – Fix for The database could not be exclusively locked to perform the operation error

http://robbamforth.wordpress.com/2009/11/13/sql-get-exclusive-lock-fix-for-the-database-could-not-be-exclusively-locked-to-perform-the-operation-error/

Rebuilding Transaction Log in SQL Server 2000, 2005, 2008

http://database-wiki.com/2011/03/06/rebuilding-transaction-log-in-sql-server-2000-2005-2008/

CHecking SQL Acitivity

http://networking.ringofsaturn.com/SQL/sql-activity.php

How to recover database from MDF in SQL Server 2005?

http://stackoverflow.com/questions/773059/how-to-recover-database-from-mdf-in-sql-server-2005


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM