Oracle流复制基本原理

本文整理自网络。

一、引言
   Oracle流是为提高数据库的高可用性而设计的在Oracle 9i及之前的版本这个功能被称为Advance Replication。Oracle流利用高级队列技术通过解析归档日志将归档日志解析成DDL 及DML 语句从而实现数据库之间的同步。这种技术可以将整个数据库、数据库中的对象复制到另一数据库中通过使用流的技术对归档日志的挖掘可以在对主系统没有任何压力的情况下实现对数据库对象级甚至整个数据库的同步。Oracle流对生产库的影响是非常小的从库可以是与主库不同的操作系统平台可以利用Oracle流复制几个从库从库可用于查询、报表、容灾等不同的功能。 Oracle10g与Oracle9i流复制技术比较 在Oracle9i中捕获进程只能在本地进行对日志进行挖掘如果Redo Log文件比较大或Redo Log切换较频繁日志挖掘对生产库的资源占用就较多在Oracle10g中捕获进程可以在远程数据库上进行归档日志挖掘归档日志通过日志传送服务传送。 Oracle9i环境下对于小的事务单机环境数据同步性能不错实时性也比较好。但是对于大事务处理Oracle9i Streams性能较差特别是当大量的LCR溢出到P表的情况下。在oracle9i RAC环境下 Capture进程不能直接从Redo Log中抓取变化必须通过Archive Log数据同步存在一定的延迟。对于Oracle10g由于内存管理等方面有了很大改上性能有所提高大事务的问题也可以解决在Oracle10g环境下Capture进程能直接从Redo Log中抓取变化数据同步的延迟也有所减少。 Oracle9i环境下对于小的事务单机环境Streams各个进程抗疲劳性不错稳定性良好。但是在oracle9i环境下Streams Capture进程稳定性差常有错误产生Streams Propagation进程抗疲劳性非常差.Oracle10g在此问题上有很大改上各个进程的稳定性良好Propagation进程抗疲劳性良好。

流复制的过程流主要由捕获、传输、应用三个主要进程实现数据的复制。
 1.捕获进程
捕捉进程从重做日志中捕获 DDL 和 DML的变化并且把它们封装成逻辑改变记录LCRs。缺省的捕捉机制可以立即获得用户定义的事件。 捕获进程格式化从redo log中捕获的改变进LCRs。一条LCR是一个特殊格式的描述数据库改变的消息。捕获进程捕获两种LCRs: row LCRs 和DDL LCRs.捕获LCR后捕获进程把包含LCR的消息塞进队列中。捕获进程基于我们定义的规则捕获或忽略改变。我们可以把规则放入肯定或否定规则集中。如果规则位于肯定规则集中捕获进程就会捕获相应改变否则忽略。 我们可以使用DBMS_STREAMS_ADM包或者DBMS_CAPTURE_ADM包创建捕获进程。使用DBMS_STREAMS_ADM包创建捕获进程比较简单因为它会自动配置很多选项。当我们使用DBMS_STREAMS_ADM包时规则集会被自动创建规则会自动加入规则集中。DBMS_CAPTURE_ADM包创建捕获进程使用上更加灵活我么可以给捕获进程配置一个或多个规则集。我们可以使用DBMS_STREAMS_ADM包或DBMS_RULE_ADM包增加规则到规则集中。当我们使用DBMS_STREAMS_ADM包的存储过程创建捕获进程时捕获进程捕获的对象会自动实例化。当我们使用DBMS_CAPTURE_ADM包的CREATE_CAPTURE存储过程创建捕获进程时我们要自己手动实例化捕获进程捕获的数据库对象。 捕获进程需要一个同主数据字典分开来的数据字典。这个数据字典被称为LogMiner数据字典。一个源数据库可以有超过一个LogMiner数据字典。如果一个源数据库有多个捕获进程那么捕获进程之间可以共享LogMiner数据字典也可以每个捕获进程拥有一个它自己的数据字典。如果LogMiner数据字典不存在那么捕获进程就在进程启动时自己从redo log中取出有用的信息组织起来。DBMS_CAPTURE_ADM.BUILD存储过程从redo log中抽取数据字典信息。这个存储过程在捕获进程启动之前必须至少运行一次。我们可以在redo log中多次执行建立数据字典信息。运行BUILD存储过程时从redo log抽取多少信息依赖于数据库中有多少数据库对象。BUILD存储过程会产生大量的redo数据所以我们要减少BUILD的使用次数。没必要时就不要运行它。一般情况下我们建立捕获进程时调用的DBMS_STREAMS_ADM或DBMS_CAPTURE_ADM包里的存储过程会帮我们自动建立LogMiner数据字典。捕获进程之所以需要LogMiner数据字典是因为捕获的改变里面非常可能没有相关的数据对象信息。而且这些改变可能已经发生了几个小时。
2.传输进程
    传输进程把 LCRs 存储到 SYS.AnyData 数据类型的队列中。LCRs 在不同数据库中的源和目的传输区域之间传播。传播使用工作队列来调度。 流使用队列来分段传播消息。一种ANYDATA类型的队列可以分段传播所有类型的消息。同时它被称为ANYDATA队列。一种type类型的队列可以储存特殊类型的消息。流客户端总是使用ANYDATA队列。 在流中两种类型的消息可以被封装进ANYDATA对象并且塞进ANYDATA队列中逻辑改变记录LCRS和用户消息。LCR时包含数据库对象改变信息的对象。用户消息时被用户程序建立的用户定义的消息。这两种类型的消息都可以用于信息共享。 在消息环境中ANYDATA队列和TYPED队列都可以用于分段传播特殊类型的消息。publishing程序可以把消息塞进队列中。subscribing程序可以把这些消息出队。 分段传递的消息可以被消化或传播。分段传递的消息可以被应用进程、消息客户端、用户程序消化。应用进程隐式的出队队列。但是消息客户端和用户程序时显式地出队队列。如果你配置了流传播用于传播或发送即使消息被消化了它仍然可以留在队列中。 队列中的消息可以在同一或不同数据库之间传播。传播出消息来的队列叫源队列接受消息的队列叫目标队列。在源和目标队列之间可以一对多多对一多对多。
 3.应用进程
    应用进程是专门从指定的队列中出队消息的oracle 后台进程。这些消息可以是逻辑改变记录LCRs或者是用户消息。一个应用进程既可以直接处理每条消息也可以把它传递给一个应用处理器。一个应用处理器是用户定义的被应用进程使用的用于定制的消息处理的存储过程。被应用进程出队的LCRs包括DML和DDL改变的结果集。应用进程可以把这些LCRs应用于目标数据库的数据库对象。被应用进程出队的用户塞进队消息是ANYDATA类型而且可以包含任何消息如LCR或用户消息。 应用进程应用基于规则的改变。每一个规则指定改变的规则评估为真的数据库对象和类型。我们可以把这些规则放置到肯定或否定规则集中。如果一个改变的规则评估为真规则在应用进程的肯定规则集中那么应用进程接受这些改变。如果一个改变的规则评估为真规则在应用进程的否定规则集中那么应用进程抛弃这些改变。如果应用进程既有否定又有肯定那么否定规则集优先评估。 应用进程是一种灵活的处理队列中的消息的机制。后续段将讨论应用进程可以应用的消息类型和有哪些方法可以应用它们。 我们可以创建、启动、改变、停止和删除应用进程我们可以定义应用进程规则控制应用进程出队哪些消息。消息被应用在应用用户的安全域中。应用用户出队所有满足应用进程规则集的消息。应用用户可以直接应用消息于数据库对象另外应用用户运行所有的基于规则的转变。应用用户也可以运行用户定义的应用处理器。 应用用户必须有足够的权限应用改变包括在规则集上的执行权限在定制的基于规则的转变幻术上的执行权限从应用进程队列出队消息的权限。一个应用进程只可以于一个用户关联一个用户可以于多个进程关联。
 Oracle流复制的配置
 1. 流配置前的准备工作
 a. 源库与目标库初始化参数的设置。
 b. 源库与目标库tnsnames.ora配置。
 c. 源库与目标库复制管理员的创建。
 d. 源库与目标库创建互连的数据链。必须确保双方的数据库链是可以连通。
 e. 源库与目标库必须处于归档模式
 f. 源库与目标库必须创建directory。在复制表空间时创建directory需要指定该表空间所在的目录。
 g. 创建测试用的表空间及用户
2. 流的配置过程
 a. 创建stream列队。
 b. 创建传播进程。
 c. 创建捕获进程。
 d. 实例化复制数据。
 e. 设置测试库上stream的Instantiation SCN。
 f. 创建应用进程。
 g. 创建启用进程。
 h. 创建停止进程。

 

流环境的管理工具

oracle提供了几款工具用于配置、管理、监控流环境。
 1. DBMS_STREAMS_ADM包

    DBMS_STREAMS_ADM包用于增加或删除捕获进程、传播、应用进程的规则。这个包也用于控制哪些消息被传播哪些消息出队。这个包包含创建队列和流数据字典的存储过程。这个包也包含用于配置和维护流复制环境的存储过程。它提供一种简单的方法创建流环境。
 2. DBMS_CAPTURE_ADM 包
    DBMS_CAPTURE_ADM用于启动、停止和配置捕获进程。

3.DBMS_PROPAGATION_ADM包
    DBMS_PROPAGATION_ADM包用于配置从源队列到目标队列的传播。
 4. DBMS_APPLY_ADM包

    DBMS_APPLY_ADM包用于启动、停止和配置应用进程。这个包提供存储过程用于配置应用处理器这个包提供子程序用于配置冲突检测、解决和错误处理。
5. DBMS_RULE_ADM 包
DBMS_RULE_ADM包用于创建和管理规则、规则集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值