Oracle Golden Gate(OGG)可用于将Oracle中的数据同步到AnalyticDB for MySQL中。

Oracle Golden Gate数据类型与AnalyticDB for MySQL兼容性

源端 目标端 同步行为
Oracle MySQL AnalyticDB for MySQL INSERT UPDATA DELETE
number(3) bool或tinyint(1) boolean 支持 支持 支持
number(3) tinyint tingyint 支持 支持 支持
number(5) smallint smallint 支持 支持 支持
number(10) int int/integer 支持 支持 支持
number(19) bigint bigint 支持 支持 支持
float(24) float float 支持 支持 支持
float(24) double double 支持 支持 支持
float(24) decimal decimal 支持 支持 支持
varchar2(128) char varchar(128) 支持 支持 支持
varchar2(2000) varchar(255) varchar(255) 支持 支持 支持
varchar2(4000) text varchar(65535) 支持 支持 支持
date date date 支持 支持 支持
date time time 不支持该功能、MySQL不适用 不支持该功能、MySQL不适用 不支持该功能、MySQL不适用
date datetime datetime 支持 支持 支持
date timestamp timestamp 支持 支持 支持

通过OGG将Oracle数据同步到AnalyticDB for MySQL

  1. 使用OGG账号登录ECS。
    sqlplus ogg/ogg
  2. 执行以下SQL在Oracle中创建源表。
    drop table users.xqtest15;
    create table users.xqtest15 (
      c1 number(10), 
      c2 number(1), 
      c3 number(3), 
      c4 number(5), 
      c5 number(19), 
      c6 float(24), 
      c7 float(24), 
      c8 float(24), 
      c9 char(1),
      c10 varchar2(2000),
      c11 varchar2(4000),
      c12 date,
      c13 date,
      c14 date,
      c15 date,
      primary key(c1)
    );
  3. Oracle建表成功后,在OGG源端添加trandata。
    [OGG账号登录ECS] cd /odata/ogg_o_12202
    [启动OGG] ./ggsci
    ggsci> dblogin userid goldengate, password ogg
    ggsci> add trandata users.xqtest15
    说明 上述命令末尾不要加分号(;),否则将报错No viable tables matched specification。
  4. 执行以下SQL在MySQL中创建表,存储Oracle中的元数据。
    -- checkpoint表
    CREATE TABLE `ckpt1220` (
      `group_name` varchar(8) NOT NULL,
      `group_key` decimal(19,0) NOT NULL,
      `seqno` decimal(10,0) DEFAULT NULL,
      `rba` decimal(19,0) NOT NULL,
      `audit_ts` varchar(29) DEFAULT NULL,
      `create_ts` datetime NOT NULL,
      `last_update_ts` datetime NOT NULL,
      `current_dir` varchar(255) NOT NULL,
      `log_bsn` varchar(128) DEFAULT NULL,
      `log_csn` varchar(128) DEFAULT NULL,
      `log_xid` varchar(128) DEFAULT NULL,
      `log_cmplt_csn` varchar(128) DEFAULT NULL,
      `log_cmplt_xids` varchar(2000) DEFAULT NULL,
      `version` decimal(3,0) DEFAULT NULL,
      PRIMARY KEY (`group_name`,`group_key`)
    ) DISTRIBUTE BY HASH(`group_key`) INDEX_ALL='Y';
    -- checkpoint表
    CREATE TABLE `ckpt1220_lox` (
      `group_name` varchar(8) NOT NULL,
      `group_key` decimal(19,0) NOT NULL,
      `log_cmplt_csn` varchar(128) NOT NULL,
      `log_cmplt_xids_seq` decimal(5,0) NOT NULL,
      `log_cmplt_xids` varchar(2000) NOT NULL,
      PRIMARY KEY (`group_name`,`group_key`,`log_cmplt_csn`,`log_cmplt_xids_seq`)
    ) DISTRIBUTE BY HASH(`group_key`) INDEX_ALL='Y';
  5. 执行以下SQL在AnalyticDB for MySQL中创建目标表,存储从Oracle同步过来的数据。
    Create Table `xqtest15` (
     `c1` int,
     `c2` boolean,
     `c3` tinyint,
     `c4` smallint,
     `c5` bigint,
     `c6` float,
     `c7` double,
     `c8` decimal(24, 0),
     `c9` varchar(128),
     `c10` varchar(255),
     `c11` varchar(65535),
     `c12` date,
     `c13` time,
     `c14` datetime,
     `c15` timestamp,
     primary key (c1)
    ) DISTRIBUTE BY HASH(`c1`) INDEX_ALL='Y'

附录

  • INSERT同步insert
  • UPDATE同步update
  • DELETE同步delete