首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

單機建立 Oracle 9i 物理 Standby 資料庫 (Data Guard) 實戰筆記

     編輯:Oracle 資料庫相關知識

環境與前置條件

  • OS: Windows 2000 Pro SP3, 512MB RAM
  • Primary: Demo (9.2.0.1.0)
  • Standby: Pstandby (同版本)
  • Primary **必須啟用 Archive Log 模式**

啟用 Archive Log 模式

ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
SHUTDOWN IMMEDIATE;  -- 此處為備份做準備

Primary 準備工作

  1. 強制 Logging:ALTER DATABASE FORCE LOGGING; (確保所有操作產生 Redo)
  2. 設定本地歸檔目的地:ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\oradata\DEMO\Archive' SCOPE=BOTH;

建立物理 Standby 步驟

1. 記錄 Primary 資料檔清單

SELECT name FROM v$datafile;
-- 輸出 11 個 .dbf 檔案路徑

2. 關閉 Primary、複製資料檔

SHUTDOWN IMMEDIATE;
-- OS 層面複製所有 .dbf 至 Standby 目標目錄 (如 C:\DataGuard\Pstandby\DEMO\)

3. 建立 Standby 控制檔

STARTUP MOUNT;
ALTER DATABASE CREATE STANDBY CONTROLFILE
AS 'C:\DataGuard\Pstandby\DEMO\DEMOSTANDBY.CTL';
-- **檔名不可與 Primary 控制檔重複**

4. 產生 Standby 參數檔 (PFILE)

CREATE PFILE='C:\DataGuard\Pstandby\DEMO\initpstandby.ora' FROM SPFILE;

5. 修改 Standby 參數檔關鍵參數

*.control_files='C:\DataGuard\Pstandby\DEMO\DEMOSTANDBY.CTL'
*.db_name='DEMO'                    -- 必須與 Primary 相同
*.instance_name='pstandby'          -- Standby 實例名
*.log_archive_dest_1='location=d:\oracle\oradata\demo\archive'
*.fal_server='DEMO'                 -- Fetch Archive Log 來源
*.fal_client='PSTANDBY'             -- 自己服務名
*.standby_file_management='AUTO'    -- 自動同步資料檔新增/刪除
*.db_file_name_convert='D:\ORACLE\ORADATA\DEMO\','C:\DataGuard\Pstandby\DEMO\'
*.log_file_name_convert='D:\ORACLE\ORADATA\DEMO\','C:\DataGuard\Pstandby\DEMO\'

6. 建立 Windows 服務並啟動 Standby

oradim -NEW -SID PSTANDBY -INTPWD  -STARTMODE MANUAL -PFILE C:\DataGuard\Pstandby\DEMO\initpstandby.ora
net start OracleServicePSTANDBY

7. 啟動 Standby 進入 Managed Recovery 模式

STARTUP NOMOUNT PFILE='C:\DataGuard\Pstandby\DEMO\initpstandby.ora';
ALTER DATABASE MOUNT STANDBY DATABASE;
RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
-- 或即時應用 (9.2+)
RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

8. 驗證同步狀態

-- Primary
SELECT max(sequence#) FROM v$archived_log;

-- Standby
SELECT max(sequence#) FROM v$archived_log WHERE applied='YES';
SELECT process, status, sequence# FROM v$managed_standby;

關鍵參數對照表

參數PrimaryStandby說明
DB_NAMEDEMODEMO必須相同
CONTROL_FILESPrimary 路徑Standby 專用 .CTL不可共用
LOG_ARCHIVE_DEST_1本地歸檔路徑本地歸檔路徑各自管理
FAL_SERVER--DEMOStandby 向 Primary 索取缺檔
FAL_CLIENT--PSTANDBYStandby 服務名
STANDBY_FILE_MANAGEMENTAUTOAUTO自動同步檔案結構變更
DB_FILE_NAME_CONVERT--Primary→Standby 路徑映射資料檔路徑轉換
LOG_FILE_NAME_CONVERT--Primary→Standby 路徑映射Redo Log 路徑轉換

常見問題與對策

  • Archive Gap:Standby 缺檔 → 檢查 FAL_SERVER/CLIENT、網路連通、Primary 歸檔完整性
  • 資料檔路徑不匹配:DB_FILE_NAME_CONVERT 設定錯誤 → 修正並重啟 Standby
  • Control File 不同步:Primary 新增資料檔未同步 → 確認 STANDBY_FILE_MANAGEMENT=AUTO 或手工建立 Standby 控制檔
  • 唯讀開啟報表:ALTER DATABASE OPEN READ ONLY → 需暫停 Managed Recovery,查詢完再啟動

單機測試的特殊意義

單機雙實例模擬 Data Guard,**僅適合功能驗證、參數熟悉、切換演練**,**不具備高可用性** (單點故障)。生產部署**必須**雙機/多機、共享存儲或獨立存儲、專網心跳、自動切換腳本 (Data Guard Broker/Observer)。

Data Guard 是 Oracle 高可用皇冠上的明珠。從單機手工搭建到生產級 Broker 管理,每一步都在鍛鍊 DBA 對 Redo 傳輸、應用、角色轉換、缺口解決的深度掌控力。

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