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包用于创建和管理规则、规则集。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制 自动化代码检查 sonar 代码规范 阿里巴巴Java开发规范手册 UMPAY——编码规范 日志规范 异常规范 网络 协议 TCP/IP HTTP hession file HTTPS 负载均衡 容器 JBOSS tomcat resin jetty 容灾 日志框架 开源框架 slf4j 框架实现 log4j logback commong logging jdk logger 测试框架 测试框架 junit easymock testng mockito bug管理 禅道 jira 开发工具 编程工具 eclipse myeclipse idea vi VS webstorm sublime text 版本控制 svn git 项目管理 maven Nexus Jenkins 工作软件 反编译软件 office系列 下载器 adobe系列 记录软件 思维导图 office--Note 邮件管理 性能优化 分层优化 系统级别 中间件级别 JVM级别 代码级别 分段优化 前端 web应用 服务应用 资源池 数据库 大数据与nosql zookeeper hadoop hbase mongodb strom spark java语言 语言语法基础 异常 泛型 内部类 反射 序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 字符 字节 语言特性 继承 封装 多态 JVM 多线程与并发 GC机制 GC收集器类型 串行 CMS 并行 G1 算法 复制 标记清理 标记整理 分区 新生代 eden survivor 老年代(old区) 永久代(perm区) 版本变化 1.5 1.6 1.7 1.8 1.9 IO/NIO IO类型 同步阻塞 同步非阻塞 基于信号 多路复用 异步IO 类加载机制 双亲委派 OSGI 算法 搜索 二分 排序 选择 冒泡 插入 快速 归并 堆 桶 基数 常用算法 贪婪 回溯 剪枝 动态规划 数据挖掘算法 KMP算法 GZZ算法 HASH分桶 关联规则算法 APRORIVE算法 分布式 负载均衡 水平伸缩 集群 分片 Key-hash 异步 一致性hash 消峰 分库分表 锁 悲观锁 乐观锁 行级锁 分布式锁 分区排队 一致性 一致性算法 paxos zab nwr raft gossip 柔性事务(TCC) 一致性原理 CAP BASE 中间件 数据库 mysql 存储引擎 索引 锁 oracle db2 缓存 redis 数据结构 持久 复制 cas 单线程 memcache eacache Tair 消息队列 jms Queue Topic kafka 持久 复制 Stream Partition rocketMQ RabbitMQ ActiveMQ 常用开源框架 Spring Spring MVC Spring WebFlow spring tx aop ioc Struts ibatis Mybatis CAS Dubbo 工作能力 软实力 应急能力 创新能力 管理能力 分享能力 学习能力 沟通能力 解决问题能力 经历 技术攻关案例 程序开发案例 程序设计案例 设计 设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒转原则 接口隔离原则 迪米特原则 设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式 设计案例 UML 架构 系统架构能力 基本理论 扩展性设计 可用性设计 可靠性设计 一致性设计 负载均衡设计 过载保护设计 协议设计 二进制协议 文本协议 接入层架构设计 DNS轮询 动静态分离 静态化 反向代理 LVS F5 CDN 逻辑层架构设计 连接池 串行化技术 影子Master架构 批量写入 配置中心 去中心化 通讯机制 同步 RPC RMI 异步 MQ Cron 数据层架构设计 缓存优化 DAO&ORM; 双主架构 主从同步 读写分离 性能优化架构能力 代码级别 关联代码优化 cache对其 分支预测 copy on write 内联优化 系统优化 cache 延迟计算 数据预读 异步 轮询与通知 内存池 模块化 工程架构能力 开发语言 运维与监控 监控 系统监控 日志监控 量监控 接口监控 数据库监控 业务监控 性能监控 告警 日志 设计模式 数据结构与算法 各种工具
Oracle复制Oracle Stream Replication)是一种高级的数据复制技术,用于将数据实时地从一个Oracle数据库复制到另一个Oracle数据库。它是Oracle数据库提供的一种异步复制解决方案,可以在分布式环境中实现数据的实时同步和复制Oracle复制基于日志(Redo Log)来捕获和传输数据库的变更信息。它利用数据库的归档日志或在线重做日志中的变更记录,将这些变更记录作为(stream)传输到目标数据库,然后在目标数据库上重新应用这些变更,以保持源数据库和目标数据库之间的数据一致性。 Oracle复制具有以下特点: 1. 异步复制:源数据库和目标数据库之间的数据复制是异步进行的,即源数据库不需要等待目标数据库确认复制操作完成。这可以提高复制的效率和性能。 2. 实时同步:Oracle复制能够实现数据的实时同步,变更记录会尽可能快地传输到目标数据库,并在目标数据库上应用。 3. 灵活性:Oracle复制可以根据需求选择复制的对象(表、索引、触发器等),并且可以进行过滤、转换和转发等操作,以满足不同的业务需求。 4. 可靠性:Oracle复制提供了一些机制来确保数据的完整性和一致性,例如事务序列号(Transaction Sequence Number)和确认机制。 通过使用Oracle复制,用户可以在分布式环境中实现数据的实时复制和同步,支持各种应用场景,如数据备份、故障恢复、数据分发等。它是Oracle数据库中强大而灵活的复制解决方案之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值