ORACLE10G数据库通过STREAM实现数据库双向同步

上传人:ZJ****3 文档编号:46845890 上传时间:2018-06-28 格式:PDF 页数:34 大小:184.13KB
返回 下载 相关 举报
ORACLE10G数据库通过STREAM实现数据库双向同步 _第1页
第1页 / 共34页
ORACLE10G数据库通过STREAM实现数据库双向同步 _第2页
第2页 / 共34页
ORACLE10G数据库通过STREAM实现数据库双向同步 _第3页
第3页 / 共34页
ORACLE10G数据库通过STREAM实现数据库双向同步 _第4页
第4页 / 共34页
ORACLE10G数据库通过STREAM实现数据库双向同步 _第5页
第5页 / 共34页
点击查看更多>>
资源描述

《ORACLE10G数据库通过STREAM实现数据库双向同步 》由会员分享,可在线阅读,更多相关《ORACLE10G数据库通过STREAM实现数据库双向同步 (34页珍藏版)》请在金锄头文库上搜索。

1、ORACLEORACLE 10G10G 数据库数据库 通过通过 STREAMSTREAM 实现数据库双向同步实现数据库双向同步1 1 STREAMSTREAM 概述概述Oracle 从 9i 开始推出 streams,用于提供灵活的复制和容灾解决方案。但是 9i 的 streams 配置相当的麻烦,少说也有十几个步骤,还容易出错。10gR2 则将整 个配置过程封装在几个简单的 PL/SQL 过程中,使得配置过程大大的简化。但是 实际的配置步骤还是一样的,Oracle 只是利用这些 PL/SQL 过程先生成对应的脚 本,然后再执行脚本进行配置。这个过程可以全自动完成,也可以先将脚本生成 到某个指

2、定的目录,我们根据需要修改脚本,然后再执行脚本进行配置,这样就 灵活又方便。Streams 的原理其实很简单,通过 logmnr 技术从 oracle 的 log 中解析出数据, 然后传递到目标库并应用,从而将源库的数据复制到目标库。当然,复制可以是 双向的,也可以是单向的。双向复制还需要考虑数据冲突的问题。而多源复制其 实是双向复制的基础上衍生而来的。整个的复制过程可以分成三个步骤:捕获(capture),传播(propagation)和应用 (apply),利用高级队列(advance queue)来将这三个步骤的数据串起来,通过在 步骤中定义不同的规则(rule)来控制需要复制的数据。复

3、制可以基于全库,基于 表空间,基于用户或者基于表,提供了相当大的灵活性。捕获进程可以直接在源库捕获日志,也可以先将日志(归档日志或者联机日志) 传递另外的库中进行捕获,这就是本地捕获(local capture)和异地捕获 (downstream capture)。对于异地捕获,根据是传递归档日志还是联机日志, 可 以分为普通的异地捕获和实时异地捕获。 日志的传递其实和 DataGuard 中是一样 的机制。Oracle11g 的 streams 还提供了同步捕获,这里暂时不涉及了。描述一下复制的简单过程如下:首先捕获进程从日志解析出数据,封装在一个个的逻辑改变记录(LCR:logical c

4、hange record)中,将这些 lcr 压进捕获队列中,然后传播进程从捕获队列取得 数据压进应用队列中, 最后应用进程从应用队列取得 LCR 并应用到目标库中。 LCR 可以分为 row LCR(DML 操作记录)和 DDL LCR(DDL 操作记录),所以 streams 复制 可以支持 DDL 操作的复制。Streams 复制需要先进行一次初始化建立基线,然后在此基础上复制增量数据。 对于全库的初始化,可以使用 RMAN。表空间复制的初始化可以使用 transport tablespace, 而对于用户复制和表复制, 则可以使用 exp/imp 或者 expdb/impdp。2 2

5、双向同步说明双向同步说明一般情况下, 只需要把数据库从源库同步到目标数据库, 原库做交易库, 目标库作为查询库。 但是也有这样的需求: 源库作为后台应用程序的数据库, 目标库作为前台应用程序的数据库, 双方都要操作数据库,数据库要求一致。这样需要数据库双向同步,而且同时把数据库变更 应用到对方数据库。3 3 部署步骤部署步骤构建 Oracle 双向流复制是一个十分复杂的过程,我写这个文档的目的是尽量有 条理地列出所需做的工作,帮助 DBA 更有效的建设流复制环境。1.以 scott 模式为复制示例,一般只要在创建数据库时选择了安装 sample schema,都会存在该 scott 模式;至少

6、保证源库中存在该 schema,以便可以初 始化到目标库中。2.在源和目标 2 个数据库中创建 strmadmin 流管理用户, 当然你也可以选用其他 名字。同时在 2 个库中都要创建 streams 使用的表空间,以便让 logmnr 使用它.3.13.1 打开归档模式打开归档模式如果数据库已经处于归档模式,则可以跳过此步骤。sqlplus “/as sysdbashutdown immediate;startup mount;alter database archivelog;alter database open;3.23.2 创建创建 streamstream 表空间和管理用户表空间和

7、管理用户CREATE TABLESPACE streams_tbs DATAFILE XXXXXX SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;/* 10g r2 中 logmnr 默认使用 SYSAUX 表空间*/exec DBMS_LOGMNR_D.SET_TABLESPACE (streams_tbs);/* 创建完表空间后,接着要创建 strmadmin 用户 */CREATE USER strmadmin IDENTIFIED BY strmadminDEFAULT TABLESPACE streams_tbsQUOTA UNLIM

8、ITED ON streams_tbs;GRANT DBA TO strmadmin;BEGINDBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(grantee = strmadmin,grant_privileges = true);END;/* 可以通过查询 dba_streams_administrator 视图检查用户是否正确授予流管 理权限 */SQL SELECT * FROM dba_streams_administrator;USERNAMELOC ACC- - -MACLEANYES YESSTRMADMINYES YES3.33.3 修改数据库

9、初始化参数修改数据库初始化参数3.在 2 边数据库中都需要设置合理的实例初始化参数,我们以 10g release2 为 例:参数名与推荐值:_job_queue_interval = 1描述:job 的队列的扫描参数,默认为 5,即 5s 扫描一次出于何种考虑:设置较小的_job_queue_interval 有利于 propagation 作业如何设置:alter system set “_job_queue_interval“=1 scope=spfile;/* 注意 scope=spfile 的参数都需要重启实例方能生效 */参数名与推荐值:COMPATIBLE= 10.2.0.0描述

10、:数据库版本兼容性参数,以前介绍过,不再展开出于何种考虑: 10g release2 的部分 Streams 新特性要求该参数至少为 10.2.0.0 或更高如何设置:只有从较低版本升级到 10g r2 的数据库需要设置该参数,alter system set compatible=“10.2.0.0“ scope=spfile;参数名与推荐值:GLOBAL_NAMES=true描述:指定是否要求 database link 名与数据库全局名一致,默认为 FALSE 也就 是不需要一致出于何种考虑:帮助我们准确识别 database link 和数据库的关系,避免误操作如何设置:alter s

11、ystem set global_names=true scope=spfile;参数名与推荐值:job_queue_processes4描述:指定了实例中 job 队列进程的数量(如 J000J999).出于何种考虑:该参数控制了实例中能够并行运行的 job 的最大值,应设一个大 于已配置的 propagations数量的值,同时也要考虑到可能还有其他数据库作业如何设置:alter system set job_queue_processes=15;参数名与推荐值:PARALLEL_MAX_SERVERS描述:指定了实例中最大并行进程的数量出于何种考虑:在 Streams 环境中,captu

12、re 进程和 apply 进程都会用到多个并行进程。设置该初始化参数为适当值(10*CPU#)以保证总是有足够的可用并行进程;每多一个 capture 或 apply 进程,则有必要为该参数+2 再加上加入的 capture 或 apply 进程的并行度 parallelism 参数。如何设置:alter system set PARALLEL_MAX_SERVERS=40;参数名与推荐值:REMOTE_ARCHIVE_ENABLE描述:指定是否将归档日志传送到远程目的地出于何种考虑:只有 downstream capture 时会用到,不展开参数名与推荐值:SGA_MAX_SIZE描述:设置

13、合理的 SGA 内存最大值出于何种考虑:常见参数,不展开参数名与推荐值:SGA_TARGET=0描述:disable 掉 10g 中的 Automatic Shared Memory Management.出于何种考虑:Oracle 推荐在 stream 环境中手动指定 streams_pool 和 shared_pool 的大小而不使用 10g 中的内存自动管理特性如何设置:alter system set sga_target=0;参数名与推荐值:调优 STREAMS_POOL_SIZE描述:为流池指定大小。流池包括了缓存的队列消息。此外,流池也会被用于并行 capture 和 apply

14、 的内部通信。建议参考 V$STREAMS_POOL_ADVICE 视图的信息判断最佳大小,避免 spill 溢出出于何种考虑:该参数可以动态修改。 若该参数归零则实例中 streams 相关的进程和作业都将无 法运行。流池的大小受到以下因素的影响:1.capture 进程的并行度,每增加一个 capture 进程有必要为流池增加 10MB 的 大小;此外当 capture 参数 PARALLELISM 大于 1 时,有必要为流池增加 10Mb*parallelism 的大小;举例来说, 若某 capture 进程的并行度 parallelism 设置为 3, 则需要为 Streams 池增加

15、 30Mb。2.apply 进程的并行度, 每增加一个 apply 进程有必要为 streams pool 增加 1MB;此外当 apply 进程的并行度大于 1 时,为 streams pool 增加 1Mb*parallelism 的大小;举例来说某apply进程的parallelism被设置为5, 则需要为streams池增加5Mb。3.Logical Change Records(LCRS)被存储在 buffered queues 缓存队列中;适当增加 Streams pool 大小以适应源库和目标库上数据复制的数据量;Oracle 建议在低负载的数据库上最小设置 Streams po

16、ol 为 256Mb,而在活跃度 高的 OLTP 环境中设置为 500Mb;通过 V$STREAMS_POOL_ADVISE 视图给出的建议进一步调整 Streams Pool 的大小到一个合理值以避免过多的缓存队列溢出到磁盘上。如何设置:select * from v$streams_pool_advice;/* 查询 v$streams_pool_advice 视图了解不同 streams_Pool_size 情况下的 estd_spill_time */alter system set streams_pool_size=500M;完成以上设置后建议重启实例以便让全部参数生效,2 边都要做。3.43.4 添加追加日志添加追加日志为 scott schema 下的对象创建追加日志(supplemental log),可以使用 dbms_capture_adm包的prepare_schema_instantiation 存储过程为指定模式创 建追加日志:NAMEprepare_schema_i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号