Sql-Server

如何附加未正確分離的 .mdf 文件?

  • March 19, 2021

我們的一個客戶在一個不再執行的系統上擁有一個 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

拉吉

引用自:https://dba.stackexchange.com/questions/42762