1. 在两台PC SERVER上安装ORACLE9I企业版,分别创建数据库WANG和ORASVR
2. 检查安装好的数据库是否支持高级复制:
SQL> select value from v$option where parameter='Advanced replication';
VALUE
----------------------------------------------------------------
TRUE
确保返回的结果是TRUE,如果是FALSE 则表示需要重新安装oracle 的高级复制部件。
如果安装的是企业版,安装没有问题的话,值为TRUE.
[@more@]3. 确保数据库的初始化参数中global_name=true,同时因为高级复制依靠于JOB 来实现,
所以必须保证job_queue_processes 参数大于0,我们可以设置为10。
设置下列参数为下面的值
global_name=true
open_links = 4
job_queue_processes = 10
4. 在两台数据库的TNSNAMES.ORA文件里都加上对方数据库的服务名称,保证双方可以互相连通.
ORA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.98)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora.metal.net.cn)
)
)
WL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.143)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wl.metal.net.cn)
)
)
5. 用sysdba 权限分别登录wl和ora数据库,检查双方的global_name,必须保证
两边的域名相同才可以建立正确的dblink。在这里我们选择METAL.NET.CN为域名,在安装数据库的时候全局数据库名也选择了域名.
select * from global_name;
GLOBAL_NAME
WL.METAL.NET.CN
Orasvr数据库的GLOBAL_NAME也改为ORA.METAL.NET.CN
6. 创建公有数据库链接,从WL连接到ORA,同时,从ORA链接到WL;
注意:数据库链接名字要与全局数据库名相同.
CREATE PUBLIC DATABASE LINK "wl.metal.net.cn" USING 'wl';
CREATE PUBLIC DATABASE LINK "ora.metal.net.cn" USING 'ora';
在ora数据库上,运行以下SQL 检查dblink创建是否成功,如果结果返回wl的global_name 则表示成功
SQL> select * from global_name@ora.metal.net.cn;
7. 在两台数据库服务器上创建repadmin 用户,用于管理高级复制
create user repadmin identified by repadmin default tablespace users temporary
tablespace temp;
execute dbms_defer_sys.register_propagator('repadmin');
grant execute any procedure to repadmin;
execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
execute dbms_repcat_admin.grant_admin_any_schema(username => '"REPADMIN"');
grant comment any table to repadmin;
grant lock any table to repadmin;
grant select any dictionary to repadmin;
8. 用repadmin 用户登录orasvr数据库,创建私有数据库连接
create database link "wang.metal.net.cn" connect to repadmin identified by repadmin;
9. 在ORA数据库上创建测试用户WANG,并创建表TEST
CREATE USER wang IDENTIFIED BY wang;
GRANT CONNECT,RESOURCE TO WANG;
CREATE TABLE "WANG"."TEST" ("ID" NUMBER(10) NOT NULL, "NAME"
VARCHAR2(10) NOT NULL,
CONSTRAINT "PK_ID" PRIMARY KEY("ID"))
TABLESPACE "USERS"
CREATE TABLE TEST (ID NUMBER,NAME VARCHAR2(10));
输入测试数据2行.
Insert into test values (1,’one’);
Insert into test values (2,’two’);
10. 在WL数据库上创建测试用户WANG,并创建表TEST,步骤同上.
11. 在WL数据库上添加复制组和复制对象
SQL>CONN REPADMIN/REPADMIN
SQL> execute dbms_repcat.create_master_repgroup('rep_hh');
SQL> select gname,master,status from dba_repgroup where gname='REP_HH';
GNAME M STATUS
------------------------------ - ---------
REP_HH Y QUIESCED
在复制组里加入复制对象
SQL> execute dbms_repcat.create_master_repobject(sname=>'wang',oname=>'test',type=>'table',use_existing_object=>true,gname=>'rep_hh',copy_rows=>false);
SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';
SNAME ONAME STATUS GNAME
------------------------------ ------------------------------ ---------- ------------------------------
WANG TEST VALID REP_HH
对复制对象产生复制支持
SQL> execute dbms_repcat.generate_replication_support('wang','test','table');
PL/SQL 过程已成功完成。
SQL> select gname, master, status from dba_repgroup where gname='REP_HH';
GNAME M STATUS
------------------------------ - ---------
REP_HH Y QUIESCED
SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';
SNAME ONAME STATUS
------------------------------ ------------------------------ ----------
GNAME
------------------------------
WANG TEST VALID
REP_HH
WANG TEST$RP VALID
REP_HH
WANG TEST$RP VALID
REP_HH
12.添加主体复制节点
SQL>execute dbms_repcat.add_master_database(gname=>'rep_hh',master=>'ORA.METAL.NET.CN',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'synchronous');
SQL> column masterdef format a10
SQL> column master format a10
SQL> column dblink format a25
SQL> column gname format a12
SQL> select gname, dblink, masterdef MASTERDEF, master MASTER from sys.dba_repsites where gname='REP_HH';
GNAME DBLINK MASTERDEF MASTER
------------ ------------------------- ---------- ----------
REP_HH WL.METAL.NET.CN Y Y
REP_HH OR.METAL.NET.CN N Y
13.在ORA数据库上检查复制对象情况:
SQL> select * from global_name;
GLOBAL_NAME
---------------------------------------------------------------------
AUTHAA.COOLYOUNG.COM.CN
SQL> set linesize 120
SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';
SNAME ONAME STATUS GNAME
------------------------------ ------------------------------ ---------- ------------------------------
WANG TEST VALID REP_HH
WANG TEST$RP VALID REP_HH
WANG TEST$RP VALID REP_HH
14.在WL数据库上启动复制
SQL> select * from global_name;
GLOBAL_NAME
-------------------------------------------------------------------
WL.METAL.NET.CN
SQL> execute dbms_repcat.resume_master_activity('rep_hh',true);
PL/SQL 过程已成功完成。
15.进行数据测试,在WL上删除数据,观察ORA的数据变化.
SQL> select * from global_name;
GLOBAL_NAME
-------------------------------------------------------------------
WL.METAL.NET.CN
SQL> execute dbms_repcat.resume_master_activity('rep_hh',true);
PL/SQL 过程已成功完成。
SQL> select * from wang.test;
ID NAME
---------- ----------
1 one
2 two
SQL> delete wang.test;
已删除2行。
SQL> select * from wang.test;
未选定行
SQL> commit;
提交完成。
此时 ORA数据库服务器的变化是:
SQL> conn repadmin/repadmin@ora
已连接。
SQL> select * from wang.test;
ID NAME
---------- ----------
1 one
2 two
SQL> select * from wang.test;
ID NAME
---------- ----------
1 one
2 two
SQL> select * from wang.test;
未选定行
下面测试在WL上插入一条数据,则在ORA数据库上同时也写入数据:
在WL数据库上
SQL> select * from global_name;
GLOBAL_NAME
-------------------------------------------------
WL.METAL.NET.CN
SQL> select * from wang.test;
未选定行
SQL> insert into wang.test values (3,'three');
已创建 1 行。
SQL> commit;
提交完成。
在ORA数据库上
SQL> select * from global_name;
GLOBAL_NAME
-----------------------------------------
ORA.METAL.NET.CN
SQL> select * from wang.test;
未选定行
SQL> select * from wang.test;
ID NAME
---------- ----------
3 three
总结:以上配置是在无压力无数据流量的情况下配置成功的数据库同步复制,实现两个数据库的实时同步.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/72495/viewspace-916702/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/72495/viewspace-916702/