oracle Streams基础:如何捕获进程

前一章我们实践了一把streams同步单表的过程,看起来很简单是不是(如果你觉着复杂,那不是因为streams本身操作复杂,而是为了配置好streams前期的准备工作较复杂),事实上也确实很简单,由小能见大,我们从上述示例中应该也能看出streams的操作方式就是捕获(capture)->传播(propagation)->应用(apply),不管是表也好,schema也好,database也好,都是遵循这个操作过程,下面逐一介绍捕获传播和应用进程,俺尽可能做到清晰简单直白,但限于个人理解和自身水平,如描述有误请自行鉴别:))。另,本章文字描述较多,内容相对枯燥,阅读前要做好准备,如有心直接上手更高级的实践配置,可跳过本节,浏览第二部分。

捕获(Capture)

众所周知,数据库的修改操作均会被记入redolog(表钻牛角尖,俺指通常情况下),以便在发生错误时,能有途径修正。而Capture进程做为oracle的一个后台进程天生就拥有读取redolog的本领,因此它也就具有了捕获dml,dll修改操作的能力。

Capture进程将修改格式化为指定的格式存入message定义为LCRs并将其置入队列(queue)。由于运行中的capture进程自动基于其自己的规则捕获修改,因此又被称为:隐式捕获(implicit capture)。

提示:什么是LCR

capture进程捕获数据库的操作,例如表/schema甚至整个数据库的修改等。这些修改都会记入redo,而capture进程就是根据redolog分析数据库中的修改并格式化保存为message,这些message即被称为:logical change record (LCR)。捕获进程通过定义的rule来确定哪些修改会被捕获,这些被捕获的修改称为captured messages。

因此:Messages->LCRs->Captured message

LCRs也分两种:

A>.row LCR:包括DML操作产生的修改信息,注意由于单条dml sql语句也有可能触发多条记录的修改,因此一条dml修改操作也可能产生多条row LCR,另外对于单行中大字段类型的修改比如long,lob也可能产生多条row LCR;

每条rowLCR被封装成LCR$_ROW_RECORD的对象类型,包含下列属性:

n source_database_name:触发修改操作的数据库

n command_type:触发修改操作的命令类型,比如:INSERT, UPDATE, DELETE, LOB ERASE, LOB WRITE, or LOB TRIM。

n object_owner:对象属主

n object_name:对象名称

n Tag:标签,可用于追踪LCR

n transaction_id:触发修改的DML语句所属事务ID

n Scn:发生修改时的SCN(system change number )

n old_values:DML修改前的值,不过注意不同的dml操作产生值也不同,比如UPDATE or DELETE的旧值就是修改前的值,而对于INSERT则该列为空

n new_values:DML修改后的值,基于相同的原因,不同的dml操作也会产生不同的值,比如UPDATE or INSERT的值即修改后的值,而DELETE操作则该列为空

B>.DDL LCR:包括ddl操作产生的对象修改信息,DDL LCR包括下列的信息:

n source_database_name:同rowLCR

n command_type:同rowLCR

n object_owner:同rowLCR

n object_name:同rowLCR

n object_type:对象类型,比如TABLE/VIEW/PACKAGE

n ddl_text:执行的DDL语句

n logon_user:执行DDL语句的用户

n current_schema:执行DDL语句的schema

n base_table_owner:基表属主(如果有的话,当然通常没有,但是对于某些操作比如触发器触发的的修改,则基表即是触发表)

n base_table_name:基表名称,其它同上。

n tag:同rowLCR

n transaction_id:同rowLCR

n scn:同rowLCR

提示:

不管是rowLCRs或DDL LCRs都包括源数据库名称,为避免在propagation或apply时出现问题,ORACLE建议不要随便修改源数据库名称。

1、捕获方式

Capture进程即可以在本地捕获,即本地捕获进程(local capture process),也可以在远程其它数据库执行捕获,即下游捕获进程(downstream capture process),执行下载捕获的数据库也被称为downstream数据库,甚至还可以同时配置本地捕获和下游捕获。

本地捕获比较简单,是指capture进程运行于本地,如图所示:

下游捕获就要复杂一点点,因为它要涉及到将本地产生的redologs发送至远端执行捕获的数据库,说到发送redologs让回忆起了standby是吧,对,此处确实与standby有所关联,发送redologs应用的技术是一样的(正好趁此机会再复习一下),因此下游捕获也不得不被分成两类:

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-10-03 15:16:15

oracle Streams基础:如何捕获进程的相关文章

oracle Streams基础:传播进程

本节主要描述传播的工作流程,以及一些相关的特性(处理逻辑),内容同样枯燥,但三思认为有阅读的价值.在整个streams复制环境中,propagation进程负责将源端的修改队列复制到目标数据库. 1.LCR分段 Streams 通过队列分段传递messages.ANYDATA类型的队列能用来分段传递几乎所有类型的消息,这种类型的队列被定义为:ANADATA QUEUE.注意一个队列中只能存储一种指定类型的消息,STREAMS默认总是使用ANYDATA QUEUE. Streams 中两种消息类型

ORA-26663 Oracle Streams 在删除进程出错

ORA-26663 Oracle Streams 在删除进程出错 配置Streams时在删除进程出错ORA-26663: SQL> exec dbms_apply_adm.drop_apply('TARGET_APPLY_STREAM'); BEGIN dbms_apply_adm.drop_apply('TARGET_APPLY_STREAM'); END; * ERROR at line 1: ORA-26663: error queue for apply process ORA-2666

oracle streams技术详解

原文转自:http://blog.csdn.net/tianlesoftware/article/details/4759356 Stream 是Oracle 的消息队列(也叫Oracle Advanced Queue)技术的一种扩展应用. Oracle 的消息队列是通过发布/订阅的方式来解决事件管理.流复制(Stream replication)只是基于它的一个数据共享技术,也可以被用作一个可灵活定制的高可用性方案. 它可以实现两个数据库之间数据库级,schema级,Table级的数据同步,并

Oracle诊断案例----如何捕获问题SQL解决过度CPU消耗问题

oracle|解决|问题 Oracle诊断案例----如何捕获问题SQL解决过度CPU消耗问题 --使用vmstat,top等辅助解决Oracle数据库性能问题 Last Updated: Sunday, 2004-10-24 0:37 Eygle       问题描述:开发人员报告系统运行缓慢,影响用户访问. 1.登陆数据库主机 使用vmstat检查,发现CPU资源已经耗尽,大量任务位于运行队列: bash-2.03$ vmstat 3 procs memory page disk fault

Oracle EBS基础

Oracle EBS基础 Oracle EBS是甲骨文公司的应用产品,全称是Oracle 电子商务套件(E-Business Suit),是在原来ERP基础上的扩展,包括ERP(企业资源计划管理).HR(人力资源管理).CRM(客户关系管理)等等多种管理软件的集合,是无缝集成的一个管理套件.目前Oracle EBS已经发布R12(Release 12),是完全基于Web的企业级软件.作为企业管理软件,EBS的管理范围涵盖企业管理的方方面面:资产生命周期管理.客户关系管理(CRM).企业资源计划(

ORACLE查找并解除死锁进程

  ORACLE查找并解除死锁进程 1.查找死锁进程 select /*+RULE*/v$lock.sid,decode(v$lock.type,        'MR', 'Media Recovery',        'RT','Redo Thread',        'UN','User Name',        'TX', 'Transaction',        'TM', 'DML',        'UL', 'PL/SQL User Lock',        'DX',

oracle Streams实践:如何创建全库复制

正如前面介绍的那样,对于数据库级复制,oracle提供了两种方式: A .MAINTAIN_GLOBAL B .PRE_INSTANTIATION_SETUP.POST_INSTANTIATION_SETUP Maintain_global适用于中小型数据库创建,而PRE_INSTANTIATION_SETUP+POST_INSTANTIATION_SETUP适用于大型数据库的创建,这里我们演示通过 PRE_INSTANTIATION_SETUP 和POST_INSTANTIATION_SETU

oracle Streams实践:如何移除Streams复制环境

四. 清除Streams复制环境 一方面是为了方便后面的测试环境搭建,一方面也是因为10g中Streams复制环境的移除非常简单,因此将此做为本章最后一小节. 要移除整个复制环境非常简单,只需在源端目标端以STREAMS管理员帐号登陆,并分别执行 dbms_streams_adm.remove_streams_configuration ,如例 : JSSWEB> conn strmadmin/strmadmin Connected. JSSWEB > exec dbms_streams_ad

oracle Streams创建表空间级环境概述:创建和移除

二. 创建复制环境 创建非常简单,只需要在目标端执行下列过程即可(如果是有多个表空间要复制,只需要再添加t_names(2),t_names(3)...t_names(n)即可): JSSSTR> DECLARE 2 t_names DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET; 3 BEGIN 4 -- Tablespace names 5 t_names(1) := ¨WEBDATA¨; 6 DBMS_STREAMS_ADM.MAINTAIN_TTS(