Oracle 到 PostgreSQL 数据同步
· 阅读需 5 分钟
简述
本篇文章主要介绍如何使用 CloudCanal 构建一条 Oracle 到 PostgreSQL 的数据同步链路。
技术要点
缩小的数据库权限要求
CloudCanal 对 Oracle 数据库的高权限要求,主要来自两个面向 DBA 的操作,自动构建字典和 自动切换归档日志,这两个操作主要是让用户使用更加自动化和便利,但是问题也比较明显,对数据库运维标准严苛的客户来说,这些权限对于我们的客户是没有的,所以新版本 CloudCanal ,通过参数配置,支持了关闭自动字典构建能力(默认打开) 和 关闭自动切换归档日志能力(默认关闭)
多版本 schema 以支持位点回拉
对于关系型数据库同步工具而言,增量数据本身往往和元数据分离,也就是消费到的增量数据和即时从数据库里面获取的元数据不一定匹配(两个时间点之间有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
支持的DDL&数据类型映射
- Oracle -> PostgreSQL 链路支持的DDL暂时只有 ALTER TABLE ,后续我们将不断进行完善
- CloudCanal 结构迁移和数据迁移同步时会自动进行数据类型映射
类型映射见下表:
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 |
信息
针对于 Oracle -> PostgreSQL 链路,源端 Oracle 不在上表的字段类型暂时不支持。