4.2 入云同步使用须知
4.2.12 Oracle->GaussDB(for openGauss)主备版
使用技巧(需要人为配合)
推荐提前2-3天启动任务,并配合如下使用技巧和操作要求,以确保任务稳定运行。
● 基于以下原因,建议您结合定时启动功能,选择业务低峰期开始运行同步任务。
– 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,
以及占用2~4个CPU。
– 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
– DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数 对业务的影响。
– 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独 占锁操作。
● 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便 得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过 程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。
操作要求
针对一些无法预知或人为因素及环境突变导致同步失败的情况,数据复制服务提供以 下常见的操作限制,供您在同步过程中参考。
表4-23 操作要求
类型名称 操作限制(需要人为配合)
注意事项 ● 表4-24中的环境要求均不允许在同步过程中修改,直至同步结
束。
● 不建议在数据库中使用非精确数值类型做主键,该特性影响 DRS 增量场景下对 UPDATE、DELETE语句的同步,同时也会导致内容
比对不可用。主键支持的类型可参考Oracle数据库->GaussDB(for openGauss)数据库映射关系。
● 增量同步时,BLOB末尾的0x00、CLOB末尾的空格会被截断。
● 当Oracle字符集是WE8MSWIN1252时,CLOB列同步到目标库可 能出现乱码,建议先修改源库字符集为AL32UTF8再同步数据。
类型名称 操作限制(需要人为配合)
操作须知 ● 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重 试,表数据存在少量不一致的可能性。
● 如果源库和目标库字符集不一致,如源库是ZHS16GBK,目标库 是UTF8,由于ZHS16GBK字符集单个中文字符占用2个字节,而 UTF8字符集单个中文字符占用3个字节,可能会导致CHAR或 VARCHAR类型数据同步到目标库后超出字段定义长度,所以客户 需要根据实际情况对目标库CHAR和VARCHAR类型字段长度进行 扩充(如扩大为源库的1.5倍)。
– 表级同步支持alter table add column、alter table drop column、alter table rename column、alter table modify column以及truncate table的基本DDL,不支持默认值等的修 改。
● 使用DRS同步表结构的场景下,同一个schema中,同步的表中,
表、约束、索引等不能有忽略大小写后的同名对象,比如表"A"中 有索引名"inx1", 表B中有索引名"a",表A和索引"a"忽略大小写 重名了,会导致结构同步失败。多个schema映射到一个schema 的场景,源库的多个schema中也不能包含同名但字母大小写不同 的表、约束和索引。
● 当Oracle数据库为19c 版本,增量同步时必须打开全部PDB。
● 全量和增量同步不支持 Oracle 12c以上版本的STRING扩展数据 类型(EXTENDED DATA TYPE)。
● 全量和增量同步不支持隐藏列(UNUSED, INVISIBLE)。
● 源库使用XStream日志读取模式,需要在增量时插入数据,否则 增量时延会一直增加。
类型名称 操作限制(需要人为配合)
● 任务再编辑增加新表时,请确保新增的表的事务都已提交,否则 未提交的事务可能无法同步到目标库。建议在业务低峰期做增加 表的操作。
环境要求
实时同步对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系 统会自动检查,并给出处理建议。
表4-24 环境要求
类型名称 使用限制(DRS自动检查)
数据库权限
设置 ● 源数据库端:
– 全量+增量和增量同步时需要具有CREATE SESSION、SELECT ANY DICTIONARY、EXECUTE_CATALOG_ROLE、SELECT ANY TRANSACTION权限和SELECT ANY TABLE权限,若 Oracle为12c及以上版本还需要LOGMINING权限。全量同步 时需要具有CREATE SESSION、SELECT ANY DICTIONARY、
SELECT ANY TABLE和FLASHBACK ANY TABLE权限。
– 12c 以上版本 PDB 数据库同步时,需要为用户赋予如下权 限:在CDB下创建C##前缀的容器数据库用户赋予CREATE SESSION、SELECT ANY DICTIONARY、SELECT ANY
TABLE、LOGMINING、EXECUTE_CATALOG_ROLE权限和SET CONTAINER权限(GRANT SET CONTAINER TO
C##USERNAME CONTAINER= ALL;)。
在PDB下为C##前缀用户赋予以下权限(其中RESTRICTED SESSION、SELECT ON SYS.COL$、 SELECT ON SYS.OBJ$权 限需要单独赋予):
全量+增量和增量同步时需要具有RESTRICTED SESSION、
CREATE SESSION、SELECT ANY DICTIONARY、
EXECUTE_CATALOG_ROLE、SELECT ANY TRANSACTION、
SELECT ANY TABLE、LOGMINING、SELECT ON SYS.COL$、
SELECT ON SYS.OBJ$。全量同步时需要具有RESTRICTED SESSION、CREATE SESSION、SELECT ANY DICTIONARY、
SELECT ANY TABLE、FLASHBACK ANY TABLE、SELECT ON SYS.COL$、SELECT ON SYS.OBJ$。
● 源数据库端:增量同步时,源库Oracle需要打开pk/uk级别或all 级别的SUPPLEMENTAL LOG,且日志模式需要设置为归档模 式。
● 目标数据库端必须同时拥有以下权限:
– 库级权限:需要使用root或其他有Sysadmin角色的DATABASE 用户登录postgres基库,赋予用户DATABASE的CREATE、
CONNECT权限。
– SCHEMA级权限:需要使用 root、或其他有Sysadmin角色的 DATABASE用户、或目标数据库的OWNER用户登入目标数据 库,赋予用户SCHEMA的CREATE、USAGE权限。
– 表级权限:需要使用 root、或其他有Sysadmin角色的 DATABASE用户、或目标数据库的OWNER用户登入目标数据 库 ,赋予用户SCHEMA下所有表的SELECT,UPDATE,
INSERT和DELETE权限。
类型名称 使用限制(DRS自动检查)
同步对象约
束 ● 全量同步时支持表、普通索引、主键与唯一约束、数据的同步。
增量同步时支持表的实时同步。
● 全量阶段不支持bfile、xml、sdo_geometry、urowid和自定义类 型。增量阶段不支持bfile、xml、sdo_geometry、urowid、
INTERVAL和自定义类型。
● timestamp和interval day to second类型支持的最大精度是6。
● 全量同步结构迁移不支持位图索引、倒排索引、函数索引。
● 增量同步时,源端或者目标端数据库异常会触发任务失败,数据 库恢复后重试启动任务时触发全局启动,此时会忽略原有抓取或 回放组件的状态,同时回放也会按照抓取的中断点位再启动。
● 增量同步LOB类型仅支持BasicFiles属性,不支持SecureFiles属 性,支持的LOB类型大小限10M以内。
● 对于TIMESTAMP WITH TIME ZONE类型,根据目标库时区做转 换后不得大于“9999-12-31 23:59:59.999999”。
● 源库支持to_date和sys_guid函数做默认值。将函数作为default值 时,需要目标库也有相同功能的函数。对于目标库不存在对应函
● 目前仅支持如下字符集:ZHS16GBK、AL32UTF8、UTF8、
US7ASCII、WE8MSWIN1252。
目标数据库
要求 ● 目标库必须是本云GaussDB(for openGauss)主备版实例。
● 同步时,需要手动在目标数据库端创建与源数据库对应的全部以 小写字母命名的数据库。
● 增量同步的表要禁用外键,因为DRS并行回放会使得不同表之间 的写入顺序和源库不一致,可能会触发外键约束限制,造成同步 失败。