背景:無法就地升級,必須遷移
SQL Server 2000 記錄傳送基於「資料庫維護計畫」,2005 起架構重寫,2000 的設定**無法直接升級**。升級實例後記錄傳送將失效。必須採用遷移策略重建。
三種遷移策略比較
| 策略 | 停機時間 | 複雜度 | 適用場景 |
| 含容錯移轉遷移 | 極短 (秒級切換) | 高 | 7x24 不可長時間停機、備庫可暫時承接讀寫 |
| 不含容錯移轉遷移 | 主庫升級期間不可用 | 中 | 可容忍主庫停機數小時、單向複寫 |
| 完全重新部署 | 依完整備份/還原時間 | 低 | 環境乾淨、可接受重新初始化、備份檔可用 |
策略一:含容錯移轉遷移 (零資料遺失、最短停機)
假設:Server A (主) → Server B (備)。
- 升級備庫 Server B 至 SQL 2008。備資料庫保持離線 (NORECOVERY/STANDBY),仍為 SQL 2000 格式。2000 的複製/還原作業失效。
- 容錯移轉至 Server B:
- 主庫 A:對所有未套用的記錄備份執行 `RESTORE LOG ... WITH NORECOVERY`。
- 主庫 A:執行**尾記錄備份** `BACKUP LOG DB TO ... WITH NORECOVERY` (使主庫離線)。
- 備庫 B:`RESTORE LOG DB FROM ... WITH RECOVERY` (上線,自動升級為 SQL 2008 格式)。
- 升級原主庫 Server A 至 SQL 2008。資料庫離線狀態下升級,升級後仍為 SQL 2000 格式。
- 在 Server B 建立 SQL 2008 記錄傳送,反向保護 Server A:
- 設定主=B、備=A。
- **關鍵**:精靈「初始化次要資料庫」選 **「否,次要資料庫已初始化」**。
- 首筆記錄套用時,Server A 資料庫自動升級為 SQL 2008。
- (可選) 容錯移轉回 Server A 恢復原拓撲。
策略二:不含容錯移轉遷移 (簡單但主庫停機)
- 升級備庫 Server B 至 SQL 2008 (備庫離線)。
- 升級主庫 Server A 至 SQL 2008 (**主庫此期間不可用**)。
- 在 Server A 建立 SQL 2008 記錄傳送至 Server B,指定「次要資料庫已初始化」。
策略三:完全重新部署
- 在新環境 (SQL 2008) 建立完整備份 → 還原至備庫 (WITH NORECOVERY/STANDBY)。
- 建立記錄傳送,從頭開始。舊 2000 環境淘汰。
遷移後清理
- 刪除 SQL 2000 記錄傳送建立的系統表:`msdb.dbo.log_shipping_*`、`msdb.dbo.log_shipping_monitor_*`。
- 刪除對應的 SQL Agent 作業 (LSAlert、LSCopy、LSRestore 等)。
- 啟用 **備份壓縮** (Enterprise Edition):**預設由 `backup compression default` 伺服器選項控制**,可覆寫於各記錄傳送設定。
限制與注意事項
- 遷移後**次要資料庫無法處於 STANDBY (唯讀) 模式** (SQL 2008 限制)。需唯讀報表請改用資料庫快照或 AlwaysOn 可讀次要複本。
- 確保兩端 SQL 2008 版本、修補程式版本一致 (SP 級別)。
- 網路共用資料夾權限:SQL Server 服務帳號需具備讀寫權限。
結語
選擇策略取決於 **RTO 容忍度** 與 **操作風險偏好**。生產環境強烈建議演練「含容錯移轉遷移」於測試環境,驗證尾記錄備份、反向記錄傳送建立、資料庫自動升級全流程無誤後,再排程生產窗口執行。