首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 資料庫檔案損壞災難復原實戰:備份與記錄還原流程

     編輯:關於SqlServer

資料庫檔案損壞是 DBA 最噩夢的情境。本文以 SQL Server 2000 為例,完整演示從完整備份、記錄備份(NO_TRUNCATE)到分階段還原(NORECOVERY/RECOVERY)的標準災難復原流程,強調完備備份策略的重要性。

模擬損壞與復原步驟

1. 建立測試環境

-- 建立完整復原模式資料庫
CREATE DATABASE test;
GO
USE test;
GO

CREATE TABLE a (c1 varchar(2));
INSERT INTO a VALUES ('aa'), ('bb');
GO

-- 完整備份
BACKUP DATABASE test TO DISK = 'test_1.bak';
GO

-- 後續異動
INSERT INTO a VALUES ('cc');
CREATE TABLE b (c1 int);
INSERT INTO b VALUES (1), (2);
GO

2. 模擬媒體損壞

停止 SQL Server 服務,使用十六進位編輯器(如 UltraEdit)隨意修改 test_data.mdf 位元,模擬實體媒體損壞。重啟服務後,資料庫呈現置疑狀態。

3. 尾端記錄備份(關鍵步驟)

-- 以 NO_TRUNCATE 強制備份受損資料庫的作用中記錄
BACKUP LOG test TO DISK = 'test_2.bak' WITH NO_TRUNCATE;
GO
-- 訊息:已處理 2 頁,屬於檔案 'TEST_Log',耗時 0.111 秒

NO_TRUNCATE 允許在資料庫損壞時仍能備份交易記錄,確保最後交易不遺失。

4. 還原完整備份(NORECOVERY)

RESTORE DATABASE test FROM DISK = 'test_1.bak' WITH NORECOVERY;
GO
-- 訊息:已處理 97 頁,耗時 0.107 秒

NORECOVERY 讓資料庫處於「還原中」狀態,可套用後續記錄備份。

5. 還原記錄備份(RECOVERY)

RESTORE LOG test FROM DISK = 'test_2.bak' WITH RECOVERY;
GO
-- 訊息:已處理 2 頁,耗時 0.056 秒

RECOVERY 完成還原並線上資料庫。驗證 SELECT * FROM a 可見資料完整保留。

核心觀念總結

  1. 完整備份是復原基石:無完整備份,任何後續記錄備份皆無法還原。
  2. 尾端記錄備份(NO_TRUNCATE)挽救最後交易:資料庫損壞時,務必先嘗試備份作用中記錄。
  3. 分階段還原語法:RESTORE DATABASE ... WITH NORECOVERY → RESTORE LOG ... WITH RECOVERY。
  4. 備份策略三要素:完整備份頻率、差異/記錄備份頻率、異地備份保存。

DBA 行動清單

  • 建立並驗證自動化備份排程(完整+記錄)。
  • 定期演練還原演練,確認備份檔案可用性與 RTO/RPO 達成度。
  • 監控備份作業失敗警報,確保無盲區。
  • 將備份檔案複製至異地/離線儲存,防範勒索軟體與實體災害。

災難無法避免,但透過嚴謹的備份架構與演練,將資料遺失風險降至最低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved