解決問題 SQL Server (1)

教學目標

主要解決當我們只有資料庫的 MDF 資料庫檔案,而沒有 LDF 記錄檔案時要如何還原資料庫的問題。

重點整理

當我們只有資料庫的 MDF 資料庫檔案,而沒有 LDF 記錄檔案時要如何還原資料庫呢?假設我們有個情境是在 SQL Server 2012 中的 DEMO 資料庫只有備份 MDF 資料庫檔案,此時就無法正常附加資料庫,面對這樣的問題只要按照下述步驟就能進行解決。

前置作業

開啟「Microsoft SQL Server Management Studio」工具,登入使用者,新增同樣名稱的資料庫,資料庫檔案和記錄檔案的儲存路徑必須與原先 MDF 資料庫檔案相同。

開啟「SQL Server Configuration Manager」工具,點選「SQL Server」服務,將「SQL Server (MSSQLSERVER)」 服務按右鍵點選「停止」。

刪除 LDF 記錄檔案,將原先 MDF 資料庫檔案複製至資料庫檔案儲存路徑,進行檔案覆蓋。

開始修復

開啟「SQL Server Configuration Manager」工具,點選「SQL Server」服務,將「SQL Server (MSSQLSERVER)」 服務按右鍵點選「啟動」。

開啟「Microsoft SQL Server Management Studio」工具,登入使用者,新增查詢指令開啟資料庫。
(註: 會出現檔案啟動錯誤訊息是正常情況。)

1
ALTER DATABASE demo SET ONLINE;

新增查詢指令查看資料庫狀態,目前情況為「RECOVERY_PENDING」。

1
SELECT STATE_DESC FROM SYS.DATABASES WHERE NAME='demo'

新增查詢指令設定資料庫為 EMERGENCY 狀態,以利進行疑難排解。
(註: 會出現資料庫必須處於單一使用者模式訊息是正常情況。)

1
2
ALTER DATABASE demo SET EMERGENCY;
DBCC CHECKDB (demo , REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

新增查詢指令設定資料庫為 SINGLE_USER 狀態,以利進行資料庫修復。
(註: 過程中會出現記錄已經重建,已遺失交易一致性訊息是正常情況。)

1
2
ALTER DATABASE demo SET SINGLE_USER;
DBCC CHECKDB (demo , REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

新增查詢指令查看資料庫狀態,目前情況為「ONLINE」。

1
SELECT STATE_DESC FROM SYS.DATABASES WHERE NAME='demo'

後續設定

新增查詢指令進行資料庫更正。

1
DBCC UPDATEUSAGE(demo)

新增查詢指令設定資料庫為 MULTI_USER 狀態,以利後續多個使用者同時正常使用。

1
ALTER DATABASE demo SET MULTI_USER;

最後點選「資料庫」按重新整理,接著就能確認資料庫是否能夠正常使用。

相關資源