CDC场景

全量复制

  • 任务启动时间点开始,将指定库表结构数据传输到目标端

全量流程

  1. 获取当前所需同步的库/表,从服务器上的redo日志获取当前系统改变号(SCN)的位置
  2. 获取同步表的ROW SHARE LOCK,以防止在创建快照期间表结构发生变化
  3. 获取同步的库/表的结构信息,同步到目标端
  4. 释放ROW SHARE LOCK
  5. 依据步骤3读取的SCN位置,全表扫描所有相关数据库表和schema
    例:
    SELECT * FROM SCHEMA.TABLE AS OF SCN 123  where ROWNUM <= 2000
    minus 
    SELECT * FROM SCHEMA.TABLE AS OF SCN 123  where ROWNUM < 1
    
  6. 传输完所有的表数据,继续增量同步

限制

全量同步过程,表结构同步完成前,不支持对同步的表做DDL操作

增量复制

  • 根据SCN节点开启增量复制
  • 从任务启动时间开启增量复制

DML支持

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` set`COL1`=?, `COL2`=?where((`COL1` = ?) and (`COL2` = ?)) limit 1 args=[3, "a a", 3, "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 "]

函数支持

函数名 是否支持 其他
EMPTY_BLOB 函数支持解析为NULL
EMPTY_CLOB 函数支持解析为NULL
CHR
HEXTORAW
DATE
TO_DATE
TO_DSINTERVAL
TO_YMINTERVAL
RAWTOHEX
UNISTR
RAWTOHEX(CHR(34))
TO_TIMESTAMP
LOCALTIMESTAMP
CURRENT_TIMESTAMP
SYSTIMESTAMP

DDL支持

SQL类型 Option Oracle SQL 转化后MySQL SQL 语法支持
CREATE TABLE 不带约束 CREATE TABLE "test"."CaseInsensitive" ("firstName" VARCHAR(15) NOT NULL,lastName VARCHAR2(45) NOT NULL) CREATE TABLE `test`.`CaseInsensitive` (`firstName` VARCHAR(15) NOT NULL,`LASTNAME` VARCHAR(45) NOT NULL) DEFAULT CHARACTER SET = UTF8MB4 支持
CREATE TABLE 带约束 CREATE TABLE TEST.employees_demo( employee_id NUMBER(6), last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL, CONSTRAINT emp_id_uk_demo UNIQUE (employee_id)) CREATE TABLE `TEST`.`EMPLOYEES_DEMO` (`EMPLOYEE_ID` INT,`LAST_NAME` VARCHAR(25) NOT NULL,UNIQUE `EMP_ID_UK_DEMO`(`employee_id`)) DEFAULT CHARACTER SET = UTF8MB4 不支持外键约束
ALTER TABLE AddColumnClase alter table TEST.ADDCOLUMN add (author_last_published date); ALTER TABLE `TEST`.`ADDCOLUMN` ADD COLUMN (`AUTHOR_LAST_PUBLISHED` DATETIME) 支持
ALTER TABLE ModifyColumnClause ALTER TABLE test."MODIFYCOLUMN" MODIFY ( alter_new_name1 CHAR ( 13 )) MODIFY ( alter_name2 VARCHAR ( 66 )) ALTER TABLE `TEST`.`MODIFYCOLUMN` MODIFY COLUMN `ALTER_NEW_NAME1` CHAR(13), MODIFY COLUMN `ALTER_NAME2` VARCHAR(66) 支持
ALTER TABLE DropColumnClause alter table TEST.DROPCOLUMN1 drop column COL1 ALTER TABLE `TEST`.`DROPCOLUMN1` DROP COLUMN `TEST`.`DROPCOLUMN1`.`COL1 支持
ALTER TABLE RenameColumnClase alter table TEST.RENAMECOLUMN RENAME COLUMN COL1 TO COLNEW1 ALTER TABLE `TEST`.`RENAMECOLUMN` RENAME COLUMN `TEST`.`RENAMECOLUMN`.`COL1` TO `TEST`.`RENAMECOLUMN`.`COLNEW1` 当前仅支持8.0语法
DROP TABLE DROP TABLE TEST.DROPTABLE DROP TABLE `TEST`.`DROPTABLE`
create schema/create user 实现为执行create table 前先执行create schema if not exists,保持库同步 #840

下个版本支持功能

  • [ ] 支持 索引同步
  • [ ] 同步LOB_WRITE,LOB_TRIM, LOB_ERASE,SEL_LOB_LOCATOR 事件
  • [ ] 支持PDB(多租户,oracle 12开始支持)
  • [ ] DTLE Oracle extractor 通过 SQL driver 轮询读取的间隔目前写死的5秒,优化为动态数值
  • [ ] DTLE Oracle extractor 通过 SQL driver 轮询的SCN区间目前写死的100000,优化为动态数值

results matching ""

    No results matching ""