| 模式 | 機制 | 優點 | 缺點 |
| 異步 | 內部觸發器生成 Deferred RPC → 隊列 → 推送至其他 Master | 性能好、網絡容錯 | 數據暫時不一致、衝突解決複雜 |
| 同步 | DML 立即分布式事務兩階段提交,全站點鎖定 | 強一致性 | 極度依賴網絡/節點可用性、性能差 |
| 過程化 | Wrapper Procedure 封裝 DML,調用遠端同名 Procedure | 大批量減少網絡往返 | 開發維護成本高 |
高級復制部署關鍵步驟 (DBMS_REPCAT)
-- 1. 創建復制管理員用戶並授權
CREATE USER repadmin IDENTIFIED BY pwd;
GRANT DBA TO repadmin; -- 簡化演示,生產按最小權限
-- 2. 雙向 DBLink (必須用 repadmin 連接)
CREATE DATABASE LINK site2 CONNECT TO repadmin IDENTIFIED BY pwd USING 'site2_tns';
-- 3. 創建 Master Group
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP(gname => 'MY_RG', qualifier => '');
END;
/
-- 4. 添加復制對象 (表)
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
gname => 'MY_RG', type => 'TABLE', oname => 'TEST', sname => 'SCHEMA',
copy_rows => FALSE, use_existing_object => TRUE);
END;
/
-- 5. 生成復制支持 (內部觸發器/包)
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(sname => 'SCHEMA', oname => 'TEST', type => 'TABLE');
END;
/
-- 6. 添加遠端 Master Site
BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE(
gname => 'MY_RG', master => 'SITE2',
use_existing_objects => TRUE, copy_rows => FALSE,
propagation_mode => 'ASYNCHRONOUS');
END;
/
-- 7. 啟動復制活動
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY(gname => 'MY_RG');
END;
/
常見部署錯誤與解決
| 錯誤 | 原因 | 解決 |
| ORA-23357: propagator does not exist | repadmin 未授權、DBLink 用戶非 repadmin、GLOBAL_NAME 含保留字 | 檢查權限、DBLink 用戶、修改 GLOBAL_NAME |
| ORA-23312: not the masterdef | 非主定義站點執行創建對象操作 | 連接到 Master Definition Site 執行 |
| DBLink 無法連接 | GLOBAL_NAMES=TRUE 但 DBLink 名 != GLOBAL_NAME | DBLink 名 = 遠端 GLOBAL_NAME |
現代替代方案推薦 (12c+)
- GoldenGate (OGG): 異構、低延遲、CDR 衝突解決、微服務友好、雲原生部署。
- Active Data Guard Far Sync: 零數據丟失、異地多活、無邏輯復制複雜度。
- Materialized View + Fast Refresh: 單向、可容忍延遲、維護簡單。
- Oracle Sharding / Global Data Services: 水平分片、跨區域路由。
選型決策樹
是否需要雙向寫入?
├─ 否 → 延遲要求?
│ ├─ 秒級 → GoldenGate / XStreams
│ ├─ 分鐘/小時 → Materialized View / DBLink Job
│ └─ 天級 → ETL / SQL*Loader
└─ 是 → 一致性要求?
├─ 強一致 (金融核心) → 同步復制 / Active Data Guard + 應用層路由
└─ 最終一致 (可衝突解決) → GoldenGate CDR / Advanced Replication (舊系統維護)
- 上一篇文章: Oracle 去除重複數據完整方案:完全重複與部分字段重複的高效刪除策略
- 下一篇文章: Java + Oracle 應用開發三大常見問題:JDBC 驅動加載、BLOB 存儲、可滾動結果集
Copyright ©
程式碼之家 All Rights Reserved