一步一步学Streams(7) 第一部分 基础之应用进程(中)

4. 应用DDL修改

4.1. APPLY 进程忽略的DDL语句

  APPLY 应用不支持下列类型的DDL语句:

  • ALTER MATERIALIZED VIEW
  • ALTER MATERIALIZED VIEW LOG
  • CREATE DATABASE LINK
  • CREATE SCHEMA AUTHORIZATION
  • CREATE MATERIALIZED VIEW
  • CREATE MATERIALIZED VIEW LOG
  • DROP DATABASE LINK
  • DROP MATERIALIZED VIEW
  • DROP MATERIALIZED VIEW LOG
  • RENAME

  如果apply进程在应用DDL LCR时发现不支持的操作,会自动忽略该LCR并记录一条信息到apply进程的trace文件。

注意:

Alter objectType objectName rename 语句是能够被apply应用支持的,比如alter table rename之类的。Snapshot是materialized view的同义词,因此snapshot相关的语句也不会被apply应用支持。
4.2. Streams 复制环境中的数据结构

  数据结构不仅包含数据文件、表空间、回滚段之类物理结构,还有比如表结构等等逻辑结构。捕获的DDL要在目标端完全应用,要么确保源和目标端的结构一致,要么在源端执行sql语句时不要包含目标端没有的对象。

  比如说,一项对表做修改的DDL要想在目标端成功应用,需要考虑下列诸项因素:

  • Create table 的存储参数相同
  • 如果指定了回滚段,表空间等项,则该表空间/回滚段必须确实存在于目标端。
  • 如果指定了分区信息,则分区在目标端也必须有效。

  注意DDL应用时,执行ddl的shcema必须已经存在于目标端数据库。

4.3. 系统产生的对象名称

  应尽可能避免系统产生的对象名称。因为源端捕获的实际还是ddl语句,这样在目标端应用后,如果是由系统自动生成名称,则源端和目标端名称有可能会不一致,这就有可能导致后续应用的一些问题。

  比如说源端执行这样的语句:

  CREATE TABLE tbl (n1 NUMBER NOT NULL);

  则系统会自动创建一个not null的约束,假设源端名称为定义为sys_000115,目标端应用create table语句时,可能为该约束创建一个非sys_000115的名字(毕竟源端与目标端并非一模一样),当你再执行删除该约束时:

  Alter table tbl drop constraint sys_000115;

  源端可以正确执行,但目标端在应用该语句时就有可能报找不到sys_000115对象的错误,正确的方式,应该是在创建时指定名称,比如:

  Create table tbl (n1 number constraint ck_tbl_nlnull not null);

4.4. CREATE TABLE AS SELECT 语句的执行

  应用create table as select语句时,apply进程执行如下两个步骤:

  • 目标端执行CREATE TABLE AS SELECT语句,不过只创建表并不生成数据。如果失败则apply进程返回错误信息,否则继续执行下一步。
  • 插入数据。注意这一步实际插入的记录可能会受到capture/propagation/apply进程的自定义规则影响,实际插入记录有可能与源端不同。

5. 触发器属性

  你可以通过DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY过程控制DML/DDL触发器的触发,该过程控制触发器是否只触发一次。

  如果该过程的fire once参数设置为true(默认情况下该参数即是true,你可以通过DBMS_DLL.IS_TRIGGER_FIRE_ONCE函数检查触发器的触发属性设置),下列情况不会触发触发器。

  • 相关更新由apply进程产生。
  • 执行DBMS_APPLY_ADM.EXECUTE_ERROR/EXECUTE_ALL_ERRORS过程产生的修改。

  举个例子,Schema:hr中创建触发器update_job_history,当employees表中job_id或department_id被更新时自动插入记录到job_history表,当前streams复制环境如下:

  • dbs1.net 源端capture进程同时捕获两张表的修改
  • Propagation 传播修改到目标端dbs2.net
  • Apply 进程在目标端应用修改
  • Update_job_history 触发器存在于源端和目标端。

  如果目标端dbs2.net中update_job_history触发属性不是fire once的话,实际操作如下:

  • 源端dbs1.net中employees.job_id被修改
  • Update_job_history 被触发,新记录插入到job_history表
  • 源端的capture进程同时捕获到employees和job_history的修改
  • 修改被传播到目标端dbs2.net
  • 目标端应用这两表的修改
  • 目标端应用employees表修改时update_job_history触发器再次被触发,又有记录被插入job_history表

  由上可知,job_history中实际是产生了重复记录了的,多数情况下我们可能是不希望产生这种状况,如果我们设置update_job_history的触发属性为fire once(或者在创建触发器时指定on schema子句),则dbs2.net端就不会再被触发了。

6. APPLY 进程支持的数据类型

  下列数据类型可被apply进程支持:

  • VARCHAR2
  • NVARCHAR2
  • NUMBER
  • LONG
  • DATE
  • BINARY_FLOAT
  • BINARY_DOUBLE
  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
  • TIMESTAMP WITH LOCAL TIME ZONE
  • INTERVAL YEAR TO MONTH
  • INTERVAL DAY TO SECOND
  • RAW
  • LONG RAW
  • CHAR
  • NCHAR
  • CLOB
  • NCLOB
  • BLOB
  • UROWID

  不支持的类型有:BFILE, ROWID, and user-defined type (including object types, REFs, varrays, nested tables, and Oracle-supplied types)等。另外,apply进程不支持transparent data加密过的数据,不管加密数据是什么类型。

7. APPLY 进程与受限连接

  如果以startup restrict模式启动数据库的话,apply进程就不会被启动。如果是以alter system enable restricted session语句将数据库置为restrict模式的话,对于当前正在运行的apply进程不会有影响,但不会再有新的apply进程启动,直到disable restricte。

8. APPLY 进程与RAC

  RAC 环境下apply进程是与实例绑定的,即各实例管理各自的apply进程,如果某个apply进程因某种原因不可用的话,队列ownership自动转换至集群中其它实例。同时apply进程也会随着队列转移至相应实例。另外,激活状态的apply进程所在实例不可用的话,apply进程会自动在新实例上启动,而未激活状态的apply进程所在实例不可用的话,apply进程在新实例中仍然保持未激活状态。

  数据字典DBA_QUEUE_TABLES中记录了队列对应的实例信息,另外在RAC环境中,apply coordinator进程,以及其对应的apply reader server和apply servers运行在相同实例上。

提示:

什么是 Reader Server :并行执行服务,capture进程的一部分,用来读取redolog并定位其范围。

什么是 Apply Servers :apply进程的一部分,包含一个或多个并行执行服务,用于应用LCRs或发送其至适当的apply handlers。

什么是 Apply Coordinator Process :做为apply进程的一部分同属oracle后台进程,用于从Reader Server中获取事务并发送给Apply Servers。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25088941/viewspace-681885/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25088941/viewspace-681885/

基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点) 基于STM32F103C8T6的循迹避障小车完整制作过程 由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程种也参考了很多大神分享的资料,学到很多的东西。但是资料都比较分散,有些东西也不好找,在这里就想把自己制作小车的一个整体过程记录分享一下,希望能够帮到你。 我自己也算是一个小白,之前有做过 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎... 阅读详情

相关推荐

core_analyzer分析c++程序内存占用

环境:centos; 进程:单进程多线程c++程序; 问题:1. 分析系统内存占用; 2. 分析ptmalloc内存空洞(bins上的空闲chunk的大小); 包括:1. 占用了很大内存的c++进程; 2. gcore(在进程不core dump的情况下生成core文件); 3. core_analyzer(分析gcor...

weixin_41644391的博客 4043

一步一步学Streams第一部分(7)基础之应用进程(中)

4.  应用DDL修改 4.1.  APPLY 进程忽略的DDL语句   APPLY 应用不支持下列类型的DDL语句: ALTER MATERIALIZED VIEWALTER MATERIALIZED VIEW LOGCREATE DATABASE LINKCREATE SCHEMA AUTHORIZATIONCREATE MATERIALIZED VIEWCREATE MATERIA

新路的专栏 636

操作不能完成 (错误 0x00000709) 共享打印机无法连接解决办法

环境:windows Server 2012 + Win10 客户端 问题:使用计算机名和IP地址可以正常连接打印机,但是使用另外的A记录或CN记录无法连接,报此错误 原因:这是打印服务DNS解析的问题 故障补充:假设你的服务器电脑名称叫print01,但是你又建了一条A记录或者CNname 叫PR01,就会发现使用额外的A记录或CN记录就无法连接 故障截图: 操作不能完成 (错误...

瑞哥的博客 3万+

mysql 一步一步学_一步一步学Streams

[ 2008-12-19 ] 第一部分(1)基础之概述篇实际上Streams不是一项新特性,但也不是一项很新的特性。从Oracle的9iR2版本开始推出,在10g中得到了一些增强(比如提供了downstream),其主要功能说白了就是复制数据。说到复制数据,你可能会想到oracle的其它一些同样实现数据复制功能的特性,比如说高级复制(Advanced Replication),Dataguard...

weixin_32666923的博客 183

一步一步学Streams:第一部分(8)基础之应用进程(下)

9.  APPLY 进程结构 你可以创建,修改,启动,停止,删除apply进程,定义应用规则控制队列出队。apply user按照rule sets出队消息,其必须拥有相关权限,通常直接授予dba权限。 9.1.  Apply 进程的组成部分   一个apply进程包含下列部分: 一个reader server出队消息。一个coordinator 进程从reader server中获取

新路的专栏 630

Excel VBA--按某一列拆分数据到多个文件

首先,将需要拆分的sheet命名为“明细”,接下来运行此代码,按提示操作即可。 在这里插入代码片 Sub chaifen() '定义变量类型 Dim sht, sh1, sh2 As Worksheet Dim k, i, j As Integer Dim irow As Integer Dim col As Integer Dim str As String '程序开始是要求输入按哪一列拆分数...

weixin_43650026的博客 5297

一步一步学Streams(8) 第一部分 基础之应用进程(下)

9. APPLY 进程结构 你可以创建,修改,启动,停止,删除apply进程,定义应用规则控制队列出队。applyuser按照rulesets出队消息,其必须拥有相关权限,通常直接授予dba权限。 9.1. Appl...

136

时间卷积网络(TCN):结构+pytorch代码

文章目录TCNTCN结构1-D FCN的结构因果卷积(Causal Convolutions)膨胀因果卷积(Dilated Causal Convolutions)膨胀非因果卷积(Dilated Non-Causal Convolutions)残差块结构pytorch代码讲解 TCN   TCN(Temporal Convolutional Network)是由Shaojie Bai et al....

Leon_winter的博客 11万+

《unix高级环境编程》进程间通信——基于 STREAMS 的管道

前面介绍的《管道进程间通信》是半双工管道,本届

关注校招求职,微信号:job_campus 2225

STREAMS

  STREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统V的终端接口,I/O多路转接中poll(轮询)函数的使用,以及基于STREAMS的管道和命名管道的实现。 流在用户进程和设备驱动程序之间提供了一条全双工通路。流无需和实际硬件设备直接会话,流也可以用来构造伪设备驱动程序。      STREAMS模块

Jasmine's Linux World 4060

PLC与变频器联动控制:从开关量、模拟量到通讯的接线与编程实战

在工业自动化系统中,电机调速控制是核心需求之一,其关键在于实现可编程逻辑控制器(PLC)与变频器之间的可靠联动。其基本原理是通过PLC输出控制信号,由变频器接收并驱动电机按设定速度运行。这项技术的核心价值在于实现电机的软启停、精确调速与节能控制,广泛应用于风机、水泵、传送带及精密张力控制等场景。其中,开关量控制以其接线简单、抗干扰能力强的特点,成为基础且可靠的方案;而模拟量控制则能实现无级平滑调速,满足更高精度的工艺要求。本文以西门子、三菱等主流品牌为例,深入解析了这两种主流控制方式的硬件接线、参数设置与梯

731

Nerdbank.Streams实战案例:构建高性能跨进程通信应用

Nerdbank.Streams是一个专为.NET平台设计的高性能流和管道库,专注于全双工进程内通信、WebSocket支持和多路复用功能。本文将通过实战案例,展示如何利用Nerdbank.Streams构建高效的跨进程通信应用,帮助开发者轻松实现进程间的数据传输与交互。 ## 🌟 Nerdbank.Streams核心功能解析 Nerdbank.Streams提供了一系列强大的流处理组件,以

gitblog_00595的博客 1056

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 4838

一步一步学Streams第一部分(5)基础之传播进程(下)

5、ANYDATA队列和用户消息   Streams 中ANYDATA队列中可以存放不同类型的用户消息,以ANYDATA做为载体,应用就可以将不同类型的消息放到一个队列里,应用也可以将其出队(或消息客户端/用户应用/apply进程)。   Streams 包括高级队列(Advanced Queuing)的特性,支持消息队列的所有标准特性,包括queues, publish and subscr

新路的专栏 725

一步一步学Streams第一部分(3)基础之捕获进程

前一章我们实践了一把streams同步单表的过程,看起来很简单是不是(如果你觉着复杂,那不是因为streams本身操作复杂,而是为了配置好streams前期的准备工作较复杂),事实上也确实很简单,由小能见大,我们从上述示例中应该也能看出streams的操作方式就是捕获(capture)->传播(propagation)->应用(apply),不管是表也好,schema也好,database也好,都

新路的专栏 743

DAVIS前言:事件相机资料调研

Event-Camera 资料集锦 1. 官网资料 假设了你买了事件相机,就可以在以下几个链接了解相关的参数和gui界面安装,如果不喜欢gui界面安装,可以第2节,安装相关的源码驱动。 DVS/DAVIS产品说明 等相关产品的软硬件介绍。 iniVation DV教程文档 给出在不同平台下的dvs-gui界面,可按照其说明进行相应的操作。 另外,Neuromorphic vision com...

Ian的博客 4157

一步一步学Streams(4) 第一部分 基础之传播进程(上)

本节主要描述传播的工作流程,以及一些相关的特性(处理逻辑),内容同样枯燥,但三思认为有阅读的价值。在整个streams复制环境中,propagation进程负责将源端的修改队列复制到目标数据库。 1、LCR分段   St...

cqbh2011的博客 178

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

一步一步学Streams:第二部分(14)实践之移除Streams复制环境

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

新路的专栏 1700

一步一步学Streams 第一部分(1)基础之概述篇

一、Streams概述   Oracle 的Streams提供了信息共享的一种方式,区别于其它数据共享的方式,Streams甚至允许不同类型的数据库之间传递数据,实现这点的根本在于Streams的复制流程,通过捕获,传播,应用三个步骤,将指定的信息传输到指定位置,在捕获消息,管理消息,以及在不同数据库或应用之间共享消息等方面提供了比传统解决方案更为强大的功能和扩展性。Streams特性适用于分布

新路的专栏 750

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

一步一步学Streams第一部分(4)基础之传播进程(上)

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

新路的专栏 710

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

一步一步学Streams(3) 第一部分 基础之捕获进程

前一章我们实践了一把streams同步单表的过程,看起来很简单是不是(如果你觉着复杂,那不是因为streams本身操作复杂,而是为了配置好streams前期的准备工作较复杂),事实上也确实很简单,由小能见大,我们从上述示例中应该...

cqbh2011的博客 226

一步一步学Streams(14) 第二部分 实践之移除Streams复制环境

四、 清除Streams复制环境   一方面是为了方便后面的测试环境搭建,一方面也是因为10g中Streams复制环境的移除非常简单,因此将此做为本章最后一小节。   要移除整个复制环境非常简单,只需在源端目标端以STR...

cqbh2011的博客 219

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

oracle 11g streams 应用进程使用示例

接前面

呆瓜呆呆的专栏 2443

一步一步学Streams(5) 第一部分 基础之传播进程(下)

5、ANYDATA队列和用户消息   Streams 中ANYDATA队列中可以存放不同类型的用户消息,以ANYDATA做为载体,应用就可以将不同类型的消息放到一个队列里,应用也可以将其出队(或消息客户端/用户应用/apply...

127

一步一步学Streams

一步一步学Streams http://space.itpub.net/7607759/viewspace-515847

我的Oracle DBA之路 332
上一篇: 一步一步学Streams(5) 第一部分 基础之传播进程(下)
下一篇: 一步一步学Streams(8) 第一部分 基础之应用进程(下)
cishenjian8771
博客等级 码龄10年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值