1. 前言

1.1. 简介

LightDB-ETL 是一款异构数据库迁移工具,通过支持将 Oracle、MySQL等数据库中的结构和数据迁移到LightDB、GaussDB、OceanBase、TDSQL等信创数据库,可极大的提高迁移效率和准确性。

1.2. 功能和支持的数据库

目前支持如下功能:

源库

目标库

支持迁移对象

oracle

lightdb_oracle

表、数据、视图、序列、函数、存储过程、触发器、类型、包、同义词,支持比对

oracle

lightdb_postgresql

表数据,支持比对

mysql

gaussdb500_oracle

表、视图、主键、外键、索引,支持比对

mysql

gaussdb505_oracle

表、视图、主键、外键、索引,支持比对

mysql_80

gaussdb500_oracle

表、视图、主键、外键、索引,支持比对

mysql_80

gaussdb505_oracle

表、视图、主键、外键、索引,支持比对

mysql_80

goldendb_mysql

表、视图、主键、外键、索引,支持比对

mysql_80

oracle19c

表、视图、主键、外键、索引,支持比对

mysql_80

ocean_base_mysql

表、视图、主键、外键、索引,支持比对

oracle

ocean_base_oracle

表、表数据、主键、外键、索引、约束、视图,支持比对,中间结果比对

oracle

dm

表、视图、主键、外键、索引、约束、表数据,支持比对

oracle

gaussdb_oracle

表、视图、主键、外键、索引、约束、表数据,支持比对表结构、表数据、对象比对(表、视图、索引)

备注:当源库为MySQL时,表结构迁移支持如下数据类型:bigint、bit、blob、char、datetime、date、decimal、double、float、int、mediumint、real、smallint、text、timestamp、tinyint、varbinary、varchar,而json、year、enum、binary、point、linestring、polygon、geometry、multipoint、multilinestring、multipolygon、set等类型暂不支持

25年计划支持功能如下:

源库

目标库

支持迁移对象

Oracle

达梦 8

表、视图、主键、外键、索引,支持比对

Oracle

ocean_base_oracle 3.2/4.2

表、视图、主键、外键、索引,支持比对

Oracle

GaussDB-oracle 505

表、视图、主键、外键、索引,支持比对

Oracle

TDSQL-oracle

表、视图、主键、外键、索引,支持比对

1.3. 支持限制

1.3.1. Oracle2DM

  1. 迁移表支持的数据类型

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • DECIMAL

  • DOUBLE PRECISION

  • FLOAT

  • INTEGER

  • NUMBER

  • SMALLINT

  • CHAR

  • VARCHAR2

  • NCHAR

  • NVARCHAR2

  • NCHAR VARYING

  • LONG

  • BLOB

  • CLOB

  • NCLOB

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

  • RAW

  • ROWID

  1. 表数据迁移

  • Oracle 的 rowid 和 DM 的 DmdbRowId 不兼容,无法直接迁移。

  • 因此,DM 的每个表对于 rowid 采用数字类型从 1 递增的方法插入值,不与 Oracle 的值保持一致。

  1. 视图迁移

  • 存在其他依赖(如函数、存储过程),需要先确保依赖对象已经存在。

  • 由于数据库对保留和非保留关键字的支持不一致,关键字在作为别名、表名等情况下可能会导致迁移失败。

  1. 表数据对比和中间结果对比

  • 不支持比较的数据类型TIMESTAMP WITH TIME ZONE、INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND、ROWID,

  • 对空值和null值的比较暂时不支持。

1.3.2. Oracle2OceanBaseOracle

  1. 迁移表支持的数据类型

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • DECIMAL

  • FLOAT

  • INTEGER

  • NUMBER

  • REAL

  • SMALLINT

  • CHAR

  • VARCHAR

  • VARCHAR2

  • NCHAR

  • NVARCHAR2

  • NCHAR VARYING

  • BLOB

  • CLOB

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • TIMESTAMP WITH LOCAL TIME ZONE

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

  • RAW

  1. 不支持迁移的表选项

  • 不支持表选项:[NO] INMEMORY。

  1. 视图迁移

  • 存在其他依赖(如函数、存储过程),需要先确保依赖对象已经存在。

  • 由于数据库对保留和非保留关键字的支持不一致,关键字在作为别名、表名等情况下可能会导致迁移失败。

  1. 表数据对比和中间结果对比

  • 对空值和null值的比较暂时不支持。

5.**不支持主键的限制:**

  • OceanBase Oracle 模式不支持主键的 USING INDEX 语法以及索引选项(ENABLE | DISABLE | NOVALIDATE 等)。

  • 由于上述限制,某些情况下,表的主键在迁移成功后,因列已被索引而导致迁移索引失败,并出现错误:ORA-01408: such column list already indexed。

1.3.3. Oracle2GaussDBOracle

  1. 迁移表支持的数据类型

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • DECIMAL

  • DOUBLE PRECISION

  • FLOAT

  • INTEGER

  • NUMBER

  • REAL

  • SMALLINT

  • CHAR

  • VARCHAR

  • VARCHAR2

  • NCHAR

  • NVARCHAR2

  • NCHAR VARYING

  • BLOB

  • CLOB

  • NCLOB

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

  1. 支持表数据比对的数据类型

  • BINARY_FLOAT

  • BINARY_DOUBLE

  • DECIMAL

  • DOUBLE PRECISION

  • FLOAT

  • INTEGER

  • NUMBER

  • REAL

  • SMALLINT

  • CHAR

  • VARCHAR

  • VARCHAR2

  • NCHAR

  • NVARCHAR2

  • NCHAR VARYING

  • BLOB

  • CLOB

  • NCLOB

  • DATE

  • TIMESTAMP

  • TIMESTAMP WITH TIME ZONE

  • INTERVAL YEAR TO MONTH

  • INTERVAL DAY TO SECOND

  1. 视图的限制:

  • 如果视图依赖其他对象(函数、类型、存储过程等),需要优先进行迁移依赖的对象。

  • 由于部分目标方言的特性缺失,统一SQL通过自定义数据库函数的方式来模拟源方言的功能,需要将统一sql的脚本打入到目标库。详细操作参考 统一SQL脚本升级工具

  • 视图迁移需要使用统一的 SQL 将 Oracle 语法转换为目标数据库的语法。然而,当前版本在视图转换方面仍存在一些限制。例如,不支持以下特性:不支持使用 (+) 进行跨表查询关联、多个主表之间必须存在 (+) 连接条件、不支持 (+) 的循环连接写法等。

  1. 对象比对的限制:

  • 暂只支持比对表名、索引名、视图名。