数据库同步解决方案.docx
文本预览下载声明
情景模拟
现在有两台服务器:
机器名:ThinkPad IP:90 Oracle SID:ORCL
机器名:DELL IP: 54 Oracle SID: ORCL
目的:将ThinkPad机器上用户Geosoc里面的BookMark表同步到DELL机器里面去。
高级复制
查看是否具备高级复制功能
首先,数据库要具备高级复制功能(用system身份登录数据库,查看v$option视图,如果其中Advanced?replication为TRUE,则支持高级复制功能;否则不支持)。
select * from v$option
设置相应参数
本例的先决条件:你需要设置好相应的参数,
job_queue_processes需要大于0,
global_name=true,
并且建立相应的db?link
alter?system?set?global_names=true?scope=both;
创建复制管理员账号
在两个数据库上分别创建复制管事员用户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?logs?GRANT?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;
更改数据库全局名
由于后面创建数据库链接(Database link)时需要用到数据库全局名,因此遇到同名的数据库全局名时需要更改其数据库名。
ThinkPad机器:改为 ORCL_THINKPAD
alter?database?rename?global_name?to?ORCL_THINKPAD;DELL机器:改为 ORCL_DELL
alter?database?rename?global_name?to?ORCL_THINKPAD;
在两个数据库上分别建立到对方的数据库链接
建立数据库链接的前提是两个数据库能互相访问,因此需要在数据库端先建立互相的连接本地命名。
由于开启了Global_names为True,因此链接名必须与Global名一致。
ThinkPad: 建立到DELL的本地命名为ORCL154。
create?public?database?link?ORCL_DELL?connect?to?REPADMIN?identified?by?orcl?using?ORCL154;
DELL:建立到ThinkPad的本地命名为ORCL190。
create?public?database?link?ORCL_THINKPAD?connect?to?REPADMIN?identified?by?orcl?using?ORCL190;
建立好链接后,可以在各自的机器上测试链接是否成功。
Select * from BookMark@ORCL_DELL
创建复制组
在需要被复制的数据库上建立复制组,本例中是ThinkPad机器需要被复制,因此在此数据库上建立复制组。
以REPADMIN登录数据库ORCL
创建复制组:
execute?dbms_repcat.create_master_repgroup(rep_geosoc);?
在复制组里加入复制对象:
execute?dbms_repcat.create_master_repobject(sname=geosoc,oname=bookmark,type=table,use_existing_object=true,gname=rep_geosoc,copy_rows=false);
对复制对象产生复制支持:
execute?dbms_repcat.
显示全部