首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 資料庫集中式複寫實作指南

     編輯:Oracle 資料庫相關知識

前言

隨著分散式應用需求日益增長,企業對分散式軟體環境的要求也水漲船高,這直接推動了分散式技術的演進。Oracle 資料複寫正是構建分散式資料環境的關鍵技術之一,它透過在不同實體站點間複製資料,讓所有站點都能擁有相同資料物件的可用副本。這與分散式資料庫不同:分散式資料庫中特定資料物件僅存在於特定站點,而複寫技術則確保所有站點都持有完整的資料拷貝。

實務情境:企業總部分部資料集中備份

典型的分散式商業應用中,常需將各地分部的資料備份至總部資料庫,既作為異地備份機制,又便於總部進行綜合統計分析。本文以 A 公司為例:總部設於北京,三個營業部分別位於上海、杭州、武漢,三地系統架構與資料庫結構完全一致,需將三地資料全量同步至北京總部資料庫。

前置準備工作

啟動複寫前,必須確保網路連通無阻,並蒐集以下環境基線資訊:

  • 需複寫的資料庫站點數量
  • 各站點 Oracle 版本號
  • 各資料庫大小評估
  • 各資料庫使用的字元集
  • 需複寫資料所屬的 Schema 名稱

資訊蒐集完成後,開始建立總部集中式資料庫。原則上集中資料庫版本應高於所有主站點版本,且建議統一所有資料庫的字元集。建庫完成後,為各主站點的備份資料分別建立獨立表空間,容量需大於預估複寫資料量,並預留未來擴充空間。

若各主站點 Schema 名稱不同,在集中資料庫建立同名 Schema;若同名(如本例皆使用 Oracle 預設 Schema),則需建立對應的區分性 Schema,本例建立 SHORACL、HZORACL、WHORACL 三個 Schema。所有資料庫版本均為 9i。

核心概念釐清

正式操作前,先釐清複寫架構中的關鍵術語:

  • 主站點:提供資料來源的站點(如上海資料庫)。
  • 實體化視圖站點:接收複寫資料的目標站點(如北京資料庫)。
  • 多主體站點複寫:所有站點均為主站點,擁有同等管理權限。
  • 實體化視圖複寫:單一主站點提供來源,實體化視圖站點複製資料。
  • 實體化視圖:在目標站點為每個複寫表/視圖建立對應實體表,僅透過 Oracle 複寫機制進行增刪改。
  • 快速刷新 / 完全刷新 / 強制刷新:三種同步模式。快速刷新僅同步變更部分;完全刷新每次全量複製;強制刷新為折衷方案,快速失敗時自動轉完全刷新。
  • 主體組 / 實體化視圖組:分別為主站點與目標站點的複寫物件集合。
  • 實體化視圖日誌:快速刷新時,記錄主站點來源物件操作日誌的表。

本採用每日一次的非同步複寫模式。

複寫環境建置步驟

配置本地服務名稱:上海 SH、杭州 HZ、武漢 WH、北京 BJ。以 sqlplus /nolog 進入開始操作。

一、設定主站點(以上海為例)

  1. 建立複寫管理員並授權
    連線主站點,建立用戶 repadmin 並賦予管理任意 Schema 的權限,以及建立註釋、鎖定任意表的權限,以便建立實體化視圖日誌。若需使用視圖管理器,再額外授予 select any dictionary。
    connect system/passwd@SH
    create user repadmin identified by repadmin;
    begin
      dbms_repcat_admin.grant_admin_any_schema(username=>'repadmin');
    end;
    /
    grant comment any table to REPADMIN;
    grant lock any table to REPADMIN;
    grant select any dictionary to REPADMIN;
  2. 註冊傳播者
    傳播者負責將主站點的延遲交易佇列推送至其他站點。
    begin
      dbms_defer_sys.register_purpagator(username=>'repadmin');
    end;
  3. 排程清除作業
    切換至 repadmin 用戶,設定每日自動清除延遲佇列並推送交易。
    disconnect;
    connect repadmin/repadmin@SH;
    begin
      dbms_defer_sys.schedule_purge(
        next_date=>sysdate,
        interval=>'sysdate + 1',
        delay_seconds=>0);
    end;

    參數說明:next_date 為下次執行時間(sysdate 表立即),interval 為間隔週期(sysdate+1 為每日),delay_seconds 為佇列空閒時的等待秒數。

  4. 建立實體化視圖站點的代理用戶
    建立 proxy_bjoracle 用戶並授予 proxy_snapadmin 權限,作為目標站點連接主站點的代理帳號。
    disconnect;
    connect system/passwd@SH;
    create user proxy_bjoracle identified by proxy_bjoracle;
    begin
      dbms_repcat_admin.register_user_repgroup(
        user_name=>'proxy_bjoracle',
        privilege_type=>'proxy_snapadmin',
        list_of_gnames=>NULL);
    end;
    /
    grant select_catalog_role to proxy_bjoracle;
  5. 建立主體組
    以 repadmin 身分建立名為 sh_rep 的主體複寫群組。
    disconnect;
    connect repadmin/repadmin@SH;
    begin
      dbms_repcat.create_master_repgroup(gname=>'sh_rep');
    end;
    /
    

後續步驟包含將複寫物件加入主體組、建立實體化視圖日誌、於目標站點建立實體化視圖組與視圖、設定刷新排程等,將於下一頁續述。

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