1. 程式人生 > >LDF檔案丟失, 如何僅用MDF檔案恢復資料庫呢?

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