分类: Oracle
2007-12-22 16:43:46
Oracle 10g高级复制实例(多主体复制)
前言:
配置了三次,两次都是单向。最后一次终于是双向的了。也算一点有点成功的喜悦。喜悦?喜悦确实谈不上。这么简单的东西弄了这么久觉得惭愧。网络上的资料一大堆。不过他们写的好象都有些随意。有的时候一点点错误可以使你只有重来。我现在重新写一次。只提供给初学者。配置的高手的就不要开腔了。因为实在不好意思拿出来见人。
信息:
主体定义数据库:testdb.geong.com(弄清楚别弄错了。)
主体数据库:backdb.geong.com
操作系统: xp
数据库版本: ORACLE 10G -10.2.0.1.0
注:主体定义数据库指配置复制工作的数据库。
高级复制过程:(以下没有特别说明都要在两台数据库上操作)。
1.处理数据库参数:(两台数据库都要配置)
1.1设置global_name为true。(global_name 由两部分组成。
SQL> show parameter global_name
NAME TYPE VALUE
------------------------------------ ----------- --------
global_names boolean TRUE
如果为false 请更改
alter system set global_name=true scope=spfile; (写在spfile文件中。需要重起才能起作用)
1.2 重新命名global_name
alter database rename global_name to
如:
alter database global_name to testdb.geong.com;
更该完毕。
重起两台数据库。
参数修改完毕。
2.开始用户配置:(两台数据库都要相同的配置)
2.1 先配置复制数据测试用户。
用system用户操作:
create user test identified by test default tablespace users;
grant connect,resource to test;
2.2切换到test用户
conn test/test
create table test(id number,name varchar2(20),constraint test_id_pk primary key(id));(主键一定是要的);
2.3 插入一些测试数据
insert into test values(1,’tanfufa1’);
insert into test values(1,’tanfufa1’);
insert into test values(1,’tanfufa1’);
commit;
2.4用system用户创建public link;
在testdb上创建
create public database link “backdb.geong.com” using ‘backdb’;
测试连通性:
select * from global_name@ backdb.geong.com
GLOBAL_NAME
---------
BACKDB.GEONG.COM
如果不通请检查tnsname.一定要通.不然后面就不用做了.
在backdb上创建
create public database link “backdb.geong.com” using ‘backdb’;
测试连通性:
select * from global_name@ testdb.geong.com
GLOBAL_NAME
---------
TESTDB.GEONG.COM
如果不通请检查tnsname.一定要通.不然后面就不用做了.
3.配置复制管理用户. (两台数据库都要相同的配置)
3.1
conn system/tanfufa
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
User created.
SQL>execute dbms_defer_sys.register_propagator('repadmin');
PL/SQL procedure successfully completed.
SQL>grant execute any procedure to repadmin;
Grant succeeded.
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
PL/SQL procedure successfully completed.
SQL>execute dbms_repcat_admin.grant_admin_any_schema(username => 'repadmin');
PL/SQL procedure successfully completed.
SQL>grant comment any table to repadmin;
Grant succeeded.
SQL>grant lock any table to repadmin;
Grant succeeded.
SQL>grant select any dictionary to repadmin;
Grant succeeded.
4. 用repadmin用户创建database link. (两台数据库都要相同的配置)
在testdb上创建:
create database link “backdb.geong.com” connect to repadmin identified by repadmin.
测试连通性:
select * from global_name@ backdb.geong.com
GLOBAL_NAME
---------
BACKDB.GEONG.COM
如果不通请检查tnsname.一定要通.不然后面就不用做了.
在backdb上创建:
create database link “backdb.geong.com” connect to repadmin identified by repadmin.
测试连通性:
select * from global_name@ testdb.geong.com
GLOBAL_NAME
---------
TESTDB.GEONG.COM
如果不通请检查tnsname.一定要通.不然后面就不用做了.
5.准备工作全部做完了.现在去喝咖啡.
6. .复制实施进程:(特别注意以下在testdb数据库上操作)
6.1 conn repadmin/repadmin
SQL> execute dbms_repcat.create_master_repgroup('REP_MYTEST');
PL/SQL procedure successfully completed.
察看复制主体组相关信息:
SQL> select gname,master,status from dba_repgroup where gname='REP_MYTEST';
GNAME MASTER STATUS
--------------------------- ---------------------------- ------------------------
REP_MYTEST Y QUIESCED
为主体组添加复制对象:
SQL> execute dbms_repcat.create_master_repobject (sname=>'test',oname=>'test', type=>'TABLE', use_existing_object=>true,gname=>'REP_MYTEST',copy_rows=>true);
PL/SQL procedure successfully completed.
察看复制主体组中复制对象的相关信息:
SQL>select sname,oname,status,gname from dba_repobject where gname='REP_MYTEST';
SNAME ONAME STATUS GNAME
----------------------------- ------------------------------ ------------- ------------------------------
SCOTT DEPT VALID REP_MYTEST
为复制对象生成复制支持:
SQL> execute dbms_repcat.generate_replication_support('test','test','TABLE');
PL/SQL procedure successfully completed.
再次察看复制主体组和对应的复制对象的相关信息:
SQL> select gname,master,status from dba_repgroup where gname='REP_MYTEST';
GNAME MASTER STATUS
--------------------------- ---------------------------- ------------------------
REP_MYTEST Y QUIESCED
SQL> select sname,oname,status,gname from dba_repobject where gname='REP_MYTEST';
SNAME ONAME STATUS GNAME
----------------------------- ------------------------------ ------------- ------------------------------
SCOTT DEPT VALID REP_MYTEST
SCOTT DEPT$RP VALID REP_MYTEST
SCOTT DEPT$RP VALID REP_MYTEST
为复制主体组添加数据库主站点:
SQL>execute dbms_repcat.add_master_database(gname=>'REP_MYTEST',
master=>'backdb.geong.com',use_existing_objects=>true,copy_rows=>true, propagation_mode => 'synchronous');
PL/SQL procedure successfully completed.
察看复制站点信息:
SQL> select gname,dblink,masterdef,master from dba_repsites where gname='REP_MYTEST';
GNAME DBLINK MASTERDEF MASTER
------------ -------------------------------- ------------------ --------------
REP_MYTEST testdb.geong.com Y Y
REP_MYTEST backdb.geong.com N Y
启动复制进程:
SQL> execute dbms_repcat.resume_master_activity('REP_MYTEST',true);
PL/SQL procedure successfully completed.
再次察看复制主体组相关信息:
SQL> select gname,master,status from dba_repgroup where gname='REP_MYTEST';
GNAME MASTER STATUS
--------------------------- ---------------------------- ------------------------
REP_MYTEST Y
注意:复制主体组的状态由QUIESCED变为NORMAL。
至此,这个复制过程实施完毕。可以进行相关的数据操作进行测试。
7.测试:
1.在testdb上删除修改插入数据,查看backdb变化.
2.在backdb上删除修改插入数据,查看testdb变化.
8.如果你需要添加表到组里面来请按照入下操作.
配置好后。如果需要添加表。
执行下命令:
8.1.exec dbms_repcat.suspend_master_activity('rep_mytest');
取消抑制。
8.2.SQL> execute dbms_repcat.create_master_repobject(sname=>'reptest',oname=>'test1'
,type=>'TABLE',use_existing_object=>true,gname=>'REP_MYTEST',copy_rows=>true);
为组增加新表。
8.3.execute dbms_repcat.generate_replication_support('reptest','test1','TABLE')
增加支持。
。
8.4. execute dbms_repcat.resume_master_activity('REP_MYTEST',true);
启动进程