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
使用OGG账号登录ECS。
sqlplus ogg/ogg
执行以下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) );
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。
执行以下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';
执行以下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同步
UPDATE同步
DELETE同步