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

Oracle 多主體複寫實戰部署:Oracle 9i Multi-Master Replication 完整指南

     編輯:Oracle 資料庫基礎

前言

資料複寫是企業級資料庫高可用與分散式架構的核心技術。Oracle Advanced Replication 提供 多主體複寫,允許多個資料庫節點同時接受讀寫操作,並自動同步資料變更。本文記錄在 Solaris 9 + Oracle 9.2.0.6 環境下的完整部署實戰過程。

一、環境規劃與版本確認

項目節點 1 (ORCL9I)節點 2 (ALPHA9I)
作業系統SunOS 5.9 (Solaris 9) on Sun Fire V210
Oracle 版本Oracle 9i Enterprise Edition 9.2.0.6.0 64bit
SIDORCL9IALPHA9I
GLOBAL_NAMEORCL9I.TAIKANG.COMALPHA9I.TAIKANG.COM
角色Master Definition SiteMaster Site

關鍵前置檢查

-- 確認 Advanced Replication 選項已安裝
SQL> SELECT * FROM v$option WHERE parameter = 'Advanced replication';

PARAMETER                          VALUE
---------------------------------- ------
Advanced replication               TRUE

注意: 若 VALUE 為 FALSE,需重新安裝 Oracle 並勾選 Advanced Replication 選項。

二、網路與參數準備

1. 雙向 TNS 連線設定

在兩節點的 tnsnames.ora 分別新增對方別名:

-- 節點 1 上
ALPHA9I.TAIKANG.COM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL=TCP)(HOST=alpha_host)(PORT=1521))
    (CONNECT_DATA = (SID=ALPHA9I))
  )

-- 節點 2 上
ORCL9I.TAIKANG.COM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL=TCP)(HOST=orcl_host)(PORT=1521))
    (CONNECT_DATA = (SID=ORCL9I))
  )

2. 初始化參數調整

-- 兩節點均需設定(需重啟生效)
*.global_names = TRUE
*.job_queue_processes = 4
*.job_queue_interval = 60
*.open_links = 4
*.distributed_transactions = 4
*.replication_dependency_tracking = TRUE

三、建立複寫管理員與權限授予

-- 兩節點均執行
CREATE USER repadmin IDENTIFIED BY repadmin
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp;

GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE,
      CREATE TRIGGER, CREATE SEQUENCE, CREATE VIEW,
      CREATE SYNONYM, CREATE DATABASE LINK,
      UNLIMITED TABLESPACE TO repadmin;

-- 必須授予的複寫專用權限
GRANT SELECT ANY DICTIONARY TO repadmin;
GRANT EXECUTE ON dbms_repcat TO repadmin;
GRANT EXECUTE ON dbms_reputil TO repadmin;
GRANT EXECUTE ON dbms_defer TO repadmin;
GRANT EXECUTE ON dbms_defer_sys TO repadmin;
GRANT EXECUTE ON dbms_refresh TO repadmin;
GRANT EXECUTE ON dbms_snapshot TO repadmin;

四、建立 Database Link(雙向)

-- 節點 1 (ORCL9I) 執行
CONN repadmin/repadmin
CREATE DATABASE LINK alpha9i.taikang.com
  CONNECT TO repadmin IDENTIFIED BY repadmin
  USING 'ALPHA9I.TAIKANG.COM';

-- 節點 2 (ALPHA9I) 執行
CONN repadmin/repadmin
CREATE DATABASE LINK orcl9i.taikang.com
  CONNECT TO repadmin IDENTIFIED BY repadmin
  USING 'ORCL9I.TAIKANG.COM';

-- 驗證連線
SELECT * FROM dual@alpha9i.taikang.com;
SELECT * FROM dual@orcl9i.taikang.com;

五、建立 Master Group 與複寫物件

1. 在 Master Definition Site (ORCL9I) 建立 Master Group

BEGIN
  DBMS_REPCAT.CREATE_MASTER_REPGROUP (
    gname => 'TAIKANG_REP_GROUP',
    master_comment => '泰康保險核心業務複寫群組'
  );
END;
/

2. 新增複寫物件(以 EMP 表為例)

BEGIN
  DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
    sname => 'SCOTT',
    oname => 'EMP',
    type => 'TABLE',
    use_existing_object => TRUE,
    copy_rows => FALSE,
    gname => 'TAIKANG_REP_GROUP'
  );
END;
/

3. 產生複寫支援(觸發器、封裝等)

BEGIN
  DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
    sname => 'SCOTT',
    oname => 'EMP',
    type => 'TABLE',
    min_communication => TRUE
  );
END;
/

4. 新增第二個 Master Site (ALPHA9I)

BEGIN
  DBMS_REPCAT.ADD_MASTER_DATABASE (
    gname => 'TAIKANG_REP_GROUP',
    master => 'ALPHA9I.TAIKANG.COM',
    use_existing_objects => TRUE,
    copy_rows => FALSE,
    propagation_mode => 'ASYNCHRONOUS'
  );
END;
/

5. 恢復主群組啟動複寫

BEGIN
  DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
    gname => 'TAIKANG_REP_GROUP'
  );
END;
/

六、驗證與監控

1. 查看複寫群組狀態

SELECT gname, master, status
FROM dba_repgroup;

2. 監控延遲佇列

SELECT destination, deferred_tran_count, error_count
FROM dba_deferred_tran_db;

3. 檢查衝突解決

SELECT sname, oname, conflict_type_id, method_name
FROM dba_repconflict;

七、常見問題與排查

問題原因解決
ORA-23308: 物件不存在目標節點缺少基礎表確認 use_existing_objects=TRUE 或預先建立表結構
ORA-23375: 衝突未解決雙向更新同一行設定衝突解決規則(最新時間戳勝出、站點優先級等)
Deferred queue 堆積網路中斷或目標節點掛起檢查 DB Link 連線、重啟 Job Queue 進程
GLOBAL_NAME 不符DB Link 名稱與 GLOBAL_NAME 不一致強制 DB Link 名稱 = GLOBAL_NAME(global_names=TRUE 時)

八、架構圖解

┌─────────────────┐     非同步傳播      ┌─────────────────┐
│  ORCL9I (MDS)   │ ◄─────────────────► │  ALPHA9I (MS)   │
│  Master Def     │   DBlink 雙向連線    │  Master Site    │
│  SCOTT.EMP      │   Deferred Queue    │  SCOTT.EMP      │
└─────────────────┘                     └─────────────────┘
       ▲                                        ▲
       │                                        │
   讀寫分離                              讀寫分離
   應用端                                 應用端

結語

Oracle 多主體複寫雖然架構複雜,但透過系統化的部署流程——環境檢查、網路互通、權限授予、Master Group 建立、物件註冊、支援生成、節點加入、活動恢復——即可構建企業級雙活架構。關鍵在於:前期規劃GLOBAL_NAME、雙向DB Link、衝突解決策略 三大核心要素。建議生產環境上線前進行完整的故障演練(網路中斷、節點故障、衝突模擬),確保複寫拓撲的穩健性。

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