以下的文章主要是介紹Oracle高級復制的同步相關復制,如果某個公司需要在全國幾個相關的地方來架設服務器(Oracle)的話,就要求各個相關的DB數據的一致性,以下是測試方案中的一種:同步復制。
Oracle 高級復制同步復制配置步驟詳細說明
[Oracle] Oracle高級復制同步復制配置步驟
首先,數據庫要具備Oracle高級復制功能(用system身份登錄數據庫,查看v$option視圖,如果其中Advanced replication為TRUE,則支持Oracle高級復制功能;否則不支持)
一.數據庫基本情況
數據庫A 版本Oracle 10.2.0.1 數據庫名sid:eread
數據庫B 版本Oracle 10.1.0.3 數據庫名sid:test
主體定義站點:A eread
主體站點:B test
注:主體定義站點指配置復制工作的站點
本例涉及的用戶.
復制管理員:repadmin
應用用戶:cqm
本例Oracle高級復制的對象:reptest 數據表
本例的先決條件:你需要設置好相應的參數,job_queue_processes需要大於0,global_name=true,並且建立相應的db link.
- alter system set global_names=true scope=both;
二.在兩個數據庫上分別創建應用用戶CQM
- CREATE USER CQM IDENTIFIED BY CQM DEFAULT TABLESPACE CQM TEMPORARY TABLESPACE TEMP;
- GRANT DBA TO CQM;
三.在兩個數據庫上分別創建復制管事員用戶REPADMIN
創建repadmin用戶管理Oracle高級復制環境
- CREATE USER REPADMIN IDENTIFIED BY REPADMIN;
- ALTER USER REPADMIN DEFAULT TABLESPACE USERS;
- ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP;
- GRANT connect, resource TO REPADMIN;
授予repadmin用戶權限可以管理當前站點中任何主體組
- EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');
授予repadmin用戶權限可以為任何表創建snapshot logs
- GRANT comment any table TO REPADMIN;
- GRANT lock any table TO REPADMIN;
指定repadmin用戶為propagator,並授予執行任何procedure的權限
- EXECUTE dbms_defer_sys.register_propagator('REPADMIN');
- GRANT execute any procedure TO REPADMIN;
四.更改兩個數據庫的全局名稱
- alter database rename global_name to A.TEST.COM.CN;
- alter database rename global_name to B.TEST.COM.CN;
A:eread.im.com.cn
B:test.im.com.cn
五.在兩個數據庫上建立數據庫鏈接
- create public database link test.im.com.cn connect to REPADMIN identifIEd by REPADMIN using 'test';
- create public database link eread.im.com.cn connect to REPADMIN identifIEd by REPADMIN using 'eread';
六.在兩個數據庫的應用用戶CQM下創建表
在數據庫EREAD上用戶CQM下:注意,要進行Oracle高級復制的表必須有主鍵
- CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
- ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));
在數據庫EREAD上用戶CQM下:
- CREATE TABLE TEST(ID NUMBER(10),TIMESTAMP DATE DEFAULT sysdate);
- ALTER TABLE TEST ADD(CONSTRAINT TEST_PK PRIMARY KEY(ID));
七.在主體定義站點開始操作(數據庫A:eread)
以REPADMIN登錄數據庫eread
創建復制組:
- execute dbms_repcat.create_master_repgroup('rep_hh');
- execute dbms_repcat.create_master_repgroup('repg');
在復制組裡加入復制對象:
- execute dbms_repcat.create_master_repobject(sname=>'cqm',oname=>'test',type=>'table',use_existing_object=>true,gname=>'repg');,copy_rows=>false);
對復制對象產生復制支持:
- execute dbms_repcat.generate_replication_support('cqm','test','table');
添加主體復制節點:
- execute dbms_repcat.add_master_database(gname=>'repg',master=>'test.im.com.cn',use_existing_objects=>true,copy_rows=>false, propagation_mode => 'synchronous');
在主體定義站點啟動Oracle高級復制:
- execute dbms_repcat.resume_master_activity('repg',true);
八.至此配置完成
測試:
1)模擬小數據量測試:OK
2)模擬大數據量測試:
- CREATE OR REPLACE procedure insert_into_test
- as
- i number;
- m NUMBER;
- n NUMBER;
- BEGIN
- n:=0;
- FOR i IN 1..10000 LOOP
- m:=i;
- INSERT INTO test(id)VALUES (m);
- nn:=n+1;
- IF n=1000 THEN
- COMMIT;
- n:=0;
- END IF;
- END LOOP;
- COMMIT;
- END;
- /
上述的相關內容就是對Oracle高級復制之同步復制的描述,希望會給你帶來一些幫助在此方面。