oracle高级复制的全过程

这个是本人已经实验通过的了.很多都是向别人学习的.

oracle 10g
本例涉及两个站点.
1:lxp28.ruanko.com
2:lxp32.ruanko.com
注:主体定义站点指配置复制工作的站点

本例涉及的用户.
复制管理员:repadmin
应用用户:lxp
本例复制的对象:hw_test 数据表
本例的先决条件:你需要设置好相应的参数,job_queue_processes需要大于0,global_name=true,

一。在1上做的:
用户netca来配一个连接2的侦听  lxp32
sqlplus / as sysdba
察看global_name参数
SQL> show parameter global_name;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE


SQL> alter system set global_names=true scope=both;

察看默认global_name,数据库域名
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
orc1.REGRESS.RDBMS.DEV.US.ORACLE.COM
修改global_name,数据库域名
SQL> alter database rename global_name to lxp28.ruanko.com scope=both;

SQL> shutdown immediate

SQL> startup

SQL> create user lxp identified by lxp default tablespace users;

SQL> grant connect,resource to lxp;

SQL> conn lxp/lxp

create table test(id number,name varchar2(20),constraint test_id_pk primary key(id));   (主键一定是要的,因为主键是判断两个数据库的差异);

建立管理数据库复制的用户repadmin,并赋权。
SQL> create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL> execute dbms_defer_sys.register_propagator('repadmin');
SQL> grant execute any procedure to repadmin;
SQL> execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL> execute dbms_repcat_admin.grant_admin_any_schema(username => 'repadmin');
SQL> grant comment any table to repadmin;
SQL> grant lock any table to repadmin;
SQL> grant select any dictionary to repadmin;

用repadmin 创建database link 连接

SQL> conn repadmin/repadmin

SQL> create public database link "lxp32.ruanko.com" connect to repadmin identified by repadmin using 'lxp32';

Database link created.

SQL> select * from dual@lxp32;

D
-
X




二。在2上做的:
配一个连接2的侦听  lxp28
sqlplus / as sysdba
察看global_name参数
SQL> show parameter global_name;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
global_names                         boolean     FALSE

察看默认global_name,数据库域名
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
orc1.REGRESS.RDBMS.DEV.US.ORACLE.COM
修改global_name,数据库域名
SQL> alter database rename global_name to lxp28.ruanko.com scope=both;

SQL> shutdown immediate

SQL> startup

SQL> create user lxp identified by lxp default tablespace users;

SQL> grant connect,resource to lxp;

SQL> conn lxp/lxp

create table test(id number,name varchar2(20),constraint test_id_pk primary key(id));   (主键一定是要的,因为主键是判断两个数据库的差异);

建立管理数据库复制的用户repadmin,并赋权。
SQL> create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL> execute dbms_defer_sys.register_propagator('repadmin');
SQL> grant execute any procedure to repadmin;
SQL> execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL> execute dbms_repcat_admin.grant_admin_any_schema(username => 'repadmin');
SQL> grant comment any table to repadmin;
SQL> grant lock any table to repadmin;
SQL> grant select any dictionary to repadmin;

用repadmin 创建database link 连接

SQL> conn repadmin/repadmin

SQL> create public database link "lxp28.ruanko.com" connect to repadmin identified by repadmin using 'lxp28';

Database link created.

SQL> select * from dual@lxp28;

D
-
X


三在回到1机上:
创建复制组:
SQL> execute dbms_repcat.create_master_repgroup('rep_hh');

PL/SQL procedure successfully completed.

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=>'lxp',oname=>'test',type=>'table',use_existing_object=>true,gname=>'rep_hh',copy_rows=>false);

sname 实现数据库复制的用户名称
oname 实现数据库复制的数据库对象名称
type 实现数据库复制的数据库对象类别。(支持的类别:表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体)
use_existing_object true表示用主复制节点已经存在的数据库对象
gname 主复制组名
copy_rows true表示第一次开始复制时和主复制节点保持一致








PL/SQL procedure successfully completed.

SQL> select sname,oname,status,gname from dba_repobject where gname='REP_HH';

SNAME                          ONAME                          STATUS     GNAME
------------------------------ ------------------------------ ---------- ------------------------------
HAWA                           HW_TEST                        VALID      REP_HH

 

对复制对象产生复制支持
SQL> execute dbms_repcat.generate_replication_support('lxp','test','table');

(说明:产生支持lxp用户下test表复制的数据库触发器和程序包)


PL/SQL procedure successfully completed.

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
------------------------------ ------------------------------ ---------- ------------------------------
lxp                            TEST                            VALID      REP_HH
lxp                            TEST$RP                         VALID      REP_HH
lxp                            TEST$RP                         VALID      REP_HH

SQL>

 

添加主体复制节点
SQL> execute dbms_repcat.add_master_database
(gname=>'rep_hh',master=>'lxp32.ruanko.com',use_existing_objects=>true,
copy_rows=>false, propagation_mode => 'synchronous');

gname 主复制组名
master 加入主复制节点的另一个数据库
use_existing_object true表示用主复制节点已经存在的数据库对象
copy_rows false表示第一次开始复制时不用和主复制节点保持一致
propagation_mode 异步地执行


PL/SQL procedure successfully completed.

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       lxp28.ruanko.com           Y          Y
REP_HH       lxp32.ruanko.com            N          Y
 

四。登陆2机上,检查复制对象情况:
[oracle@www167 oracle]$ sqlplus repadmin/password

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
------------------------------ ------------------------------ ---------- ------------------------------
lxp                               TEST                        VALID      REP_HH
lxp                               TEST                        VALID      REP_HH
lxp                               TEST                        VALID      REP_HH
 

五回到1机上

在主体定义站点启动复制:

conn repadmin/repadmin

SQL> select * from global_name;

GLOBAL_NAME
-----------------------------------------------------------------------------
lxp28.ruanko.com

SQL> execute dbms_repcat.resume_master_activity('rep_hh',true);

PL/SQL procedure successfully completed.


六:在1或2机上

SQL>conn lxp/lxp

SQL>insert into test values(1,'zhao');
 
SQL>insert into test values(2,'yong');

SQL>commit;

再到1机或2机上的lxp用户上查
SQL>select * from test
        ID NAME
---------- --------------------
         1 zhao
         2 yong

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16111659/viewspace-663216/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16111659/viewspace-663216/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值