Oracle 多主(Master Replication)复制配置

一、环境

windows server 2003 sp1;10g 10.1.0.2

主体定义站点:SID:db1 IP:10.1.8.201

主体站点:SID:db2 IP:10.1.9.49

二、配置

1. db1 上的操作

-- 确保下面参数配置

db_domain='mytest.com'

global_names=true

-- tnsnames.ora 配置

DB2 =

    (DESCRIPTION =

        (ADDRESS_LIST =

            (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.9.49)(PORT = 1521))

            )

        (CONNECT_DATA =

            (SID = db2)

            (GLOBAL_NAME = mytest.com)

            (SERVER = DEDICATED)

        )

    )

DB1 =

    (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.201)(PORT = 1521))

        (CONNECT_DATA =

            (SERVER = DEDICATED)

            (SERVICE_NAME = db1.mytest.com)

        )

    )

conn system 

-- 修改 global name

alter database rename global_name to db1.mytest.com;

-- 建立公共 db link

create public database link db2.mytest.com using 'db2';

-- 检查

select * from global_name@db2.mytest.com;

-- 建立复制管理员并授权

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;

conn repadmin

-- 建立 db link

create database link db2.mytest.com connect to repadmin identified by repadmin;

-- 检查

select * from global_name@db2.mytest.com;

conn system

-- 建立测试用户并授权

create user testuser identified by testuser default tablespace users temporary tablespace temp; 

grant connect, resource to testuser;

conn testuser

-- 建立测试用表

create table dept 

(deptno number(2) primary key, 

dname varchar2(14), 

loc varchar2(13) );

2. 在 db2 上进行与相似的操作

db_domain='mytest.com'

global_names=true

DB1 =

    (DESCRIPTION =

        (ADDRESS_LIST =

            (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.9.201)(PORT = 1521))

            )

        (CONNECT_DATA =

            (SID = db1)

            (GLOBAL_NAME = mytest.com)

            (SERVER = DEDICATED)

        )

    )

DB2 =

    (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.9.49)(PORT = 1521))

        (CONNECT_DATA =

            (SERVER = DEDICATED)

            (SERVICE_NAME = db2.mytest.com)

        )

    )

conn system

alter database rename global_name to db2.mytest.com;

create public database link db1.mytest.com using 'db1';

select * from global_name@db1.mytest.com;

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;

conn repadmin

create database link db1.mytest.com connect to repadmin identified by repadmin;

select * from global_name@db1.mytest.com;

conn system

create user testuser identified by testuser default tablespace users temporary tablespace temp; 

grant connect, resource to testuser;

conn testuser

create table dept 

(deptno number(2) primary key, 

dname varchar2(14), 

loc varchar2(13) );

3. 在 db1 上配置复制

conn repadmin

-- 创建复制组

execute dbms_repcat.create_master_repgroup('testuser_mg'); 

-- 检查

select gname,master,status from dba_repgroup where gname='TESTUSER_MG';

-- 在复制组里加入复制对象

execute dbms_repcat.create_master_repobject(sname=>'testuser',oname=>'dept', type=>'table',use_existing_object=>true,gname=>'testuser_mg',copy_rows=>false); 

-- 检查

select sname,oname,status,gname from dba_repobject where gname='testuser_mg';

-- 对复制对象产生复制支持

execute dbms_repcat.generate_replication_support('testuser','dept','table');

-- 检查

select gname, master, status from dba_repgroup where gname='TESTUSER_MG';

select sname,oname,status,gname from dba_repobject where gname='TESTUSER_MG';

-- 添加主体复制节点

execute dbms_repcat.add_master_database (gname=>'testuser_mg',master=>'db2.mytest.com',use_existing_objects=>true, copy_rows=>false, propagation_mode => 'synchronous'); 

-- 检查

column masterdef format a10

column master format a10

column dblink format a25

column gname format a12

select gname, dblink, masterdef MASTERDEF, master MASTER from sys.dba_repsites where gname='TESTUSER_MG';

-- 启动复制

execute dbms_repcat.resume_master_activity('testuser_mg',true); 

-- 检查

select gname,master,status from dba_repgroup where gname='TESTUSER_MG';

-- repadmin 用登录主体站点,检查复制对象情况

set linesize 120

select sname,oname,status,gname from dba_repobject where gname='TESTUSER_MG';

4. 测试

-- 在 db1 上增加数据

conn testuser

insert into dept values (1,'accounting','new york'); 

insert into dept values (2,'research','dallas'); 

insert into dept values (3,'sales','chicago'); 

insert into dept values (4,'operations','boston'); 

commit;

-- 检查 db2 的数据变化

conn testuser

select * from dept;

-- 在 db1 上进行表结构修改(DDL)

EXECUTE DBMS_REPCAT.EXECUTE_DDL(gname => 'testuser_mg',ddl_text => 'truncate table testuser.dept');

EXECUTE DBMS_REPCAT.EXECUTE_DDL(gname => 'testuser_mg',ddl_text => 'ALTER TABLE TESTUSER.DEPT ADD c1 NUMBER');

EXECUTE DBMS_REPCAT.EXECUTE_DDL(gname => 'testuser_mg',ddl_text => 'ALTER TABLE TESTUSER.DEPT DROP (C1)');

-- 检查 db2 的数据变化

conn testuser

desc dept

select * from dept;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

基于时间点的不完全恢复的例子(r6笔记第9天)

说到不完全恢复,一般有三种场景,基于时间点的不完全恢复,基于scn的不完全恢复,基于cancel的不完全恢复。 三种情况都是不完全恢复采用的方式,而不完全恢复都...

2675
来自专栏杨建荣的学习笔记

一个SQL性能问题的优化探索(一)(r11笔记第33天)

今天同事问我一个问题,看起来比较常规,但是仔细分析了一圈,发现实在是有些晕,我隐隐感觉这是一个bug,但是有感觉问题还有很多需要确认和理解的细节。 同事...

3469
来自专栏乐沙弥的世界

批量迁移Oracle数据文件,日志文件及控制文件

   有些时候需要将Oracle的多个数据文件以及日志文件重定位或者迁移到新的分区或新的位置,比如磁盘空间不足,或因为特殊需求。对于这种情形可以采取批量迁移的方...

782
来自专栏杨建荣的学习笔记

手工创建/删除数据库的步骤

今天和大家分享下数据库的创建和删除的步骤,里面有很多细节需要大家考虑。创建数据库不只是一个create database语句。删除数据库 drop databa...

3136
来自专栏逸鹏说道

触发器在渗透中的利用

0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的...

3375
来自专栏企鹅号快讯

带你认识一下mysql中数据库information

information_schema 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库。 inf...

2088
来自专栏乐沙弥的世界

SQL*PLus 帮助手册(SP2-0171)

    对于经常在SQL*Plus 下工作的大师们而言,总是时不时查询SQL*Plus的帮助命令。着实太多了,记不住。SQL*Plus下直接提供了help命令来...

1993
来自专栏杨建荣的学习笔记

undo retention的思考(一)

最近有个网友咨询我一个问题,是关于undo_retention的,对于这个参数没有过多关注,只是知道需要设置undo_retention搭配使用undotabl...

3425
来自专栏杨建荣的学习笔记

MySQL在RR隔离级别下的unique失效和死锁模拟

今天在测试MySQL事务隔离级别的时候,发现了一个有趣的问题,也参考了杨一之前总结的一篇。http://blog.itpub.net/22664653/view...

3576
来自专栏王硕

原 PostgreSQL数据库操作查找原因以及解决建议

3599

扫码关注云+社区