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

Oracle 高級複寫實戰部署:雙向同步複寫環境建置完整指南

     編輯:Oracle 資料庫基礎

前置條件

  • 資料庫需支援高級複寫:SELECT * FROM v$option 中 Advanced replication = TRUE
  • 初始化參數設定:
    db_domain = test.com.cn
    global_names = true
    job_queue_processes = 1
    job_queue_interval = 60
    distributed_transactions = 10
    open_links = 4
    
    修改後需重啟資料庫生效

雙節點複寫拓撲

節點:China (10.1.0.100) 與 Japan (10.1.0.200),SID 均為同名,Listener 1521。

建置步驟

  1. 網路互通:雙向配置 tnsnames.ora,tnsping 驗證
  2. 全域資料庫名與 Public DB Link:
    -- China 節點
    ALTER DATABASE RENAME GLOBAL_NAME TO China.test.com.cn;
    CREATE PUBLIC DATABASE LINK Japan.test.com.cn USING 'Japan';
    SELECT * FROM global_name@Japan.test.com.cn; -- 驗證回傳 Japan.test.com.cn
        
  3. 建立複寫管理用戶 repadmin 並授權(雙節點同步執行):
    CREATE USER repadmin IDENTIFIED BY repadmin DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
    EXEC dbms_defer_sys.register_propagator('repadmin');
    GRANT EXECUTE ANY PROCEDURE TO repadmin;
    EXEC dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
    GRANT COMMENT ANY TABLE TO repadmin;
    GRANT LOCK ANY TABLE TO repadmin;
        
  4. Repadmin 建立 Private DB Link(雙向):
    CREATE DATABASE LINK Japan.test.com.cn CONNECT TO repadmin IDENTIFIED BY repadmin;
        
  5. 建立複寫物件擁有者 scott 及主鍵表 dept(雙節點同步,序列範圍錯開避免衝突):
    -- China: sequence 1~44
    -- Japan: sequence 45~99
        
  6. 建立主複寫群組 scott_mg 並加入物件:
    EXEC dbms_repcat.create_master_repgroup('scott_mg');
    EXEC dbms_repcat.create_master_repobject(sname=>'scott', oname=>'dept', type=>'TABLE', use_existing_object=>true, gname=>'scott_mg');
    EXEC dbms_repcat.generate_replication_support('scott','dept','TABLE');
        
  7. 加入 Japan 為主節點:
    EXEC dbms_repcat.add_master_database(gname=>'scott_mg', master=>'Japan.test.com.cn', use_existing_objects=>true, copy_rows=>false, propagation_mode=>'asynchronous');
        
  8. 啟動複寫群組:
    EXEC dbms_repcat.resume_master_activity('scott_mg', false);
        
  9. 排程推送與清除(每 10 分鐘):
    BEGIN dbms_defer_sys.schedule_push(destination=>'Japan.test.com.cn', interval=>'sysdate+10/1440', next_date=>sysdate); END;
    BEGIN dbms_defer_sys.schedule_purge(next_date=>sysdate, interval=>'sysdate+10/1440', delay_seconds=>0, rollback_segment=>''); END;
        

異常處理與維護

  • 查詢 user_jobs 監控 Job 狀態:next_date 異常(過往或極大值)表示死鎖
  • 解除死鎖:OS 層 kill -9 刪除 ora_snp* 進程,再 EXEC dbms_job.run(job_no)
  • 增減複寫物件:SUSPEND_MASTER_ACTIVITY → 增刪物件 → GENERATE_REPLICATION_SUPPORT → RESUME_MASTER_ACTIVITY
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved