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

Oracle 數據複製 (Replication) 實戰:多主複製、物化視圖、代理用戶與衝突解決配置指南

     編輯:Oracle 資料庫基礎

Oracle Advanced Replication 多主/物化視圖架構部署實戰

Oracle 複寫支援多主 (Multi-Master) 與物化視圖 兩種模式。本文記錄生產環境部署步驟:主定義站點建立、複製組創建、複製物件添加、衝突解決配置、物化視圖站點代理用戶授權、刷新間隔設定等核心操作。

核心概念

  • Master Group:多主複製的邏輯容器,包含一組複製物件
  • Master Definition Site:首個主站點,負責 DDL 變更協調
  • Materialized View (Snapshot):唯讀/可更新的本地副本,定期刷新
  • Replication Administrator:管理複製環境的專用帳號 (如 REPADMIN)
  • Propagator/Receiver:異步佇列傳遞的發送/接收端

部署前提

  • 所有節點 GLOBAL_NAMES=TRUE、JOB_QUEUE_PROCESSES > 0
  • 網路互通、TNS 別名雙向解析
  • 資料庫版本相容 (建議同版本)
  • 啟用 PARALLEL_MAX_SERVERS 等並行參數

步驟 1:建立複製管理員帳號 (所有主站點)


CONNECT SYSTEM/PASSWORD@MASTER1
CREATE USER REPADMIN IDENTIFIED BY REPADMIN
  DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE,
      CREATE TRIGGER, CREATE VIEW, CREATE SYNONYM,
      CREATE DATABASE LINK, CREATE MATERIALIZED VIEW,
      ALTER SESSION, UNLIMITED TABLESPACE TO REPADMIN;
-- 複製管理員專用權限
BEGIN
  DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA('REPADMIN');
END;
/

步驟 2:建立主複製組 (主定義站點)


CONNECT REPADMIN/REPADMIN@MASTER1
BEGIN
  DBMS_REPCAT.CREATE_MASTER_REPGROUP(GNAME => 'SH_REP');
END;
/

步驟 3:添加複製物件 (表、索引、觸發器等)


BEGIN
  DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
    GNAME           => 'SH_REP',
    TYPE            => 'TABLE',
    ONAME           => 'CREDIT_CARD',
    SNAME           => 'SHORACL',
    USE_EXISTING_OBJECT => TRUE,   -- 使用現有表
    COPY_ROWS       => TRUE        -- 複製現有資料到其他主站
  );
END;
/
-- 重複執行添加所有需複製的表

步驟 4:配置衝突解決 (多主必須)


-- 範例:最新時間戳勝出 (Timestamp Conflict Resolution)
BEGIN
  DBMS_REPCAT.ADD_UPDATE_RESOLUTION(
    SNAME           => 'SHORACL',
    ONAME           => 'CREDIT_CARD',
    CONFLICT_TYPE   => 'UPDATE',
    METHOD_NAME     => 'LATEST TIMESTAMP',
    PARAMETER_TABLE_NAME => 'DUAL',  -- 無額外參數
    PRIORITY_GROUP  => 'TIMESTAMP_PG',
    SEQUENCE_NO     => 1
  );
END;
/
-- 其他方法:MAXIMUM, MINIMUM, ADDITIVE, AVERAGE, PRIORITY GROUP, SITE PRIORITY

步驟 5:生成複製支援 (觸發器、封裝、佇列)


BEGIN
  DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(
    SNAME => 'SHORACL',
    ONAME => 'CREDIT_CARD',
    TYPE  => 'TABLE'
  );
END;
/
-- 對每個複製物件執行

步驟 6:啟動複製組 (主定義站點)


BEGIN
  DBMS_REPCAT.RESUME_MASTER_ACTIVITY(GNAME => 'SH_REP');
END;
/

步驟 7:物化視圖站點部署 (唯讀/可更新快照)


-- 7.1 建立代理用戶 (連接主站點)
CONNECT SYSTEM/PASSWORD@MV_SITE
CREATE USER PROXY_BJ IDENTIFIED BY PROXY_BJ;
BEGIN
  DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP(
    USERNAME        => 'PROXY_BJ',
    PRIVILEGE_TYPE  => 'PROXY_SNAPADMIN',
    LIST_OF_GNAMES  => NULL
  );
END;
/
GRANT SELECT_CATALOG_ROLE TO PROXY_BJ;

-- 7.2 建立物化視圖日誌 (主站點,針對主表)
CONNECT SHORACL/SHORACL@MASTER1
CREATE MATERIALIZED VIEW LOG ON CREDIT_CARD
  WITH PRIMARY KEY, ROWID, SEQUENCE (COL1, COL2) INCLUDING NEW VALUES;

-- 7.3 建立物化視圖 (快照站點)
CONNECT PROXY_BJ/PROXY_BJ@MV_SITE
CREATE MATERIALIZED VIEW CREDIT_CARD_MV
  REFRESH FAST NEXT SYSDATE + 1/24  -- 每小時刷新
  WITH PRIMARY KEY
  AS SELECT * FROM CREDIT_CARD@MASTER1;

關鍵參數說明

參數含義典型值
INTERVAL刷新間隔SYSDATE + 1 (每天), SYSDATE + 1/24 (每小時)
DELAY_SECONDS佇列無事件時傳播程序休眠秒數60-300
REFRESH MODEFAST (增量) / COMPLETE (全量) / FORCE (優先 FAST)FAST 需 MV LOG

監控與維護

  • SELECT * FROM DBA_REPGROUP; 檢視複製組狀態
  • SELECT * FROM DBA_REPCATLOG; 檢視 DDL 佇列
  • SELECT * FROM DBA_REPRESOLUTION_STATISTICS; 衝突解決統計
  • DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY / RESUME_MASTER_ACTIVITY 暫停/恢復

版本演進提醒

Oracle 11g 起推薦使用 GoldenGate 或 Streams 替代傳統 Advanced Replication,功能更強、維護更簡易。既有 Replication 環境可平滑遷移。

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