總部 (北京) 需整合上海、杭州、武漢三分公司資料。三地軟體與資料庫結構相同,版本均為 9i。採用物化視圖復制:分公司為主站點,總部為物化視圖站點,實現單向資料同步。
CONNECT system/passwd@SH
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA('repadmin'); END;/
GRANT COMMENT ANY TABLE TO repadmin;
GRANT LOCK ANY TABLE TO repadmin;
GRANT SELECT ANY DICTIONARY TO repadmin; -- 若使用視圖管理器
BEGIN DBMS_DEFER_SYS.REGISTER_PROPAGATOR('repadmin'); END;/
CONNECT repadmin/repadmin@SH BEGIN DBMS_DEFER_SYS.SCHEDULE_PURGE(SYSDATE, 'SYSDATE+1', 0); END;/
CONNECT system/passwd@SH
CREATE USER proxy_bjOracle IDENTIFIED BY proxy_bjOracle;
BEGIN DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP('proxy_bjOracle','PROXY_SNAPADMIN',NULL); END;/
GRANT SELECT_CATALOG_ROLE TO proxy_bjOracle;
CONNECT repadmin/repadmin@SH
BEGIN DBMS_REPCAT.CREATE_MASTER_REPGROUP('sh_rep'); END;/
BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT('sh_rep','TABLE','CREDIT_CARD','SHORACL',TRUE,TRUE); END;/
BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT('sh_rep','INDEX','INDEX_CREDIT_CARD','SHORACL',TRUE,FALSE); END;/
BEGIN DBMS_REPCAT.SET_COLUMNS('SHORACL','CREDIT_CARD','CREDIT_CARD_ID'); END;/
BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT('SHORACL','CREDIT_CARD','TABLE',TRUE); END;/
CREATE MATERIALIZED VIEW LOG ON SHORACL.CREDIT_CARD; -- 無主鍵表用: CREATE MATERIALIZED VIEW LOG ON SHORACL.CREDIT_CARD WITH ROWID EXCLUDING NEW VALUES;
BEGIN DBMS_REPCAT.RESUME_MASTER_ACTIVITY('sh_rep'); END;/
CREATE PUBLIC DATABASE LINK ORACLSH USING 'Oracle.shanghai.com'; -- 或使用連線描述字串
CREATE DATABASE LINK ORACLSH CONNECT TO proxy_bjOracle IDENTIFIED BY proxy_bjOracle;
BEGIN DBMS_DEFER_SYS.SCHEDULE_PUSH('ORACLSH','SYSDATE+1',SYSDATE,FALSE,0,0); END;/
CONNECT SHORACL/SHORACL@BJ CREATE DATABASE LINK ORACLSH CONNECT TO ORACL IDENTIFIED BY ORACL;
CONNECT mvadmin/mvadmin@BJ CREATE MATERIALIZED VIEW SHORACL.CREDIT_CARD REFRESH FAST WITH PRIMARY KEY AS SELECT * FROM ORACL.CREDIT_CARD@ORACLSH; -- 無主鍵用 ROWID
BEGIN DBMS_REFRESH.MAKE('mvadmin.sh_refresh','',SYSDATE,'SYSDATE+1',FALSE,'',TRUE,FALSE); END;/
BEGIN DBMS_REFRESH.ADD('mvadmin.sh_refresh','SHORACL.CREDIT_CARD',TRUE); END;/
SYS.DBA_JOBS 確認三類作業:清除、推送、刷新 (杭州、武漢各建刷新群組則共 7 作業)。JOB_QUEUE_PROCESSES ≠ 0 (預設為 0),否則自動刷新不執行。FAILURES 欄位:失敗會按 1,2,4,8... 分鐘重試,達 16 次或超過間隔則標記 BROKEN。手工排查後用 DBMS_JOB.RUN(job_no) 重跑。本文示範最基礎的單向物化視圖復制。進階功能尚可更新物化視圖、複雜只讀物化視圖。實際應用應依系統功能與效能需求選擇適當復制技術。