热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle主从同步、双向同步的配置

(本教程展示了Windows环境的oracle数据库主从同步,Linux环境一样也可以)(把主数据库obpm和从数据库orcl用实际的数据库名给替换掉)(配置主从同步后,再配置双向同步,可

(本教程展示了Windows环境的oracle数据库主从同步,Linux环境一样也可以)

(把主数据库obpm 和从数据库orcl 用实际的数据库名给替换掉)

配置主从同步后,再配置双向同步,可能会有表数据重叠,建议在配置双向同完成后,再导入表数据!)

备注:主、从数据库都用淡蓝色标记了,方便查找替换。

1.环境介绍

  主数据库SID : obpm
  操作系统 :    win 2003 
  IP地址   :  192.168.0.1 
  Global_name : 
  oracle version: 10.2.0.1 

  从数据库SID: orcl 
  操作系统 :    win 2003 
  IP地址   :  192.168.0.2 
  Global_name : 
  oracle version: 10.2.0.1 

 

2.在主/从数据库设置初始化参数(在主从数据库都执行以下操作)

以as sysdba身份,可在sqlplus中执行
  1)  以dba身份登录

sqlplus / as sysdba

  2)  设置参数

alter system set aq_tm_processes=2 scope=both;   ---启用对队列消息的时间监视 
alter system set global_names=true scope=both;   ---设置全局名称为true 
alter system set undo_retention=3600 scope=both;   --设置回滚段时间,默认是900 
alter system set streams_pool_size=25M scope=spfile; --sga设置为自动调整情况下不需设置该参数 

  3)重启动两个数据库,重启方式:

1.shutdown immediate
2.startup
3.$lsnrctl start(一般都会提示监听已经启动)
(windows服务中也可手动启动监听)

3.设置主数据库(obpm )为归档mode (以as sysdba身份,可在sqlplus中执行)

  1)  --查是否归档,如是归档,请忽略第3点 

 archive log list;

  2) 归档设置

 shutdown immediate;
 startup mount;
 alter database archivelog;
 alter system set LOG_ARCHIVE_DEST_1='LOCATION=C:\Ora\arc\';  ---设置归档目录 (执行此句后,在Windows系统文件夹中看看arc文件夹有没有创建成功,如果没有,则手动创建,在执行此语句)
 alter database open;
 alter system switch logfile; --相应目录检查是否生成arc文件 (如果提示数据库没开启,则先执行alter database open;)

 

4.主/从数据新建stream管理用户(在主从数据库都执行以下操作) 

 sqlplus / as sysdba;
 create tablespace tbs_stream datafile 'C:\Ora\tbs_stream01.dbf' size 2000m autoextend on maxsize unlimited segment space management auto; ---创建主环境的Stream专用表空间
 execute dbms_logmnr_d.set_tablespace('tbs_stream'); --将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间 
 create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp;  --创建用户 
 grant dba to strmadmin;  --直接给dba权限. 
(Drop旧的表空间方法:drop tablespace tbs_stream including contents;) 

5.主数据库网络环境设置 (就是在主数据库中增加一个从数据库的连接服务)

1)主数据库中添加从数据库的配置。(通过oracle图形工具net configuration manager配置,服务名为从数据库名orcl并测试与从数据库是否连通

2)新建连接orcl的dblink 

create public database link orcl connect to strmadmin IDENTIFIED BY strmadmin
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SID= orcl)
)
)';

测试dblink:select sysdate from dual@orcl;  --测试dblink是否有效 

 

6.从数据库网络环境设置 (就是在从数据库中增加一个主数据库的连接服务)

 1)从数据库中添加主数据库的配置。(通过oracle图形工具net configuration manager配置,服务名为主数据库名obpm,并测试与从数据库是否连通

 

2)新建连接obpm的dblink 

create public database link obpm connect to strmadmin IDENTIFIED BY strmadmin
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = obpm)
)
)';

测试dblink:select sysdate from dual@obpm;  --测试dblink是否有效

 

7.主数据库流队列创建 (可在plsql中的SQL中执行,登录名应为strmadmin

connect strmadmin/strmadmin  --以strmadmin身份,登录主数据库。 
begin
dbms_streams_adm.set_up_queue(queue_table => 'obpm_queue_table',queue_name => 'obpm_queue');
end;
/

 

8.从数据库流队列创建

connect strmadmin/strmadmin  --以strmadmin身份,登录从数据库。
begin
dbms_streams_adm.set_up_queue(queue_table => 'orcl_queue_table',queue_name => 'orcl_queue');
end;
/

  

9.主数据库创建捕获进程 

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'capture',
streams_name => 'capture_obpm',
queue_name => 'strmadmin.obpm_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/

  

10.从数据库实例化strmadmin用户 (win在CMD命令界面中执行)(这两个路径须一致)

exp strmadmin/strmadmin@obpm file='C:\Ora\crm.dmp' object_cOnsistent=y rows=y

在从数据库新建strmadmin 

imp strmadmin/strmadmin@orcl file='C:\Ora\crm.dmp' ignore=y commit=y streams_instantiation=y full=y

  

11.主数据库创建传播进程 

connect strmadmin/strmadmin --以strmadmin身份,登录主数据库。 
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'strmadmin',
streams_name => 'obpm_to_orcl',
source_queue_name => 'strmadmin.obpm_queue',
destination_queue_name => 'strmadmin.orcl_queue@orcl',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'obpm',
inclusion_rule => true);
end;
/

注意:此段语句执行可能会报错,如果报错,不用管,继续执行后面的。

修改propagation休眠时间为0,表示实时传播LCR,latency以秒为单位 

begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'obpm_queue',
destination => 'orcl',
latency => 0);
end;
/

 

12.从数据创建应用进程 

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'apply',
streams_name => 'apply_orcl',
queue_name => 'strmadmin.orcl_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'obpm',
inclusion_rule => true);
end;
/

  

13.启动Stream

1)从数据库启动应用进程 

connect strmadmin/strmadmin
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_orcl');
end;
/

2)主数据库启动捕获进程 

connect strmadmin/strmadmin
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_obpm');
end;
/

 

14.现在就可以进行测试了,在crm用户中作何一个测试表新增数据,删除数据,增加表,修改表结构,进行同步测试

 

备注:以上就是主从同步的所有配置,接下来配置双向同步

双向同步前请测试,主从单向同步是否成功!若成功,则下面进行双向同步,若不成功,则拉到下面的“问题检查解决方法处排查问题,主从同步成功后在进行双向同步!!!”

 

双向同步配置:

 

1.设置从数据库(orcl )为归档mode (以as sysdba身份,可在sqlplus中执行)

 

 1)  查是否归档,如是归档,请忽略第3点

archive log list;

 2)  归档设置

shutdown immediate; 
startup mount; 
alter database archivelog; 
alter system set LOG_ARCHIVE_DEST_1='LOCATION=C:\Ora\arc\';  ---设置归档目录 (执行此句后,在Windows系统文件夹中看看arc文件夹有没有创建成功,如果没有,则手动创建,在执行此语句)
alter database open;
alter system switch logfile; --相应目录检查是否生成arc文件 (如果提示数据库没开启,则先执行alter database open;)    

 

2.从数据库(orcl )创建捕获进程

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'capture',
streams_name => 'capture_orcl',
queue_name => 'strmadmin.orcl_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/

  

3.主数据库(obpm)实例化strmadmin用户 (win在CMD命令界面中执行)(这两个路径须一致)

exp strmadmin/strmadmin@orcl file='C:\Ora\crm.dmp' object_cOnsistent=y rows=y

在主数据库(obpm)新建strmadmin

imp strmadmin/strmadmin@obpm file='C:\Ora\crm.dmp' ignore=y commit=y streams_instantiation=y full=y

  

4.从数据库(orcl)创建传播进程

connect strmadmin/strmadmin --以strmadmin身份,登录从数据库。
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'strmadmin',
streams_name => 'orcl_to_obpm',
source_queue_name => 'strmadmin.orcl_queue',
destination_queue_name => 'strmadmin.obpm_queue@obpm',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'orcl',
inclusion_rule => true);
end;
/

修改propagation休眠时间为0,表示实时传播LCR,latency以秒为单位

begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'orcl_queue',
destination => 'obpm',
destination_queue => 'obpm_queue',
latency => 5);
end;
/

 

5.主数据(obpm)创建应用进程

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'apply',
streams_name => 'apply_obpm',
queue_name => 'strmadmin.obpm_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'orcl',
inclusion_rule => true);
end;
/

  

6.启动Stream

1)主数据库(obpm)启动应用进程

connect strmadmin/strmadmin
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_obpm');
end;
/

2)从数据库(orcl)启动捕获进程

connect strmadmin/strmadmin
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_orcl');
end;
/

 

以上就是双向同步的配置,双向同步完成后,测试是否成功,若不成功,则用下面的“‘主从同步’问题检查解决方法把主从数据库名称调换检查”

主从同步’问题检查解决方法:

 

15.停止stream

1)主数据库停止Capture进程

connect strmadmin/strmadmin
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_obpm');
end;
/

2)从数据库停止Apply进程

connect strmadmin/strmadmin
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_orcl');
end;
/

 

16.清除所有配置信息 

1)按上述方法停止capture,applya进程 
 2)分别在主从数据库执行以下语句

connect strmadmin/strmadmin 
exec DBMS_STREAMS_ADM.remove_streams_configuration();

  

17.如何知道捕捉(Capture)进程是否运行正常?

strmadmin身份,登录主数据库,执行如下语句:

SELECT CAPTURE_NAME,QUEUE_NAME,RULE_SET_NAME,NEGATIVE_RULE_SET_NAME,STATUS FROM DBA_CAPTURE;

  如果STATUS状态是ENABLED,表示Capture进程运行正常
  如果STATUS状态是DISABLED,表示Capture进程处于停止状态,只需重新启动即可
  如果STATUS状态是ABORTED,表示Capture进程非正常停止,查询相应的ERROR_NUMBER、ERROR_MESSAGE列可以得到详细的信息;同时,Oracle会在跟踪文件中记录该信息。

 

18. 如何知道Captured LCR是否有传播?

strmadmin身份,登录主数据库,执行如下语句:

SELECT CAPTURE_NAME, QUEUE_NAME, STATUS, CAPTURED_SCN, APPLIED_SCN FROM DBA_CAPTURE;

  如果APPLIED_SCN小于CAPTURED_SCN,则表示在主数据库一端,要么LCR没有被dequeue,要么Propagation进程尚未传播到从数据库一端。

  如果出现此情况,主库进程重启下,看看 APPLIED_SCN和CAPTURED_SCN是否相等,若相等,再重启下从库进程即可。

 

19.如何知道Appy进程是否运行正常

strmadmin身份,登录从数据库,执行如下语句:

SELECT apply_name, apply_captured, status FROM dba_apply; 

  如果STATUS状态是ENABLED,表示Apply进程运行正常; 
  如果STATUS状态是DISABLED,表示Apply进程处于停止状态,只需重新启动即可; 
  如果STATUS状态是ABORTED,表示Apply进程非正常停止,查询相应的ERROR_NUMBER、ERROR_MESSAGE列可以得到详细的信息; 
  同时,可以查询DBA_APPLY_ERROR视图,了解详细的Apply错误信息。 
  其它错误请跟踪alter.log

 

注意:

第一步:如果在重启操作系统,或者数据库后,出现主从数据库无法同步的情况时,请用17,18,,19步的方法查看;

第二步:在19步查询出现“ABORTED”时,请用SELECT apply_name, apply_captured, ERROR_NUMBER, ERROR_MESSAGE, status FROM dba_apply进行查询;

错误原因:

select error_message,error_creation_time from dba_apply_error order by error_creation_time desc;
select * from dba_apply_error order by error_creation_time desc;

会出现:

(用户没有实例化)

这时候需要重新在从数据库这边系统的cmd中执行实例化用户即可:

exp strmadmin/strmadmin@obpm file='C:\Ora\crm.dmp' object_cOnsistent=y rows=y 

第三步:

从数据库停止Apply进程

connect strmadmin/strmadmin
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_orcl');
end;
/

从数据库启动应用进程

connect strmadmin/strmadmin
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_orcl');
end;
/

 这样就解决了出现的问题。出现问题的原因是在第10步的实例化用户没成功(查看windows文件夹下有没有创建“crm.dmp”文件,如果没有创建,则说明实例化用户不成功,重启后则会出现此错误)

 

 以上就是Oracle主从同步和双向同步的配置,和常见问题的解决方法,一般来说只要按照上面步骤一步一步走,应该没有问题。

 注意的是sql语句后面粘贴复制经常会出现空格,有空格会报错,这点经常会不小心遇到。遇到问题不用担心,按照上面的方法进行排查即可,如果真的配错了,执行清除命令重新配置即可。

 


推荐阅读
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 本文深入解析了 FCEUX 源码,并详细介绍了两种制作 DEB 包的方法及其技术细节。首先,DEB 包通常由两部分组成:控制信息(位于 DEBIAN 目录)和安装内容(模拟目录)。通过解压现有的 DEB 包,可以查看其内部结构,进而理解其工作原理。具体操作包括将安装内容释放到指定目录中,以便进行进一步的修改和定制。此外,文章还探讨了如何修改现有的 DEB 包,以满足特定需求,提供了实用的步骤和技巧。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 利用 Python 管道实现父子进程间高效通信 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • CAS 机制下的无锁队列设计与实现 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 在使用Keil C51创建51单片机项目时,启动代码中包含多个关键元素,这些元素确保了系统的正确初始化和运行。主要包括复位向量、中断向量表、系统时钟配置、寄存器初始化以及主函数入口等。这些组件共同协作,为后续的应用程序执行提供稳定的基础。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
author-avatar
妖童J
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有