`
gloryme
  • 浏览: 124519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 高级数据复制(Advanced Replication)

阅读更多

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 Management

    Oracle Advanced Replication Management不仅提供了强大的复制功能,还包含了一系列实用的管理和监控工具,极大地提高了企业级应用的数据可用性和业务连续性。通过对上述核心概念和技术要点的理解与实践,可以更好地...

    advanced_replication.pdf

    根据提供的文档信息,本文将对Oracle高级复制(Oracle Advanced Replication)进行深入解析,并探讨其在实际应用中的局限性、不同方法以及监控与故障排除等内容。 ### Oracle 高级复制概述 Oracle 高级复制是一种...

    oracle高级复制操作过程

    Oracle高级复制是Oracle数据库系统提供的一种复杂的数据同步技术,它允许在不同的数据库之间实时或近实时地复制数据。本教程将详细介绍如何进行Oracle高级复制的配置。 首先,我们需要准备两个运行Oracle数据库的...

    oracle高级复制文档

    我整理的oracle高级复制文档,包括advanced replication初步研究,Oracle 高级数据复制案例,Oracle数据库中高级复制的功能介绍,Oracle高级复制维护中要注意的方面,使用高级复制时清除Deferred Queue的办法

    Oracle Database Advanced Replication Management API Reference 11

    Oracle Database Advanced Replication Management API Reference 11g Release 2 (11.2) 是一本专为数据库管理员和开发人员设计的技术文档,旨在提供有关在Oracle数据库11g版本中管理高级复制功能的API(应用程序...

    oracle高级复制、同步

    Oracle 高级复制 (Advanced Replication) 是一种在多个站点间实现数据共享的技术,主要用于提高数据可用性、性能和减少网络负载等目的。本章节主要介绍了 Advanced Replication 的基本概念、应用场景以及一些关键...

    oracle 高级复制操作步骤,花了很久才研究透彻。

    ### Oracle高级复制操作详解 #### 一、判断数据库是否支持高级复制功能 为了确定Oracle数据库是否支持高级复制功能,可以...通过上述步骤,可以有效地完成Oracle高级复制的配置与测试,确保数据的一致性和高效传输。

    oracle-advanced-replication-.zip_operation

    Oracle高级复制技术是数据库管理中的一个关键特性,它允许数据在多个数据库之间实时或近实时地同步,以实现高可用性、灾难恢复和数据分发。在这个“Oracle Advanced Replication Operation”主题中,我们将深入探讨...

    Oracle Database Advanced Replication 11g Release 2 (11.2)-220

    Oracle Database Advanced Replication 11g Release 2 (11.2)还提供了详细的文档和用户指南,帮助管理员配置、管理和维护这些高级复制功能。这个版本不仅增强了数据复制的灵活性和可靠性,而且简化了管理,降低了...

    ORACLE数据库复制

    Oracle提供了三种复制技术:**高级复制(Advanced Replication)**、**流复制(Streams Replication)**和**备库(Dataguard)**。备库主要用于灾难恢复,这里不作详细讨论。高级复制基于触发器实现,适合复制单个表...

    基于Oracle数据复制技术的研究与应用.pdf

    Oracle高级复制(Advanced Replication)是Oracle提供的高级数据复制解决方案,它包括主键冲突检测、事务级复制和选择性复制等功能。通过高级复制,用户可以选择复制特定表、部分表或甚至是表的特定列,同时可以...

    oracle高级复制操作文档

    ### Oracle高级复制详解 #### 一、Oracle高级复制概述 ...然而,这一过程需要对Oracle数据库的深入理解和熟练掌握,确保所有复制节点之间数据的无缝同步和一致性,从而最大化Oracle高级复制的效益。

    oracle高级复制 - 多主复制

    在Oracle数据库环境中,高级复制(Advanced Replication)是一种强大的数据分发和同步技术,它可以实现跨网络、跨地域的数据共享和一致性。本篇文章将详细探讨“Oracle高级复制 - 多主复制”这一主题,包括双节点和...

    OracleDatabaseAdvancedReplication.pdf 英文原版

    Oracle Database Advanced Replication

    通过Oracle的流复制实现数据库之间的同步

    Oracle Streams作为Oracle数据库的一项重要特性,自Oracle9i版本开始引入,取代了之前的Advanced Replication,提供了一种更为强大、灵活的数据复制解决方案。下面将详细阐述Oracle Streams如何实现数据库间的同步,...

    Oracle10G多台服务器同步高级复制

    Oracle 10G的高级复制(Advanced Replication)是一种强大的数据复制机制,允许用户在多台服务器之间实时同步数据,从而构建分布式数据库系统。它支持多种复制场景,包括异步复制、快照复制和事务复制等,能够满足...

    利用高级复制功能和触发器实现数据复制.pdf

    其中,高级复制(Advanced Replication)是一项核心功能,它允许用户在分布式环境中复制数据,确保数据的一致性和可用性。 **1. Oracle 高级复制概述** Oracle 高级复制是一种异步的数据复制解决方案,它支持多种...

    oracle-b10732

    描述:Oracle Advanced Replication是Oracle数据库10g Release 1 (10.1)版本中的一个关键组件,旨在提供高级的数据复制功能,支持异步及同步复制模式,确保数据在多个数据库之间的高效、一致性和可靠性复制。...

Global site tag (gtag.js) - Google Analytics