oracle 高级复制 配置步骤
测试环境 linux as 4 + oracle 10.2.0.3
master : sfgame
replication_server: rep
检查安装好的数据库是否支持高级复制:
SQL> select value from v$option where parameter='Advanced replication';
VALUE
----------------------------------------------------------------
TRUE
确保返回的结果是TRUE,如果是FALSE 则表示需要重新安装oracle 的高级复制部件。
1,首先设置初始化参数
SQL> show parameter 。。查询下面参数的傎
SQL> alter system set 。。修改参数的值
--at sfgame
db_domain=sfgame.com
global_names=true
job_queue_processes=10 # 缺省值
open_links=4 # 缺省值
--at rep
db_domain=rep.com
global_names=true
job_queue_processes=10 # 缺省值
open_links=4 # 缺省值
2,配置tns使其能够相互访问
3,用system登录数据库
--at sfgame
alter database rename global_name to sfgame.com
--at rep
alter database rename global_name to to rep.com
--at sfgame
create public database link rep.com
connect to system identified by admini
USING '(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS= (PROTOCOL = TCP)(Host = 118.102.16.143 )(Port = 1521)))(CONNECT_DATA =(SID = zhuzhu)(SERVER = DEDICATED)))';
--创建一个公用的数据库链接
select * from global_name@rep.com; --验证是否正确
--at rep
create public database link sfgame.com using 'sfgame';
select * from global_name@sfgame.com;
4,用system登录,创建管理复制的用户repadmin
--both site
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;
5,用repadmin登录,在两个站点创建数据库的私有链接
--at sfgame
conn repadmin/repadmin123
create database link rep.com connect to repadmin identified by repadmin123;
select * from global_name@rep.com; -- 验证数据库连接
--at rep
conn repadmin/repadmin123
create database link sfgame.com connect to repadmin identified by repadmin123;
select * from global_name@sfgame.com; -- 验证数据库连接
6,目前我们的数据库中有相应的用户和表,所以就不用建立测试用户了,目前我们的数据库中的用户叫sfuser
--at sfgame
grant connect, resource to sfuser;
grant execute on sys.dbms_defer to sfuser;
create table tablename .... ----在两边的数据库都建立相同的表
--at rep
grant connect, resource to sfuser; ****注意必须有相同的表
grant execute on sys.dbms_defer to sfuser;
create table tablename ... ----在两边的数据库都建立相同的表
--注意如果数据库中有序列存在则要把序列分开存放
7,建立要复制的组,加入数据库对象,并产生数据库对象支持
--at sfgame
conn repadmin/repadmin123 --以repadmin身份登录
-----创建复制组 sfuser_mg (最好规范一下:username_mg,这个意思就是这个复制组都是sfuser用户的对象)
execute dbms_repcat.create_master_repgroup('sfuser_mg');
-----在复制组sfuser_mg中加入复制对象
execute dbms_repcat.create_master_repobject(sname=>'sfuser',oname=>'city', type=>'table',use_existing_object=>true,gname=>'sfuser_mg');
*******sname: 要复制的用户名称, oname:要复制的对象名称 , type:要复制的对象类型, use_existing_object 复制已经存在的数据库对象,gname:表示要加入到哪个复
制组中去
--对复制对象产生复制支持
execute dbms_repcat.generate_replication_support('sfuser','city','table');
--确认组和对象已经加入到数据库中
select gname, master, status from dba_repgroup;
select * from dba_repobject;
8,创建主复制节点
execute dbms_repcat.add_master_database (gname=>'sfuser_mg',master=>'rep.com',use_existing_objects=>true, copy_rows=>false, propagation_mode =>
'asynchronous');
***gname: 主复制组的名字
***master:加入主复制节点的另一个数据库
***use_existing_object true: 表示用主复制节点已经存在的数据库对象;
***copy_rows false:表示第一次开始复制时不用和主复制节点保持一致;
***propagation_mode 异步地执行;
--确认已经加入到复制队列中
select * from user_jobs;
9,使同步组的状态由停顿(quiesced )改为正常(normal)
execute dbms_repcat.resume_master_activity('sfuser_mg',true);
10,创建数据库的时间表 1分钟一次
----at sfgame
conn repadmin/repadmin123 -以repadmin的身份登录数据库
------推的时间
begin
dbms_defer_sys.schedule_push (destination=>'rep.com', interval=>'sysdate + 1/1440', next_date=>sysdate);
end;
/
-----清除队列中的顺序的时间
begin
dbms_defer_sys.schedule_purge (next_date => sysdate, interval => 'sysdate + 1/1440',delay_seconds => 0, rollback_segment => '');
end;
--at rep ******************如果复制是双向的那么就进行如下步骤
conn repadmin/repadmin123 -以repadmin的身份登录数据库
------推的时间
begin
dbms_defer_sys.schedule_push (destination=>'sfgame.com', interval=>'sysdate + 1/1440', next_date=>sysdate);
end;
/
-----清除队列中的顺序的时间
begin
dbms_defer_sys.schedule_purge (next_date => sysdate, interval => 'sysdate + 1/1440',delay_seconds => 0, rollback_segment => '');
end;
11,如果你想立刻看到添加或修改后数据库的记录的变化,可以在两边 repadmin 用户下找到 push 的 job_number,然后运行:
exec dbms_job.run(job_number);
##################异常处理##################################################################################
1. 检查复制工作正常否,可以在 repadmin 用户下查询user_jobs
select job,this_date,next_date,what, broken from user_jobs;
正常的状态有两种:
任务闲 —— this_date为空,next_date为当前时间后的一个时间值
任务忙 —— this_date不为空,next_date为当前时间后的一个时间值
异常状态也有两种:
任务死锁 —— next_date为当前时间前的一个时间值
任务死锁 —— next_date为非常大的一个时间值,例如:4001-01-01
这可能因为网络中断照成的死锁
解除死锁的办法:
$ps –ef|grep orale
找到死锁的刷新快照的进程号ora_snp*,用kill –9 命令删除此进程
然后进入 repadmin 用户运行命令:
exec dbms_job.run(job_number);
说明:job_number 为用 select job,this_date,next_date,what from user_jobs; 命令查出的job编号。
2,增加或是减少复制组的对象
1,停止主数据库节点的复制操作,使同步组的状态由正常(normal)改为停顿(quiesced )
conn repadmin/repadmin123 以repadmin身份登录数据库
execute dbms_repcat.suspend_master_activity (gname => 'sfuser_mg');
2,在复制组中加入数据库对象
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
gname => '"SFUSER_MG"',
type => 'TABLE',
oname => '"CITY2"',
sname => '"SFUSER"',
copy_rows => TRUE,
use_existing_object => TRUE);
END;
/
3,产生复制支持
execute dbms_repcat.generate_replication_support('sfuser','city2','table');
4, 执行ddl语句时需要注意不要直接在sqlplus中执行,要通过如下语句进行
BEGIN
DBMS_REPCAT.ALTER_MASTER_REPOBJECT(
sname => '"SFUSER"',
oname => '"CITY"',
type => 'TABLE',
ddl_text => 'ALTER TABLE SFUSER.CITY
MODIFY(ID NUMBER(10))');
END;
/
5,重新使同步组的状态由停顿(quiesced )改为正常(normal)。
execute dbms_repcat.resume_master_activity('scott_mg',false); --这一步可能会报错让你重新生成复制支持,你只要重新生成复制支持就ok了
分享到:
相关推荐
一本关于Oracle Advanced Replication的书
我整理的oracle高级复制文档,包括advanced replication初步研究,Oracle 高级数据复制案例,Oracle数据库中高级复制的功能介绍,Oracle高级复制维护中要注意的方面,使用高级复制时清除Deferred Queue的办法
高级复制(Advanced Replication) 流复制(Streams Replication) 备库(Dataguard) 备库的方式,就是数据库对数据库的备份方式,主要是解决容灾的,不讨论此话题。 流复制主要是利用ORACLE的归档日志,...
Oracle Database Advanced Replication Management API Reference 11g Release 2 (11.2)-642
oracle advanced replication operation
Oracle Database Advanced Replication 11g Release 2 (11.2)-220
advanced replication初步研究 oracle高级复制、同步
Oracle Database Advanced Replication
good white paper about oracle replication
Oracle高级复制学习资料, ORACLE高级复制初级研究PDF版,详细请下载后自己阅读,个人觉得作者写得比较详细Advanced.Replication.Research.by.Kamus
Advanced.Replication.Research.by.Kamus.pdf Oracle 高级复制
高级复制研究 for Oracle。学习Oracle 高级复制的好书。
说到复制数据,你可能会想到oracle的其它一些同样实现数据复制功能的特性,比如说高级复制(Advanced Replication),Dataguard等等。 在9iR2之前高级复制应用比较广泛,高级复制也分两种:多主复制和基于物化视图...
Oracle 10g Advanced Replication Management API Reference
oracle Advanced Replication
在9iR2中,oracle推出了一些令人兴奋的新功能,其中的logical standby database与stream replication在数据复制环境有着非常重要的意义,它们与advanced replication共同承担着企业环境中数据同步的重任。
Oracle自己的同步技术有DataGuard,Streams,Advanced Replication和今年刚收购的一款叫做GoldenGate的数据同步软件。第三方厂商的数据同步技术有Quest公司的SharePlex和DSG的RealSync。下面对这些技术逐一进行介绍...
DSI是Data Server Internals的缩写,是Oracle公司内部用来培训Oracle售后工程师使用的教材.由于某种原因流落江湖, 受到众多Oracle爱好者的追捧, 不过要是功力不到, 阅读反而无益. DSI3是Oracle 8系列的, DSI4是Oracle...
Pro Oracle GoldenGate for the DBA is aimed squarely at Oracle database administrators who find themselves involved in GoldenGate integration projects. The book provides the DBA view into such projects...
oracle dsi系列 DSI401 dump, crash and corruptions DSI401 advance support skill DSI401e Advanced Support Skill DSI404 SQL TUNNING DSI405 Performance Tuning DSI406 VLDB(Very Large) DSI407 Dataguard ...