本篇文章主要介绍如何使用 CloudCanal 构建一条 Oracle 到 PostgreSQL 的数据同步链路
CloudCanal 对 Oracle 数据库的高权限要求,主要来自两个面向 DBA 的操作,自动构建字典和 自动切换归档日志,这两个操作主要是让用户使用更加自动化和便利,但是问题也比较明显,对数据库运维标准严苛的客户来说,这些权限对于我们的客户是没有的,所以新版本 CloudCanal ,通过参数配置,支持了关闭自动字典构建能力(默认打开) 和 关闭自动切换归档日志能力(默认关闭)
对于关系型数据库同步工具而言,增量数据本身往往和元数据分离,也就是消费到的增量数据和即时从数据库里面获取的元数据不一定匹配(两个时间点之间有DDL),所以维持一个多版本的元数据以应对增量数据解析是必要的, CloudCanal 以每天的 schema dump 为基准,辅以到当前位点的 DDL 语句列表,可构建出任何时间点的元数据(实际上是更加精确的 scn 位点),单个 DDL 前后的数据变更事件,能够精确匹配到相对应的元数据进行解析, CloudCanal 才有可能在此版本产品上提供了回拉位点重复消费一段时间增量数据的能力
源端 Oracle 支持的版本:10.X、11.X、12.X、18.X、19.X
对端 PostgreSQL 支持的版本:8.4、9.0、9.1、9.2、9.3、9.4、9.5、9.6、10.X、11.X、12.X、13.X、14.X 、15.X、16.X、17.X
类型映射见下表:
Oracle 字段类型 | PostgreSQL 字段类型 |
---|---|
CHAR、NCHAR、VARCHAR2、NVARCHAR、NVARCHAR2、ROWID、HTTPURITYPE | CHARACTER_VARYING |
LONG、CLOB、NCLOB | TEXT |
NUMBER_BIGINT | BIGINT |
NUMBER_DECIMAL、BINARY_FLOAT、BINARY_DOUBLE | NUMERIC |
FLOAT | REAL |
DATE、TIMESTAMP | TIMESTAMP_WITHOUT_TIME_ZONE、TIMESTAMP_WITHOUT_TIME_ZONE |
TIMESTAMP_WITH_TIME_ZONE、TIMESTAMP_WITH_LOCAL_TIME_ZONE | TIMESTAMP_WITH_TIME_ZONE |
XMLTYPE | XML |
Tips : 针对于 Oracle -> PostgreSQL 链路,源端 Oracle 不在上表的字段类型暂时不支持
Tips :Oracle 相较于其他数据源有一些额外的参数可以调整
- logminerUser:ORACLE源端增量任务使用redo解析(logminer)方式时使用的账号,需要CDB类型用户
- logminerPasswd:ORACLE源端增量任务使用redo解析(logminer)方式时使用的账号密码
- logminerConnectType:ORACLE源端增量任务使用redo解析(logminer)方式时使用的连接方式,目前支持ORACLE_SID或ORACLE_SERVICE模式
- logminerSidOrService:ORACLE源端增量任务使用redo解析(logminer)方式时使用的连接标识符,和logminerConnectType参数配合使用,ORACLE_SID连接方式,则填写sid,ORACLE_SERVICE连接方式,则填写service name
任务创建并且启动后,会自动进行如下的三个阶段:
本文简单介绍了如何使用 CloudCanal 进行 Oracle -> PostgreSQL 数据迁移同步。各位读者朋友,如果你觉得还不错,请点赞、评论加转发吧