从 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规格启动任务。
使用限制
-
Oracle同步基于Oracle LogMiner工具,在使用LogMiner时,有一个限制是表名和字段名的长度不能超过30个字符。如果您的表名或字段名超过了30个字符,LogMiner将会截断超出部分,这可能会引起同步报错。在进行同步前,请确保您的表名长度满足长度要求
-
补全日志建议开启 All columns 模式,性能有保证。Primary key 模式同步性能会比较低。
默认字段映射
Oracle | PostgreSQL |
CHAR | CHAR |
NCHAR | CHAR |
VARCHAR2 | VARCHAR |
NVARCHAR2 | VARCHAR |
LONG | TEXT |
CLOB | TEXT |
NCLOB | TEXT |
UROWID | VARCHAR |
ROWID | VARCHAR |
NUMBER(scale = 0 precision < 5) | INT2 |
NUMBER(scale = 0 precision < 10) | INT4 |
NUMBER(scale = 0 precision < 19) | INT8 |
NUMBER(scale > 0) | NUMERIC |
INT | INT4 |
FLOAT | FLOAT8 |
BINARY_FLOAT | FLOAT4 |
BINARY_DOUBLE | FLOAT8 |
RAW | BYTEA |
LONG RAW | BYTEA |
BLOB | BYTEA |
BFILE | BYTEA |
DATE | TIMESTAMP |
TIMESTAMP | TIMESTAMP |
JSON | JSONB |
TIMESTAMP WITH TIME ZONE | TIMESTAMPTZ |
TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMPTZ |
INTERVAL YEAR TO MONTH | INTERVAL |
INTERVAL DAY TO SECOND | INTERVAL |
常见问题
- 遇到报错 java.lang.RuntimeException: Supplemental logging not properly configured
通常为没有配置日志补全。需要执行 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
- 遇到报错 java.sql.SQLSyntaxErrorException: ORA-00904: : invalid identifier
通常为EXECUTE_CATALOG_ROLE没有执行权限导致。请按照文档添加 EXECUTE_CATALOG_ROLE 的权限
- 遇到报错 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
通常为没有开启日志补全导致。请参考文档日志补全章节添加相应权限