Sql-Server
如何附加未正確分離的 .mdf 文件?
我們的一個客戶在一個不再執行的系統上擁有一個 SQL Server 2000 數據庫。他們不知道數據庫中有什麼。他們給了我 .mdf 和 .ldf 文件,並希望我們調查和提取任何資訊。
我認為備份這些文件時數據庫沒有正確分離,因為當我嘗試將這些文件附加到我的 SQL Server 2008 速成版時出現以下錯誤:
由於數據移動,無法使用 NOLOCK 繼續掃描。將數據庫“GRMStemp”從版本 539 轉換為目前版本 655。數據庫“GRMStemp”正在執行從版本 539 到版本 551 的升級步驟。(Microsoft SQL Server,錯誤:601)
在這種情況下我應該怎麼做才能附加數據庫?
聽起來數據庫已損壞。在您進一步做任何事情之前,製作文件的副本,並且只使用副本。
如果問題與日誌隔離,您可以嘗試以下操作:
CREATE DATABASE [GRMStemp] ON (FILENAME = 'c:\wherever\MDF_File.mdf') FOR ATTACH_REBUILD_LOG;
如果失敗,Paul Randal 在 MSDN 上的論壇文章描述了一個可能有效的過程。基本上:
- 在您的 2008 實例上,創建一個具有完全相同大小的數據文件的數據庫(我不會費心嘗試將 2000 實例放在任何地方)
- 關閉 SQL Server
- 重命名新數據庫的 mdf 文件,並將舊的粘貼到它的位置
- 啟動伺服器並讓數據庫嘗試恢復,然後進入可疑模式
- 將數據庫置於緊急模式
ALTER DATABASE GRMStemp SET EMERGENCY;
- 執行
DBCC CHECKDB (GRMStemp, REPAIR_ALLOW_DATA_LOSS);
它將重建日誌並執行完整修復順便說一句,如果客戶不知道數據庫中有什麼,並且沒有足夠的責任來維護正確的備份,那麼數據有多重要?
錯誤 601 表示
當使用 NOLOCK 鎖定提示或事務隔離級別設置為 READ UNCOMMITTED 進行掃描時,可能會刪除位於掃描目前位置的頁面。發生這種情況時,Microsoft® SQL Server™ 無法繼續掃描。
你可能想試試這個:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; GO CREATE DATABASE GRMStemp ON (FILENAME = '<mdf file path>'), (FILENAME = '<ldf file path>') FOR ATTACH; GO
拉吉