从 Oracle 迁移到 ProtonBase

准备工作

网络部分参考 数据同步网络配置

版本支持

支持oracle 11、oracle 12和oracle 19等系列

权限设置

日志补全

#开启最小日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
 
#补全日志(可以到 database 或者 表级别)。
# All columns 表示在 redo log 中会添加所有列. 如果用户不接受 All columns 模式,就必须开启 Primary key 模式,但是性能会下降,无法换 key
 
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (All columns) COLUMNS;
# ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (Primary key) COLUMNS;

创建用户与赋权

#创建用户,给用户赋权,如果已有用户,省略。
# 注意,如果是 orcacle 12 以上,支持 PDB,用户名必须是 c## 开头, 并且赋予权限的时候加上 "CONTAINER=ALL"
CREATE USER c##teleport IDENTIFIED by 123456;
 
# 赋予权限
# 批的权限
GRANT CREATE SESSION TO c##teleport;
# 12C 需要有 SET CONTAINER 权限
#GRANT SET CONTAINER TO c##teleport;
GRANT SELECT ANY TABLE TO c##teleport;
GRANT SELECT_CATALOG_ROLE TO c##teleport;
GRANT EXECUTE_CATALOG_ROLE TO c##teleport;
GRANT SELECT ANY TRANSACTION TO c##teleport;
 
# 流的权限
# oracle 11C 没有 LOGMINING role
# GRANT LOGMINING TO c##teleport
GRANT EXECUTE ON DBMS_LOGMNR TO c##teleport;
GRANT EXECUTE ON DBMS_LOGMNR_D TO c##teleport;
GRANT SELECT ON V_$LOG TO c##teleport;
GRANT SELECT ON V_$LOG_HISTORY TO c##teleport;
GRANT SELECT ON V_$LOGMNR_LOGS TO c##teleport;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO c##teleport ;
GRANT SELECT ON V_$LOGMNR_PARAMETERS TO c##teleport;
GRANT SELECT ON V_$LOGFILE TO c##teleport;
GRANT SELECT ON V_$ARCHIVED_LOG TO c##teleport;
GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO c##teleport;
GRANT SELECT ON V_$TRANSACTION TO c##teleport;
GRANT SELECT ON V_$MYSTAT TO c##teleport;
GRANT SELECT ON V_$STATNAME TO c##teleport;

配置数据同步

创建 Oracle 同步作业

配置oralce的访问地址,并且进行oracle源端和Warebase目标端的连接测试

通过 Web UI 勾选要同步的表

点击下一步,配置映射规则。映射规则的编辑方式,参考同步对象映射

选择同步模式和脏数据处理策略,点击完成后选择合适的Teleport规格启动任务。

使用限制

  1. Oracle同步基于Oracle LogMiner工具,在使用LogMiner时,有一个限制是表名和字段名的长度不能超过30个字符。如果您的表名或字段名超过了30个字符,LogMiner将会截断超出部分,这可能会引起同步报错。在进行同步前,请确保您的表名长度满足长度要求

  2. 补全日志建议开启 All columns 模式,性能有保证。Primary key 模式同步性能会比较低。

默认字段映射

OraclePostgreSQL
CHARCHAR
NCHARCHAR
VARCHAR2VARCHAR
NVARCHAR2VARCHAR
LONGTEXT
CLOBTEXT
NCLOBTEXT
UROWIDVARCHAR
ROWIDVARCHAR
NUMBER(scale = 0 precision < 5)INT2
NUMBER(scale = 0 precision < 10)INT4
NUMBER(scale = 0 precision < 19)INT8
NUMBER(scale > 0)NUMERIC
INTINT4
FLOATFLOAT8
BINARY_FLOATFLOAT4
BINARY_DOUBLEFLOAT8
RAWBYTEA
LONG RAWBYTEA
BLOBBYTEA
BFILEBYTEA
DATETIMESTAMP
TIMESTAMPTIMESTAMP
JSONJSONB
TIMESTAMP WITH TIME ZONETIMESTAMPTZ
TIMESTAMP WITH LOCAL TIME ZONETIMESTAMPTZ
INTERVAL YEAR TO MONTHINTERVAL
INTERVAL DAY TO SECONDINTERVAL

常见问题

  1. 遇到报错 java.lang.RuntimeException: Supplemental logging not properly configured

通常为没有配置日志补全。需要执行 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

  1. 遇到报错 java.sql.SQLSyntaxErrorException: ORA-00904: : invalid identifier

通常为EXECUTE_CATALOG_ROLE没有执行权限导致。请按照文档添加 EXECUTE_CATALOG_ROLE 的权限

  1. 遇到报错 Caused by: java.lang.RuntimeException: meta has primary key or unique key with not null constraint, but key value contains null. please check pk and uk of the source and sink

通常为没有开启日志补全导致。请参考文档日志补全章节添加相应权限