Skip to content

support sync DML from Oracle to MySQL #812

Closed
@sjjian

Description

@sjjian

方案(实现)

logminer获取Oracle DML SQL,使用 pincapParseSQL解析获取到schema/table,获取column name 和 column value,构造为where []interface{} list 和 newValue []interface{} list

SQL支持度

1.DML操作类型

DML类型 option Oracle SQL MySQL SQL 其他
INSERT INSERT INTO TEST.CHARACTER_256_COLUMNS VALUES (4, NULL); replace into TEST.CHAR_256_COLUMNS(COL1, COL2)values(?, ?) args=[0, ]
UPDATE UPDATE TEST.CHAR_20000_COLUMNS SET COL2='a a b ' WHERE COL1=2; update TEST.CHAR_256_COLUMNS setCOL1=?, COL2=?where((COL1 = ?) and (COL2 = ?)) limit 1 args=[3, "a a b ", 3, "a a a "]
DELETE DELETE FROM TEST.CHAR_256_COLUMNS WHERE COL1 = 5; delete from TEST.CHAR_256_COLUMNS where((COL1 = ?) and (COL2 = ?)) limit 1 args=[5, "ABCDEFGHIJKLMNOPQRSTUVWXYZ "]

2.字段类型

Oracle MySQL 是否支持 不支持原因(限制) 是否考虑支持
BFILE VARCHAR(255) logminer不支持
BINARY_FLOAT float 否(insert 支持) mysql 不支持Inf/-Inf/Nan数据,MySQL float类型无法精确匹配,导致更新失败(可修复)
BINARY_DOUBLE float mysql 不支持Inf/-Inf/Nan数据
BLOB BLOB 无法从redoSQL获取足够的值
CHAR(n), CHARACTER(n) CHAR(n), CHARACTER(n)
CLOB CLOB 无法从redoSQL获取足够的值
DATE datetime 已支持
DECIMAL(p,s), DEC(p,s) DECIMAL(p,s), DEC(p,s) 已支持
DOUBLE PRECISION DOUBLE PRECISION
FLOAT(p) DOUBLE
INTEGER, INT INT 极值问题
INTERVAL YEAR(p) TO MONTH VARCHAR(30)
INTERVAL DAY(p) TO SECOND(s) VARCHAR(30)
LONG LONGTEXT 已支持
LONG RAW LONGBLOB 否(insert 支持) update/delete失败原因与函数HEXTORAW相关
NCHAR(n) NCHAR(n)/NVARCHAR(n) 中英文混合不支持
NCHAR VARYING(n) NCHAR VARYING(n) 中英文混合不支持
NCLOB NCLOB 无法从redoSQL获取足够的值
NUMBER(p,0), NUMBER(p) TINYINT/SMALLINT/INT/BIGINT/DECIMAL(p) 已支持
NUMBER(p,s) DECIMAL(p,s)
NUMBER, NUMBER(*) DOUBLE
NUMERIC(p,s) NUMERIC(p,s)
NVARCHAR2(n) NVARCHAR(n)
RAW(n) VARBINARY(n)
REAL DOUBLE
ROWID CHAR(100)
SMALLINT DECIMAL(38)
TIMESTAMP(p) datetime
TIMESTAMP(p) WITH TIME ZONE datetime 时区未解析
UROWID(n) VARCHAR(n) logminer不支持,redoSQL解析读取结果为"insert into "TEST"."UROWID_COLUMNS"("COL1","COL2") values('1',Unsupported Type)
VARCHAR(n) VARCHAR(n)
VARCHAR2(n) VARCHAR(n)
  1. 支持同步值带函数的DML support sync DML with function #814
  2. 字符支持
    特殊字符支持 ~`!@#$%^&*()-=_+{}[]|:;<>,.?/
    中文不支持 NCHAR/NCHAR VARYING/NVARCHAR2 不支持中英文混合类型字段更新

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions