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

Oracle Advanced Replication 同步複寫完整配置實戰:雙主架構步驟詳解

     編輯:Oracle 資料庫基礎

前言

Oracle Advanced Replication(高級複寫)同步複寫模式適用於多站點即時資料一致性需求極高的場景(如金融、電信計費)。本文記錄雙資料庫(A 為主定義站點,B 為主體站點)同步複寫的完整配置步驟,含前置條件、用戶建立、全域名稱修改、DB Link 建立、複寫組/物件創建、節點加入與啟動驗證全流程。

環境資訊

項目站點 A(主定義站點)站點 B(主體站點)
版本Oracle 10.2.0.1Oracle 10.1.0.3
SIDereadtest
全域名稱eread.im.com.cntest.im.com.cn
複寫管理員repadmin
應用用戶cqm
複寫物件CQM.TEST 表(含主鍵)

前置條件檢查(兩站點均需執行)

  1. 確認 Advanced Replication 選項已安裝:
    SELECT * FROM v$option WHERE parameter = 'Advanced replication'; -- VALUE 應為 TRUE
  2. 關鍵初始化參數:
    ALTER SYSTEM SET global_names = TRUE SCOPE = BOTH;
    -- job_queue_processes > 0 (建議 ≥ 雙核數)
    -- processes, sessions 足夠大
  3. 網路互通: 兩站點 `tnsping` 對方服務名成功。

步驟一:建立應用用戶 CQM(兩站點)

CREATE USER CQM IDENTIFIED BY CQM
  DEFAULT TABLESPACE CQM
  TEMPORARY TABLESPACE TEMP;
GRANT DBA TO CQM; -- 測試環境簡化,生產環境請依最小權限原則授予

步驟二:建立複寫管理員 REPADMIN 並授權(兩站點)

CREATE USER REPADMIN IDENTIFIED BY REPADMIN
  DEFAULT TABLESPACE USERS
  TEMPORARY TABLESPACE TEMP;
GRANT CONNECT, RESOURCE TO REPADMIN;

-- 授予管理任意 Schema 複寫組權限
EXEC DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA('REPADMIN');

-- 授予建立 Snapshot Log 權限
GRANT COMMENT ANY TABLE TO REPADMIN;
GRANT LOCK ANY TABLE TO REPADMIN;

-- 指定為 Propagator 並授予執行任意程序權限
EXEC DBMS_DEFER_SYS.REGISTER_PROPAGATOR('REPADMIN');
GRANT EXECUTE ANY PROCEDURE TO REPADMIN;

步驟三:修改全域資料庫名稱(兩站點)

-- 站點 A
ALTER DATABASE RENAME GLOBAL_NAME TO eread.im.com.cn;

-- 站點 B
ALTER DATABASE RENAME GLOBAL_NAME TO test.im.com.cn;

步驟四:建立雙向 Public Database Link(兩站點)

-- 站點 A 建立指向 B 的 Link
CREATE PUBLIC DATABASE LINK test.im.com.cn
  CONNECT TO REPADMIN IDENTIFIED BY REPADMIN USING 'test';

-- 站點 B 建立指向 A 的 Link
CREATE PUBLIC DATABASE LINK eread.im.com.cn
  CONNECT TO REPADMIN IDENTIFIED BY REPADMIN USING 'eread';

驗證: `SELECT * FROM dual@test.im.com.cn;` 兩邊均成功。

步驟五:在應用用戶 CQM 下建立複寫表(兩站點結構一致)

CONN CQM/CQM@eread  -- 或 @test
CREATE TABLE TEST (
    ID        NUMBER(10),
    TIMESTAMP DATE DEFAULT SYSDATE
);
ALTER TABLE TEST ADD CONSTRAINT TEST_PK PRIMARY KEY (ID);

關鍵: 複寫表必須有主鍵,否則無法產生複寫支援。

步驟六:在主定義站點(A: eread)配置複寫組與物件

以 REPADMIN 登入站點 A:

-- 1. 建立主複寫組
EXEC DBMS_REPCAT.CREATE_MASTER_REPGROUP('repg');

-- 2. 將物件加入複寫組
EXEC DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
    sname => 'CQM',
    oname => 'TEST',
    type  => 'TABLE',
    use_existing_object => TRUE,
    gname => 'repg',
    copy_rows => FALSE
);

-- 3. 產生複寫支援(建立觸發器、內部封裝等)
EXEC DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT('CQM', 'TEST', 'TABLE');

步驟七:加入站點 B 為主體節點(同步複寫模式)

EXEC DBMS_REPCAT.ADD_MASTER_DATABASE(
    gname => 'repg',
    master => 'test.im.com.cn',
    use_existing_objects => TRUE,
    copy_rows => FALSE,
    propagation_mode => 'SYNCHRONOUS'  -- 關鍵:同步模式
);

此步驟會將複寫定義推送到站點 B,耗時視物件數量而定。

步驟八:啟動複寫活動

EXEC DBMS_REPCAT.RESUME_MASTER_ACTIVITY('repg', TRUE);

驗證測試

1. 小資料量測試

-- 站點 A 插入
INSERT INTO CQM.TEST (ID) VALUES (999);
COMMIT;
-- 站點 B 立即可查
SELECT * FROM CQM.TEST WHERE ID = 999;

2. 大資料量壓測程序

CREATE OR REPLACE PROCEDURE insert_into_test AS
    i NUMBER; m NUMBER; n NUMBER := 0;
BEGIN
    FOR i IN 1..10000 LOOP
        m := i;
        INSERT INTO CQM.TEST (ID) VALUES (m);
        n := n + 1;
        IF n = 1000 THEN COMMIT; n := 0; END IF;
    END LOOP;
    COMMIT;
END;
/
EXEC insert_into_test;

觀察兩站點資料一致性與同步延遲(同步模式下應極低)。

關鍵注意事項與避坑指南

  • 同步複寫效能代價: 每筆 DML 需等待所有節點確認,高延遲網路嚴重拖慢主站點回應。跨機房建議改用非同步複寫或 GoldenGate。
  • 衝突解決: 同步模式下同一行同時在多站點修改會拋出錯誤,需預先設計衝突解決程序(`DBMS_REPCAT.ADD_UPDATE_RESOLUTION`)。
  • DDL 限制: 複寫物件結構變更需用 `DBMS_REPCAT.ALTER_MASTER_REPOBJECT`,不可直接 DDL。
  • 監控視圖: `DBA_REPGROUP`, `DBA_REPOBJECT`, `DBA_REPSITES`, `DEFERROR` (錯誤佇列) 定期巡檢。
  • 版本相容性: 主定義站點版本應 ≥ 主體站點版本(本例 10.2.0.1 → 10.1.0.3 符合)。

總結

本文完整呈現 Oracle Advanced Replication 同步複寫雙主架構的標準化配置流程。同步模式提供強一致性但犧牲效能與可用性,選型時務必評估網路延遲、業務容錯需求。現代架構多改用 Oracle GoldenGate 或 Active Data Guard 實現異構/異地高可用與資料整合,Advanced Replication 逐漸走向維護模式,新專案謹慎採用。

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