Quest SharePlex for Oracle介绍
Quest SharePlex for Oracle介绍议题
SharePlex安装配置
Shareplex复制链路配置
Shareplex相关进程运行原理
Shareplex优势和劣势
Shareplex竞争对比
SharePlex安装配置
安装主要步骤概述
安装之前的要求
安装第一步
安装第二步
Shareplex内部表
vardir目录
安装主要步骤概述
安装软件
执行数据库配置
-配置复制相关的Oracle实例
安装必须条件
正确的版本
目前最新是7.6版,POC和正式实施均使用7.0/7.5
7.5最主要增加了AUTOADD功能
7.6变成64位软件版本
打开数据库PK/UI级附加日志,9i RAC每个节点均打开(不需要打开表级附加日志);打开归档模式; RAC的每个节点可以访问到其他节点的归档文件
只安装在RAC的一个节点,需要配置浮动IP和安装在存储卷上,且配置成资源组可切换
RAC环境下,增加tnsnames alia, 且该条Load Balance必须为OFF,同时配置到oratab文件
Hosts文件中加入所有复制主机的解析;如果是RAC,需要设置SP_SYS_HOST_NAME环境变量,对应虚拟主机名,安装之前export该环境变量
源和目标都需要一个表空间给shareplex用户,512MB
第一步(软件安装及生成第一条复制链路目录)
生成prodir目录和vardir目录
Prodir目录是指软件产品目录
Vardir目录复制链路相关目录(产生了第一条复制链路目录,即一个shareplex实例目录)多个SharePlex实例可以共用相同的prod 目录
Shareplex一条复制链路的源端和目标端使用端口必须保持一致
输入license(shareplex最新策略已经不捆绑CPU和主机)
第二步(数据库配置)
ora_setup 是prod/bin 目录下的可执行文件,每次配置是针对一条复制链路,可以在线配置
它创建了一个数据库用户包括内部的对象以及需要的表和视图
以SharePlex 管理用户执行
如有多个SharePlex实例则要求设置环境变量 SP_SYS_VARDIR = <your vardir>
在所有复制相关的数据库上都需要执行
SharePlex 内部表
SHAREPLEX_ACTID Each row in this table corresponds to a configuration activation. It also contains the last checkpoint from the redo log.
SHAREPLEX_ACT_MARKER is used to communicate between threads in a multi-threaded activation process.
SHAREPLEX_COMMAND controls the flush, purge config, and abort config commands.
SHAREPLEX_CONFIG A new row is inserted into this table whenever a new configuration is activated.
SHAREPLEX_DATAEQUATOR maintains information when the compare command has been issued.
SHAREPLEX_DATAEQUATOR_RESULTS maintains information when the compare command has been issued
SHAREPLEX_LOBMAP records information about LOBs when they are being replicated.
SHAREPLEX_LOGLIST tracks the movement of SharePlex through the redo logs
SHAREPLEX_MARKER is updated whenever SharePlex generates a read-consistency marker, which is used for key caching.
SHAREPLEX_OBJMAP contains the object ID records for each configuration activation.
SHAREPLEX_OOS_KEYS
SHAREPLEX_OOS_MASTER
SHAREPLEX_PARTITION contains the partition schemes for horizontally partitioned replication.
SHAREPLEX_ROWIDMAP maintains chained-row information.
SHAREPLEX_ROWIDMAP_VIEW of chained row details.
SHAREPLEX_TRANS is used by the Post process to keep track of the state of the transactions it is processing.
SHAREPLEX_WILDCARD table
Vardir 目录
SharePlex variable-data 目录 (vardir):
SP_SYS_VARDIR
/config 存放配置文件
/data 包含状态数据库,激活信息,用户定义的参数设置
/db 包含每个activation的配置数据库
/dump 包含core dump文件
/log 包含日志文件
/rim 包含队列文件
/save 包含active 和 inactive 配置文件的相关信息
/state 包含SharePlex状态相关信息,如对象和序列cache等
Shareplex复制链路配置
config文件
激活config文件
数据初始化
Config文件
配置文件是一个文本文件,只需在源端进行配置,激活配置文件成功后,即完成复制链路的搭建,无需单独配置每个进程
定义:
源数据库名
每个表或序列要复制到哪个主机的哪个数据库
要复制的表和序列
对应的目标对象名
通配符定义方式
7.5开始支持autoadd table功能,但必须是已经在复制链路的schema下的table的autoadd
可以支持named queue(即多进程方式)方式,提高性能
配置文件可以被active 或 deactive
一个激活的配置文件指定一个数据源
每个SharePlex实例只能有一个激活的配置文件
每个激活的配置文件可以有多个目标主机和数据库
每个export queue最多可对应20个目标主机
Config文件样例
Template:
Datasource: o.sourceSID
#Source Object Target Object Routing
Src_owner.object tgt_owner.object targetsys@o.targSID
Sample Config File:
Datasource: o.class
#Source Object Target Object Routing
expand jim.% not (tmp%,emp) jim.% sysA:q1@o.fin
jane.sales jane.sales sysA@o.fin1+sysB@o.fin2
mary.seq1 mary.seq1 sysA:q2@o.fin
激活过程中需要锁表,防止长事物未释放,导致数据不一致(加live参数,被动方式,不会影响业务)
7.6可以支持不锁表激活复制链路(如何保证长事物未知?)
分配一个Activation ID
记录在内部表中
Lock 部分或全部表
依赖于激活的方式
创建对象cache
表明和objectid映射关系
列名、列长、列的类型、非空约束、键值
在复制链路中放配置change marker
通知主进程创建新的一套复制进程和队列
Unlock 表
数据初始化
源和目标启动shareplex主进程
设置相关性能优化参数,确认是否开启DDL复制
准备好源端config文件,校验复制对象是否支持
停止数据追加进程
源端激活(业务空闲时),激活成功后源端和目标端进程会自动启动(已经开始源端的数据捕获)
取源端scn号
源端exp/expdp(使用flashback_scn)或rman(recover until change SCN)
完成目标数据导入后,目标执行reconcile queue <targetqueuename> scn <source scn>,将目标队列无用消息清除
目标disable trigger/外键/job
目标启动post进程,开始增量数据追加
Shareplex进程运行说明
capture进程
read进程
post进程
queue文件
compare和copy
DDL复制的开关
Read进程
个人理解
由2个阶段组成,正常情况下只需pass1阶段(从前面的queue中获取数据,加路由信息,向后续队列发送),无需pass2阶段(回库查询键值,同时pass1 build key cache).
如果PK值发生变化,需要回库查询,发生pass2
如果有多个唯一索引时,shareplex用的键和oracle写入日志的键值不一样,需要回库查询,发生pass2
无PK或UI时,有时候会有列可能没有写入日志,也要发生pass2
如果capture进程滞后在线日志,可能会发生pass1堵塞,知道读到当前日志,确认是否有键值变化
Post进程
一个事物是在一个sql thread中处理
遇到commit,会自动转成串行,等待commit完成后,main thread才会发送新的消息到sql thread,由syncop counter来控制(收到commit加1,commit完成后-1,归0后发送新消息)
DDL语句需要等现有sql thread中消息处理完成后才能由main thread发送,处理过程同commit;
对于rollback,遇到第一个rollback消息后,对应的sql thread停止处理消息,等到下一个forward消息或commit收到后,判断需要回滚的消息数,然后直接从队列中删除(可能连续收到多个rollback操作)
Queue队列文件
Queues 中的数据来自共享内存、队列文件和数据库
在进程间握手以确认收到数据,以及执行数据管理
队列中数据只有被下一个进程确认已写入才会被清除
如果在几秒内没有得到接收进程的确认,数据会被写到磁盘
性能:通过内存管道传送比在数据库表中排队更快
容错:在复制链路传输中断时,数据会写到磁盘上
缺点:
无法设置保留一段时间
和IP地址有绑定
Compare在线比较和修复
Shareplex在目标端提交数据时,缺省会去校验字段的前镜像,如果字段值不符合,会自动报出表数据不同步(但是如果表有PK,不是去校验所有字段,无PK/UI会校验所有字段的前镜像)
当发生数据不同步后,可以使用compare指令进行在线的比较和修复,可以做单个分区或范围数据的比较和修复。
Compare能力是有范围的,基本可以做到10GB以下表的全字段比较和修复,大于50GB一般会失败;大表即使成功,时间也会很长。
Compare是进行一致性比较,会进行数据排序后计算每一条记录hash值对比,如果hash不一致,则对比每一个列值,生成目标端的修复sql脚本进行修复
Compare过程中会有几次锁表动作,回滚段(一致性比对)、临时段开销大(需要排序)
Copy命令进行单表数据修复
Compare适用于小表的修复,如果大表不一致,需要使用copy命令
copy指令本质上就是数据的exp/imp
- 目前只能调用exp/imp,属于效率不高
- 首先在复制队列中插入一致点,源端处理到该点时,自动停止目标段post进程,然后truncate目标表数据,源端进行该点的一致性导出和导入(通过内存管道传输),完成导入后,自动启动目标post进程,追增量数据
操作简单,有一定适用范围,如果仍旧失败,则要锁表进行单表初始化
DDL参数控制
SP_OCT_REPLICATE_DDL
控制目前在复制队列中表是否支持alter和truncate语句的复制
SP_OCT_REPLICATE_ALL_DDL
打开全库DDL复制
Shareplex优势
严格的事物一致性保证,不做拆分或合并
复制过程中自动检验数据不一致问题,在线对比和修复工具,单表同步工具
DDL复制不依赖于触发器,LOB字段无需回库查询
事物开始时即复制到目标端,大事务延迟较小
支持双向复制
容灾切换简单、快速,增量的反向回切
运行相对稳定(当然和用户的操作习惯、应用系统有很大关系)
某些功能配置灵活,如:忽略事物的复制、延迟复制等
Email、SNMP等方式报警
图形监控界面
Shareplex劣势
个人理解:
需要和IP和主机名都有绑定(7.5版本之前,如果需要修改,需要停源端业务)
DDL配置不灵活,不能做schema、表空间等映射,可配置选项太少
对于长交易的处理和大事务的回滚的复制稳定性还不够,进程会发生进程coredump
不能只复制commit事物
无数据压缩和加密功能
单表的compare能力太弱,不是有效的单表修复工具
激活过程和compare过程一定要锁表,如果表多,激活链路时间较长
如果未捕获的归档日志被删除且无法retore,需要重新初始化
7.5版本还不稳定,很多数据不一致的情况无法分析
对trigger复制的支持功能不完善,不能复制create trigger
配置没有ggs灵活,数据转换非常困难
一定要部署在生产数据库上;在HP平台上,有时对资源开销很高,越空闲的系统在日志切换频繁时越高
Shareplex的队列文件是固定二进制格式,无法实现formatascii/formatsql格式,有些客户可能有类似需求
没有reverse功能,不能恢复误操作,仅能复制源端的flashbackup操作
其他一些技术细节没有ggs做得好:比如:HANDLETPKUPDATE执行update set PK=PK+1时,目标可以完成复制,shareplex做不到
Shareplex Vs GG
原理上的基本差异
SharePlex在事务开始即开始复制
传送的是 Messages
GoldenGate在事务结束后才开始复制
传送的是 文件
SharePlex GoldenGate
小事务的复制① 事务在目标端的执行顺序与源端一致 为提高效率会自动把多个小事务合并为1个事务、减少commit
大事务的复制② 大事务的复制性能与正常操作复制性能没有明显区别,不会产生较大的数据复制延迟 大事务复制性能差。为提高效率对大表进行划分范围处理,可以采用多个抽取进程并行处理,会拆分事务、增加commit
在线初始化同步 可严格保证在线初始化同步的数据一致性 无法保证在线初始化同步的数据一致性(不锁表),会要求停机进行初始化同步
①② GoldenGate可以采用单通道的复制方式,这样不会改变事务的一致性。但采用这种方式时的复制性能非常差,所以GoldenGate在实际使用中都不会采用单通道的方式。在浙江移动SharePlex与GoldenGate的对比测试中,压力情况下SharePlex速度为3500笔/秒,而GoldenGate的单通道速度大概是300-400笔/秒。
数据一致性保障
SharePlex GoldenGate
自动校验 对复制过程中的数据自动进行校验,可提前发现数据不一致隐患 无此功能
在线比对 具有在线比对功能,并可对不一致数据进行在线修复,可只比对表分区或部分数据 有比对工具,但无法在线比对。是复制功能外的产品,需单装在另一台机器上,需单独付费
在线单表同步 具有在线单表同步功能,通过一个命令即可实现在线的单表同步 需完全按照初始化同步的方式进行单表同步
安装、维护
SharePlex GoldenGate
安装配置 操作简单 操作复杂
数据库回收站 支持 不支持
新增表 可自动添加 操作复杂
超过32个字段的无主键表 不需额外处理 9i需要增加配置补充日志组
DDL复制 可从redo中获取 需在数据库中创建trigger捕获,增加数据库负担
LOB字段和UDT类型数据 可从redo中获取 需在数据库中查询,如果系统繁忙,可能会遇到ora-1555错误而不能继续
报警方式 图形监控、SNMP、Email 不支持SNMP、Email方式报警,图形监控需单独付费
特殊表名 支持 不支持数字打头或大小写敏感的表名
其他功能 按事务忽略复制 按用户忽略复制 延迟复制
Shareplex Vs DSG realsync
原理上的基本差异
SharePlex在事务开始即开始复制
传送的是Messages
RealSync在事务结束后才开始复制
传送的是文件
RealSync通过rowid map建立数据的对应关系
原理差异导致不同
SharePlex RealSync
大事务的复制 大事务的复制性能与正常操作复制性能没有明显区别,不会产生较大的数据复制延迟 大事务复制性能差。为提高效率会自动拆分事务,在目标端并发提交,增加commit,改变了事务的一致性
Rowid改变 Rowid改变不会影响数据不一致 如果源端出现rowid记录不准确或发生变化而没有捕捉到的情况,数据一致性就不能充分保证。 如果目标端有任何造成rowid改变的操作(如整理碎片等)都会造成数据不一致
双向复制 完全支持数据的双向复制,在国内外均有运行数年以上的成功案例。 由于产品原理的限制,目标端数据无法进行修改,否则将出现数据不一致错误,由于目标数据必须由RealSync同步过去,因此无法实现数据的双向复制(同一张表)。
数据一致性保障
SharePlex RealSync
自动校验 对复制过程中的数据自动进行校验,可提前发现数据不一致隐患 无此功能
在线比对 具有在线比对功能,并可对不一致数据进行在线修复,可只比对表分区或部分数据 比对发现不一致数据只能重新同步该表,无法只修复不一致的数据
容灾切换 支持从容灾数据库到生产数据库的反向复制,可将接管后容灾数据库上的变化复制回生产数据库,操作极其简单,不需要重新初始化同步。 无法提供迅速回切功能,需要把生产系统数据库全部清空,再用容灾数据库进行重新初始化同步;切换回生产后还需要再进行一次初始化同步,才能恢复之前复制状态,切换成本高,风险较大。 (注:目前DSG号称可以实现反向增量复制,为实现这个目的需要维护双向的Rowid map,这种方法仅出现在测试场景,但在实际生产环境中的成熟性、易用性有待检验)
安装、维护
SharePlex RealSync
特殊数据类型 支持IOT、XML等 不支持IOT、XML、UDT……
报警方式 图形监控、SNMP、Email 不支持SNMP方式报警
其他功能 按事务忽略复制 按用户忽略复制 延迟复制
服务 技术支持网站:support.quest.com,可查找问题、提交问题、下载软件补丁等。 Quest有专门的Shareplex全球技术支持中心,为全球用户提供7*24的技术支持。在中国国内可通过免费的800电话获取。 提供的24小时支持,仅是一个工程师手机号码,无法提供专业的技术支持。
页:
[1]