隨著分散式應用需求日益增長,企業對分散式軟體環境的要求也水漲船高,這直接推動了分散式技術的演進。Oracle 資料複寫正是構建分散式資料環境的關鍵技術之一,它透過在不同實體站點間複製資料,讓所有站點都能擁有相同資料物件的可用副本。這與分散式資料庫不同:分散式資料庫中特定資料物件僅存在於特定站點,而複寫技術則確保所有站點都持有完整的資料拷貝。
典型的分散式商業應用中,常需將各地分部的資料備份至總部資料庫,既作為異地備份機制,又便於總部進行綜合統計分析。本文以 A 公司為例:總部設於北京,三個營業部分別位於上海、杭州、武漢,三地系統架構與資料庫結構完全一致,需將三地資料全量同步至北京總部資料庫。
啟動複寫前,必須確保網路連通無阻,並蒐集以下環境基線資訊:
資訊蒐集完成後,開始建立總部集中式資料庫。原則上集中資料庫版本應高於所有主站點版本,且建議統一所有資料庫的字元集。建庫完成後,為各主站點的備份資料分別建立獨立表空間,容量需大於預估複寫資料量,並預留未來擴充空間。
若各主站點 Schema 名稱不同,在集中資料庫建立同名 Schema;若同名(如本例皆使用 Oracle 預設 Schema),則需建立對應的區分性 Schema,本例建立 SHORACL、HZORACL、WHORACL 三個 Schema。所有資料庫版本均為 9i。
正式操作前,先釐清複寫架構中的關鍵術語:
本採用每日一次的非同步複寫模式。
配置本地服務名稱:上海 SH、杭州 HZ、武漢 WH、北京 BJ。以 sqlplus /nolog 進入開始操作。
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;
begin
dbms_defer_sys.register_purpagator(username=>'repadmin');
end;
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 為佇列空閒時的等待秒數。
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;
disconnect;
connect repadmin/repadmin@SH;
begin
dbms_repcat.create_master_repgroup(gname=>'sh_rep');
end;
/
後續步驟包含將複寫物件加入主體組、建立實體化視圖日誌、於目標站點建立實體化視圖組與視圖、設定刷新排程等,將於下一頁續述。