Oracle 複寫支援多主 (Multi-Master) 與物化視圖 兩種模式。本文記錄生產環境部署步驟:主定義站點建立、複製組創建、複製物件添加、衝突解決配置、物化視圖站點代理用戶授權、刷新間隔設定等核心操作。
GLOBAL_NAMES=TRUE、JOB_QUEUE_PROCESSES > 0PARALLEL_MAX_SERVERS 等並行參數
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;
/
CONNECT REPADMIN/REPADMIN@MASTER1
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP(GNAME => 'SH_REP');
END;
/
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
GNAME => 'SH_REP',
TYPE => 'TABLE',
ONAME => 'CREDIT_CARD',
SNAME => 'SHORACL',
USE_EXISTING_OBJECT => TRUE, -- 使用現有表
COPY_ROWS => TRUE -- 複製現有資料到其他主站
);
END;
/
-- 重複執行添加所有需複製的表
-- 範例:最新時間戳勝出 (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
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT(
SNAME => 'SHORACL',
ONAME => 'CREDIT_CARD',
TYPE => 'TABLE'
);
END;
/
-- 對每個複製物件執行
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY(GNAME => 'SH_REP');
END;
/
-- 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 MODE | FAST (增量) / 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 環境可平滑遷移。