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

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

 

咱們執行了下面的步驟:sql

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

2. 重命名老的MDF文件.session

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

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

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

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. 這時數據庫的狀態就應該恢復正常了.orm

 

問題解決.server

 

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

我使用了命令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

相關文章
相關標籤/搜索