A 公司總部設於北京,下轄上海、杭州、武漢三家分公司,各自擁有相同結構的 Oracle 9i 資料庫。需求:每日將三地營業資料非同步複製至總部,作為備份與綜合統計之用。
| 術語 | 說明 |
| Master Site | 提供資料來源的站點(分公司) |
| Materialized View Site | 目標端站點(總部) |
| Materialized View | 目標端對應的實體表,僅透過複製機制維護 |
| 快速刷新 / 完全刷新 / 強制刷新 | 三種同步模式,本案採每日一次異步快速刷新 |
| Master Group / MV Group | 來源/目標端被複製物件的邏輯群組 |
| Materialized View Log | 記錄來源端變更的日誌表,支援快速刷新 |
實作步驟(以上海站點為例)
1. 建立複製管理員並授權
CONNECT sys@SH AS SYSDBA;
CREATE USER rep_admin IDENTIFIED BY password;
GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE TRIGGER,
CREATE MATERIALIZED VIEW, CREATE DATABASE LINK TO rep_admin;
GRANT SELECT ANY TABLE TO rep_admin; -- 允許建立 MV Log
2. 註冊傳播者
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR('rep_admin');
END;
/
3. 排程清除作業
CONNECT rep_admin@SH;
BEGIN
DBMS_JOB.SUBMIT(
job => :jobno,
what => 'DBMS_DEFER_SYS.PUSH(''BJ'', stop_on_error=>FALSE);',
next_date => SYSDATE,
interval => 'SYSDATE + 1' -- 每日一次
);
COMMIT;
END;
/
4. 建立複製代理帳號
CREATE USER mv_agent IDENTIFIED BY password;
GRANT CREATE SESSION, SELECT ANY TABLE TO mv_agent; -- 視圖接收者權限
5. 建立 Master Group 並加入複製物件
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP('SH_MG');
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
sname => 'SHORACL', oname => 'SALES_TABLE', type => 'TABLE',
gname => 'SH_MG', use_existing_object => TRUE, copy_rows => FALSE
);
-- 重複加入其他表...
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT('SHORACL','SALES_TABLE','TABLE');
DBMS_REPCAT.RESUME_MASTER_ACTIVITY('SH_MG');
END;
/
6. 目標端建立 Materialized View Group 與 Views
在總部 (BJ) 執行:
CONNECT rep_admin@BJ;
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPGROUP('SH_MG', master => 'SH');
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT(
sname => 'SHORACL', oname => 'SALES_TABLE', type => 'TABLE',
gname => 'SH_MG', ddl_text => 'CREATE MATERIALIZED VIEW SHORACL.SALES_TABLE
REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT * FROM SHORACL.SALES_TABLE@SH'
);
-- 重複加入其他表...
DBMS_REPCAT.REFRESH_MVIEW_REPGROUP('SH_MG');
END;
/
維運建議
- 定期監控
DBA_REPCATLOG、DBA_MVIEW_REFRESH_TIMES 確認同步狀態
- 來源端表需有主鍵以支援快速刷新
- 網路中斷時,快速刷新會失敗轉為完全刷新(若設定 FORCE)
- 定期 Purge MV Log 避免膨脹
- 上一篇文章: Oracle PL/SQL 入門基礎完整指南
- 下一篇文章: 使用 Oracle9iAS Wireless 開發無線應用程式:Hello World 實戰
Copyright ©
程式碼之家 All Rights Reserved