Closed
Description
方案(实现)
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) | 是 |
- 支持同步值带函数的DML support sync DML with function #814
- 字符支持
特殊字符支持 ~`!@#$%^&*()-=_+{}[]|:;<>,.?/
中文不支持NCHAR/NCHAR VARYING/NVARCHAR2 不支持中英文混合类型字段更新