Oracle Golden Gate

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