当前位置: 首页 > 工具软件 > Streams > 使用案例 >

streams概述

黄和怡
2023-12-01

一、Stream概述
      Stream实际上是Oracle 的消息队列(也叫Oracle Advanced Queue)技术的一种扩展应用,Oracle 的消息队列是通过发布/订阅的方式来解决事件管理。从专业的角度来讲,在Stream 环境下, 复制的起点数据库叫作Source Database(源数据库), 复制的终点数据库叫作Target Database(目标数据库)。 在这两个数据库上都要创建一个队列,其中的Source Database上的是发送队列,而Target Database上的是接收队列。Source Database的所有操作都会被记录在日志中。 等配好Stream环境后,在Source Database上会有一个捕获进程(Capture Process)捕获Redo日志(该进程利用Logminer技术从日志中提取DDL,DML语句,这些语句用一种特殊的格式表达,叫作逻辑变更记录(Logical Change Record, LCR). 一个LCR对应一个原子的行变更,因此源数据库上的一个DML语句,可能对应若干个LCR记录。 这些LCR会保存到Sourece Database的本地发送队列中),然后传播进程(Propagation Process)通过网络把这些记录传播到Target Database的接收队列中,在Target Database上会有一个应用进程(Apply Process), 这个进程从本地的接收队列中取出LCR记录,然后在本地应用,实现数据同步。Stream的这种特性比较适用于分布式的企业应用、数据仓库、高可用解决方案等等。
流复制(Stream replication)只是基于它的一个数据共享技术,也可以被用作一个可灵活定制的高可用性方案。 它可以实现两个数据库之间数据库级,schema级,Table级的数据同步,并且这种同步可以是双向的。 Oracle Stream也是通过数据冗余来提高可用性,这一点和Data Guard 类似。Oracle 高级复制(Oracle advanced Replication) 和流复制(Stream Replication) 是从名称和功能上都是相似的两种技术。 但前者是基于触发器的,后者是基于日志挖掘(Logminer)技术。

二、DataGuard 和Stream区别
DataGuard有两种类型:physical standby和logical standby。 这两中standby 都有3个功能模块:日志传送,日志接收,日志恢复。两种standby在前两个模块中是一样的,都是通过LGWR或者ARCn进程发送日志,通过RFS进程接受日志。 区别在第三个模块:Physical Standby 使用的是Media Recovery技术直接在数据块级别进行恢复, 因此Physical Standby 能够做到两个数据库的完全同步, 没有数据类型限制。 Logical Standby实际是通过Logminer技术,把日志中的记录还原成SQL语句,然后通过Apply Engine 执行这些语句实现数据同步, 因此Logical Standby不能保证数据的完全一致。 比如Logical Standby 不支持某些数据类型,这一点在选择Logical Standby时必须要考虑. Logical Standby 不支持的数据类型可以从DBA_LOGSTDBY_UNSUPPORTED是不里查看.
SQL>SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED;
Stream 使用的是Logical Standby 第三个模块,也就是在Source Database一端,Capture 进程利用Logminer 技术把日志内容还原成LCR,然后发送到Target Database,而在Target database 一端, 也是通过Apply Engine 执行这些LCR。 因此Stream在使用上也有些限制条件。这些可以从视图ALL/DBA_STREAMS_NEWLY_SUPPORTED,ALL/DBA_STREAMS_UNSUPPORTED 查看stream复制支持与不支持的数据类型。
 SQL>SELECT table_name, reason FROM ALL_STREAMS_NEWLY_SUPPORTED;
 SQL>SELECT table_name, reason FROM DBA_STREAMS_NEWLY_SUPPORTED;
 
 SQL>SELECT table_name, reason FROM DBA_STREAMS_UNSUPPORTED;
 SQL>SELECT table_name, reason FROM ALL_STREAMS_UNSUPPORTED;

下面列举的是他们主要区别:
Stream                                                                 DataGuard
主要目的是数据共享                                                 主要目的是灾难恢复和高可用性
可以多方向同步                                                       只能是单向,从Primary--> Standby
数据粒度可以是数据库,Schema,Table三个级别         只有数据库级别
支持异种平台的同步(Heterogeneous Platforms)         必须同种平台 (Homogeneous Platforms)
参与复制的每个数据库可以读写                                  只有Primary可以读写,Standby 只读
支持Oracle 和非Oracle 数据库间的同步                      只能是Oracle数据库间

 

 

在网上看到了一篇关于streams的概述,比我自己总结的更详细,就转过来了

原文地址:http://blog.csdn.net/passion_wang/article/details/6336505

 类似资料: