5. .复制实施进程:(特别注意以下在master数据库上操作)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
5.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=>'wj',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
----------------------------- ------------------------------ ------------- ------------------------------
WJ TEST VALID REP_MYTEST
为复制对象生成复制支持:
SQL> execute dbms_repcat.generate_replication_support('wj','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
----------------------------- ------------------------------ ------------- ------------------------------
WJ TEST VALID REP_MYTEST
WJ TEST$RP VALID REP_MYTEST
WJ TEST$RP VALID REP_MYTEST
为复制主体组添加数据库主站点:
SQL>execute dbms_repcat.add_master_database(gname=>'REP_MYTEST',master=>'repsite.com.cn',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 repsite.com.cn Y Y
REP_MYTEST master.comc.n 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 NORMAL
注意:复制主体组的状态由QUIESCED变为NORMAL。
至此,这个复制过程实施完毕。可以进行相关的数据操作进行测试。
7、配置好后。如果需要添加表。
执行下命令:
7.1.execute dbms_repcat.suspend_master_activity('rep_mytest'); 取消抑制。
7.2增加新表
execute dbms_repcat.create_master_repobject(sname=>'reptest',oname=>'test1',type=>'TABLE',use_existing_object=>true,gname=>'REP_MYTEST',copy_rows=>true);
7.3增加支持。
execute dbms_repcat.generate_replication_support('reptest','test1','TABLE')
7.4启动进程
execute dbms_repcat.resume_master_activity('REP_MYTEST',true);
好了。你可以去测试你新加的表了.
一些删除命令用select * from dba_repgroup;检查站点状态 状态为NORMAL时表示该站点正常。
相关视图
" DBA_REPSITES ----复制站点情况
" DBA_REPGROUP -----复制组情况
" DBA_REPOBJECT ----复制对象情况
" DBA_REPCATLOG ---同步情况日志
######################################
如果想删除其中的一个同步表,如下执行;
SQL> execute dbms_repcat.suspend_master_activity('rep_anymusic'); 停止主体组
SQL> EXECUTE Dbms_Repcat.Drop_Master_Repobject('wcms','test','table'); 删除同步表
SQL> EXECUTE Dbms_Repcat.Remove_Master_Databases('rep_anymusic', 'master.anymusic.com');删除主站点上面的组
SQL> execute dbms_repcat.resume_master_activity('REP_anymusic',true); 启动复制组
######################################
删除私有数据链路
用repadmin 登陆数据库
EXECUTE Dbms_Repcat.Drop_Master_Repgroup('主体组名');删除主体组
DROP DATABASE LINK master.anymusic.com; 删除db link名
删除jobs
select job,what from user_jobs; 查询job numbers
EXECUTE Dbms_Job.Remove(2); 括号内填写刚查询到的job numbers
######################################
删除REPADMIN用户,注意:必须先删除站点下隶属于该repadmin用户的jobs和组mygrp 才能删除用户
用sys登陆
EXECUTE Dbms_Defer_Sys.Unregister_Propagator(username=>'REPADMIN');
EXECUTE Dbms_Repcat_Admin.Revoke_Admin_Any_Schema(username=>'REPADMIN');
DROP USER repadmin CASCADE;
######################################
--删除公用的数据链路
用sys登陆
DROP PUBLIC DATABASE LINK master.anymusic.com;
######################################
备注:每次运行完repcat 包以后都应该执行一次commit,因为某些rep 的存储过程是不会
自动commit 的,同时这也是一个troubleshooting,一般的rep 脚本都会较快的返回结果,
如果一条命令之后长时间没有结果返回,那么很可能是上面的命令没有commit,取消掉当
前的命令,然后作一次commit,再重新执行,一般都能够解决问题。
#######################################
强制删除复制组
Sql>Truncate table system.def$_aqcall;
Sql>Exec dbms_repcat.drop_master_repgroup(gname=>'mygrp',all_sites=>true);
########################################