by你好我是李白
4.4 SharePlex高可用复制
配置双向复制,停止备机端的export进程。
4.5 配置Change-History复制
4.5.1Change-History
? 创建Change-History配置文件 1) 2)
确保系统符合SharePlex要求以及已经按照规范安装了SharePlex软件。 在目标段创建与需要记录改变历史的源端表相同结构及表名的表,省略掉所有列上的所有约束。
注:目标记录改变历史表不能有主键约束,外键约束,唯一键,非空,检查约束,也不能在列上定义默认值。因为这个表记录的是改变历史,一行的值有可能有与其他行相同的键值。Post在记录改变历史的目标端不能参照完整性约束。 3) 4) 5)
在目标端禁用触发器trigger。
在目标表禁止除了SharePlex用户外所有用户的DML与DDL操作。 在源端,使用如下语法创建config文件。
Datasource:o.SID是源端Oracle实例的ORACLE_SID
Src_owner.table是一个完整合法的源端对象(owner.object)或者使用通配符指定的对象。
!cdc:指定目标端表为change-history表
tgt.owner.table是一个在目标段完整合法的change-history表或者使用通配符指定的表。 host是指目标系统
by你好我是李白
c.SID指定目标端的Oracle 实例 6)
(可选步骤)在目标端运行
product_dir/util/add_change_tracking_columns.sql脚本,添加默认名称的列定义。Post可以自动填入默认定义的列而不需要任何额外的配置,你也可以自定义脚本去匹配自己的要求。 注:
? 上述脚本只添加默认名称的列。如果添加可选择的列或者改变列的名称,
使用target命令添加自定义的列名称到Post配置。查看target命令默认以及可选的列定义,可以参考SharePlex Reference Guide
? 在一个change-history配置中,配置文件中捕捉到的添加新表DDL将自
动添加默认change-history列。
4.5.2其他的change-history配置选项
这部分内容描述如何自定义配置SharePlex记录改变历史。 a) 使用自定义列明记录改变历史
在目标端可以使用target命令自定义任何目标定义的列,target详细用法可以参考SharePlex Reference Guide。 b) 源端每一行改变都在目标端记录前镜像
可以通过在目标端设置SP_OPO_TRACK_PREIMAGE参数为U来在记录改变历史时记录改变的值同时新增一行记录前镜像值。这个参数将会使Post在源端表每行发生改变时在目标端记录改变历史表中插入两行:一行是改变后的镜像另一行为改变前的镜像。前镜像由改变后的值与改变量构成,除非源端启用了SP_OCT_USE_SUPP_KEYS参数。
当前镜像值被设置为保留,则默认列名为SHAREPLEX_SOURCE_OPERATION的列值将会有两条记录:1.更新前的值 2.更新后的值
注:保留前镜像的行不包含任何类型为log的字段,因为redo log不会记录log的前镜像。
by你好我是李白
可以取消设置SP_OPO_TRACK_PREIMAGE参数,然后通过使用target命令set cdc preimage选项将全局设定改为表级别。 c) 在记录历史表中包含操作行的所有列值
在目标端记录改变历史的表中记录源端修改的行的所有列的值,而不仅仅包含修改的列值,需要进行如下操作:
? 打开源端表基于所有列的最小附加日志。
示例语句:ALTER TABLE EMP ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
? 在源端设置参数SP_OCT_USE_SUPP_KEYS为1.
? 在源端设置参数SP_OCT_INCLUDE_UNCHANGED_COL 为1.
注:当同时启用SP_OCT_USE_SUPP_KEYS与SP_OPO_TRACK_PREIMAGE参数时,前镜像行将包含改变前行所有列值。 d) 在记录改变历史的复制中屏蔽掉操作类型
在目标端屏蔽掉源端DML操作类型,设置SP_OPO_TRACK_OPERATIONS参数为合适的值,使用斜杠/分开多个值。例如,维护改变历史表只记录insert与update,改变参数值为I/U。默认值为I/U/D,将记录所有的DML操作。 e) 设置规则与过滤器
可以通过使用target命令的set rule 选项去设置应用条件控制改变是否应用到目标记录改变历史表中。例如,你可以指定一个加入第一列与第三列改变了,然后应用操作并且丢弃在其他行上的任何改变,可以参考SharePlex Reference Guide。 f) 包含提交操作
默认的,提交记录不包含在记录改变历史表中。可以通过配置Post去插入每一次提交记录,设置SP_OPO_TRACK_COMMITS参数为1.
by你好我是李白
4.6 Oracle到Kafka复制
4.6.1概述
SharePlex的Post进程可以连接并写入到Kafka的broker中。数据被以XML记录并包含数据定义、操作类型以及被修改的列值写入。数据被以在源端发生的操作的连续系列写入,这些数据可以被以连续的顺序发送到目标数据库或者被外部程序消费。
4.6.2发送到Kafka说明
? SharePlex的Post进程扮演一个Kafka producer角色。一个SharePlex Post
进程只能写一个broker的默认partition 0的单一topic。想支持多个topics或者多个broker,需要使用命名Post队列的方式配置多个SharePlex Post进程。
? SharePlex的Post进程不会创建topics,必须在Kafka平台创建topic。 ? 出于考虑性能的原因,Post在发送到Kafka broker之前将消息集合到一批。
优化参数可用来控制批消息的大小。这可以用来平衡性能与延迟。 注:SharePlex到Kafka平台支持的平台,数据类型以及操作类型可以参考SharePlex的Release Notes文档。
4.6.3源端SharePlex配置
当复制数据到Kafka平台时,使用一下步骤配置源端数据库以及SharePlex。
4.6.4开启supplemental logging
在源端系统oracle数据库中,启用PK/UK最小附加日志。SharePlex必须有Oracle键信息在目标端创建合适键。
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY,UNIQUE) COLUMNS;
4.6.5设置SP_OCT_USE_SUPP_KEYS参数
在源端系统,设置SP_OCT_USE_SUPP_KEYS参数为1,。这个参数指导SharePlex使用Oracle最小附加日志列作为关键键值列当update或者delete一
by你好我是李白
行数据时。当数据库supplemental logging以及该参数都被设置之后,这保证了SharePlex可以总是构建键以及SharePlex键匹配Oracle的键。 注:可以通过查看Reference Guide官方文档查看更多关于SP_OCT_USE_SUPP_KEYS参数的信息。
4.6.6配置复制
在源端,创建SharePlex配置文件指定Capture的路由信息。配置文件的变化,需要根据定制的复制策略,以下显示为路由数据到Kafka的语法要求。
说明:
? SID为源端Oracle数据库ORACLE_SID
? Src_owner.table为源端表的拥有者以及表名
:tgt_owner.table为可选项以及指定目标端表的拥有者以及名字。Use if either component is different from that of the source table. 允许!kafka
与:tgt_owner.table之间没有空格。正确的关键字以及双引号中是大小写敏感,”MySchema”.”MyTable” ? host是目标系统的名字。
4.6.7目标端SharePlex配置
以下部分介绍配置SharePlex Post进程连接Kafka,你必须有一个正在运行的Kafka broker。 配置Post到Kafka: 1)创建Kafka topic
2)启动sp_cop(不要已经激活源端配置文件)