1. 前言
1.1. 简介
LightDB-ETL 是一款异构数据库迁移工具,通过支持将 Oracle、MySQL等数据库中的结构和数据迁移到LightDB、GaussDB、OceanBase、TDSQL等信创数据库,可极大的提高迁移效率和准确性。
1.2. 功能和支持的数据库
目前支持如下功能:
源库 |
目标库 |
支持迁移对象 |
---|---|---|
Oracle |
LightDB(PG,Oracle模式) |
表、数据、视图、序列、函数、存储过程、触发器、类型、包、同义词,支持比对 |
MySQL5.7 |
GaussDB500_oracle |
表、视图、主键、外键、索引,支持比对 |
MySQL5.7 |
GaussDB505_oracle |
表、视图、主键、外键、索引,支持比对 |
MySQL8.0 |
GaussDB500_oracle |
表、视图、主键、外键、索引,支持比对 |
MySQL8.0 |
GaussDB505_oracle |
表、视图、主键、外键、索引,支持比对 |
MySQL8.0 |
GoldenDB_mysql |
表、视图、主键、外键、索引,支持比对 |
MySQL8.0 |
Oracle19c |
表、视图、主键、外键、索引,支持比对 |
MySQL8.0 |
Oceanbase_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
迁移表支持的数据类型:
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
表数据迁移:
Oracle 的 rowid 和 DM 的 DmdbRowId 不兼容,无法直接迁移。
因此,DM 的每个表对于 rowid 采用数字类型从 1 递增的方法插入值,不与 Oracle 的值保持一致。
视图迁移:
存在其他依赖(如函数、存储过程),需要先确保依赖对象已经存在。
由于数据库对保留和非保留关键字的支持不一致,关键字在作为别名、表名等情况下可能会导致迁移失败。
表数据对比和中间结果对比:
不支持比较的数据类型TIMESTAMP WITH TIME ZONE、INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND、ROWID,
对空值和null值的比较暂时不支持
1.3.2. Oracle2OceanBaseOracle
迁移表支持的数据类型:
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
不支持迁移的表选项:
不支持表选项:[NO] INMEMORY。
视图迁移:
存在其他依赖(如函数、存储过程),需要先确保依赖对象已经存在。
由于数据库对保留和非保留关键字的支持不一致,关键字在作为别名、表名等情况下可能会导致迁移失败。
表数据对比和中间结果对比:
对空值和null值的比较暂时不支持
1.3.3. Oracle2GaussDBOracle
迁移表支持的数据类型:
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
支持表数据比对的数据类型:
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