情景模拟
现在有两台服务器:
1)
机器名:ThinkPad IP:126.33.9.190 Oracle SID:ORCL
2)
机器名:ZHANGJIAN IP:
126.33.9.154 Oracle SID: ORCL
目的:将ThinkPad机器上用户Geosoc里面的BookMark表同步到ZHANGJIAN机器里面去。
(一)
高级复制
1.
查看是否具备高级复制功能
首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持)。
select *
from v$option
2.
设置相应参数
本例的先决条件:你需要设置好相应的参数,
job_queue_processes需要大于0,
global_name=true,
并且建立相应的db link
alter system set global_names=true scope=both;
3.
创建复制管理员账号
在两个数据库上分别创建复制管事员用户REPADMIN(该用户名及密码可以任意设置,建议统一采用该名字,密码统一为orcl)。
--创建repadmin用户管理复制环境CREATE USER REPADMIN IDENTIFIED BY REPADMIN; ALTER USER REPADMIN DEFAULT TABLESPACE USERS; ALTER USER REPADMIN TEMPORARY TABLESPACE TEMP; GRANT connect, resource TO REPADMIN;
--授予repadmin用户权限可以管理当前站点中任何主体组EXECUTE dbms_repcat_admin.grant_admin_any_schema('REPADMIN');--授予repadmin用户权限可以为任何表创建snapshot logsGRANT comment any table TO REPADMIN; GRANT lock any table TO REPADMIN;--指定repadmin用户为propagator,并授予执行任何procedure的权限
EXECUTE dbms_defer_sys.register_propagator('REPADMIN'); GRANT execute any procedure TO REPADMIN;
4.
更改数据库全局名
由于后面创建数据库链接(Database
link)时需要用到数据库全局名,因此遇到同名的数据库全局名时需要更改其数据库名。
ThinkPad机器:改为
ORCL_THINKPAD
alter database rename global_name to ORCL_THINKPAD;ZHANGJIAN机器:改为
ORCL_ZHANGJIAN
alter database rename global_name to ORCL_THINKPAD;
5.
在两个数据库上分别建立到对方的数据库链接
建立数据库链接的前提是两个数据库能互相访问,因此需要在数据库端先建立互相的连接本地命名。
由于开启了Global_names为True,因此链接名必须与Global名一致。
ThinkPad: 建立到ZHANGJIAN的本地命名为ORCL154。
create public database linkORCL_ZHANGJIANconnect toREPADMINidentified byorclusing'ORCL154';
ZHANGJIAN:建立到ThinkPad的本地命名为ORCL190。
create public database linkORCL_THINKPADconnect toREPADMINidentified byorclusing 'ORCL190';
建立好链接后,可以在各自的机器上测试链接是否成功。
Select * from
BookMark@ORCL_ZHANGJIAN
6.
创建复制组
在需要被复制的数据库上建立复制组,本例中是ThinkPad机器需要被复制,因此在此数据库上建立复制组。
以REPADMIN登录数据库ORCL
a)
创建复制组:
execute dbms_repcat.create_master_repgroup('rep_geosoc');
b)
在复制组里加入复制对象:
execute dbms_repcat.create_master_repobject(sname=>'geosoc',oname=>'bookmark',type=>'table',use_existing_object=>true,gname=>'rep_geosoc',copy_rows=>false);
c)
对复制对象产生复制支持:
execute dbms_repcat.generate_replication_support('geosoc','bookmark','table');
d)
添加主体复制节点:
execute dbms_repcat.add_master_database(gname=>'rep_geosoc',master=>'ORCL_ZHANGJIAN',use_existing_objects=>true,copy_rows=>false, propagation_mode => 'synchronous');
e)
在主体定义站点启动复制:
execute dbms_repcat.resume_master_activity('rep_geosoc',true);
7.
配置完成
Good
Luck!当你走到这里什么错误都没发生,恭喜你!也恭喜我,表示我的文档写的没有那么差,比较负责任的将网上的东西抄下来经过了一番整理!
但这里还是提醒两点:
1:同步的数据表BookMark必须具有主键!
2:同步前,两个数据表初始化是一样的,也就是说同步前,ZHANGJIAN机器上的BookMark表必须和ThinkPad表上的数据一致!可以采用以下的语句进行创建。
Insert Into
BookMark select * from BookMark@ORCL_THINKPAD.
下面你可以尽情的在ThinkPad机器上操作BookMark表,你会即时发现ZHANGJIAN机器上的BookMark表也随之跟着发生变化,Amazoning!
但是,你在ZHANGJIAN机器上操作BOOKMARK表,ThinkPad机器上却没什么变化!So Boring!