| 角色 | IP | SID | DB_UNIQUE_NAME | 安裝路徑 | 本地歸檔路徑 |
|---|---|---|---|---|---|
| Primary | 192.168.1.11 | test | test | /oracle/oracle/product/11.2.0/dbhome_1 | /oracle/oradata/test/archive |
| Physical Standby | 192.168.1.12 | dgtest | dgtest | /oracle/oracle/product/11.2.0/dbhome_1 | /oracle/oradata/dgtest/dgtest/archive |
| Logical Standby (目標) | 192.168.1.15 | logicdg | logicdg | /oracle/oracle/product/11.2.0/dbhome_1 | /oracle/oradata/logicdg/local-archive |
策略:利用既有 Physical Standby (1.12) 轉換為 Logical Standby (1.15),再新增至 Data Guard 叢集。
*.log_archive_config = 'dg_config=(test,dgtest,logicdg)'
*.log_archive_dest_2 = 'service=test12 async valid_for=(online_logfiles,primary_role) db_unique_name=dgtest'
*.log_archive_dest_3 = 'service=test15 async valid_for=(online_logfiles,primary_role) db_unique_name=logicdg'
*.log_archive_dest_state_2 = defer
*.log_archive_dest_state_3 = defer
*.fal_server = test11
*.fal_client = test12
*.standby_file_management = auto
*.db_file_name_convert = '/oracle/oradata/test','/oracle/oradata/dgtest/dgtest','/oracle/oradata/test','/oracle/oradata/logicdg'
*.log_file_name_convert = '/oracle/oradata/test','/oracle/oradata/dgtest/dgtest','/oracle/oradata/test','/oracle/oradata/logicdg'
-- Physical Standby (1.12)
SELECT sequence#, applied FROM v$archived_log;
-- 應顯示所有序號 APPLIED=YES
-- 待轉換節點 (1.15,目前為 Physical)
SELECT sequence#, applied FROM v$archived_log;
-- 確認無落後缺口
-- 在 1.15 (logicdg) 執行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 在 Primary (1.11) 執行
EXECUTE DBMS_LOGSTDBY.BUILD;
-- 產生字典資訊寫入 Redo,供邏輯備庫解析 DDL
-- 在 1.15 (logicdg) 執行
ALTER DATABASE RECOVER TO LOGICAL STANDBY logicdg;
-- 轉換過程:掛載 → 開啟 → 建立邏輯備庫字典 → 完成
-- 關閉並以 MOUNT 啟動
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
-- 本地歸檔目的地 (所有角色)
ALTER SYSTEM SET log_archive_dest_1 =
'location=/oracle/oradata/logicdg/local-archive valid_for=(online_logfiles,all_roles) db_unique_name=logicdg';
-- 從 Primary 接收 Redo 的備用日誌目的地 (Standby 角色)
ALTER SYSTEM SET log_archive_dest_5 =
'location=/oracle/oradata/logicdg/archive valid_for=(standby_logfiles,standby_role) db_unique_name=logicdg';
ALTER DATABASE OPEN RESETLOGS;
-- 關鍵:RESETLOGS 產生新 Incarnation,確立邏輯備庫獨立身分
-- 建立 3 組 SRL (建議數量 = 線上日誌組數 + 1)
ALTER DATABASE ADD STANDBY LOGFILE GROUP 11
'/oracle/oradata/logicdg/standbyredo11.log' SIZE 100M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 12
'/oracle/oradata/logicdg/standbyredo12.log' SIZE 100M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 13
'/oracle/oradata/logicdg/standbyredo13.log' SIZE 100M;
-- 啟動即時 SQL Apply (邏輯備庫核心進程)
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
-- 在 Primary (1.11) 執行
ALTER SYSTEM SET log_archive_dest_state_3 = ENABLE;
-- 驗證傳輸狀態
SELECT dest_id, status, error FROM v$archive_dest WHERE dest_id = 3;
-- 1. SQL Apply 進程狀態
SELECT * FROM v$logstdby_process;
-- 2. 同步進度
SELECT * FROM v$logstdby_progress;
-- 3. 套用延遲
SELECT * FROM v$logstdby_stats WHERE name = 'apply lag';
-- 4. 測試 DDL 複寫
-- Primary 建立測試表
CREATE TABLE test_sync (id NUMBER, txt VARCHAR2(100));
-- Logical Standby 查詢
SELECT * FROM test_sync; -- 應可見資料
-- 5. 監視不支援物件
SELECT * FROM dba_logstdby_unsupported_table;
SELECT * FROM dba_logstdby_unsupported;
| 維度 | Physical Standby | Logical Standby |
|---|---|---|
| Redo 套用方式 | Redo Apply (區塊級) | SQL Apply (SQL 級解析重放) |
| 資料庫開啟模式 | Mount / Read Only (Active DG) | Read Write (可本地寫入) |
| 支援物件類型 | 所有 | 有限制 (參考 DBA_LOGSTDBY_UNSUPPORTED) |
| 主要用途 | 災難恢復、報表查詢 (Active DG) | 報表、ETL、異構遷移、滾動升級 |
| 轉換路徑 | 基礎 | Physical → Logical (單向) |
此實戰記錄基於 Oracle 11.2.0.1 環境,展示從既有 Physical Standby 就地轉換為 Logical Standby 的標準化流程,適合 Data Guard 架構擴充參考。