Oracle GoldenGate (OGG) menyinkronkan data Oracle ke AnalyticDB for MySQL secara real time. Topik ini mencakup pemetaan tipe data antara Oracle dan AnalyticDB for MySQL serta memandu Anda dalam menyiapkan sinkronisasi end-to-end menggunakan OGG.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Database Oracle dengan OGG yang terinstal di
/odata/ogg_o_12202Instance Elastic Compute Service (ECS) yang menjalankan database Oracle
Instance AnalyticDB for MySQL
Instance MySQL untuk menyimpan metadata checkpoint OGG
Kompatibilitas tipe data
OGG mengarahkan data dari Oracle melalui MySQL sebelum menulisnya ke AnalyticDB for MySQL. Tabel-tabel berikut menunjukkan cara tipe data Oracle dipetakan ke tipe data AnalyticDB for MySQL pada setiap tahap serta operasi DML yang didukung.
Tipe dikelompokkan berdasarkan kategori. Untuk setiap baris, periksa kolom Exact match: Yes berarti tipe Oracle dipetakan ke tipe ekuivalen tanpa kehilangan presisi atau makna semantik; No berarti pemetaannya bersifat perkiraan dan Anda harus memverifikasi kompatibilitasnya untuk data Anda.
Tipe numerik
| Oracle type | Oracle type notes | MySQL type | AnalyticDB for MySQL type | Exact match | INSERT | UPDATE | DELETE |
|---|---|---|---|---|---|---|---|
| NUMBER(3) | integer 3 digit | BOOL atau TINYINT(1) | BOOLEAN | No | Didukung | Didukung | Didukung |
| NUMBER(3) | integer 3 digit | TINYINT | TINYINT | Yes | Didukung | Didukung | Didukung |
| NUMBER(5) | integer 5 digit | SMALLINT | SMALLINT | Yes | Didukung | Didukung | Didukung |
| NUMBER(10) | integer 10 digit | INT | INT atau INTEGER | Yes | Didukung | Didukung | Didukung |
| NUMBER(19) | integer 19 digit | BIGINT | BIGINT | Yes | Didukung | Didukung | Didukung |
| FLOAT(24) | float presisi tunggal | FLOAT | FLOAT | Yes | Didukung | Didukung | Didukung |
| FLOAT(24) | float presisi tunggal | DOUBLE | DOUBLE | No | Didukung | Didukung | Didukung |
| FLOAT(24) | float presisi tunggal | DECIMAL | DECIMAL | No | Didukung | Didukung | Didukung |
Tipe karakter
| Oracle type | Oracle type notes | MySQL type | AnalyticDB for MySQL type | Exact match | INSERT | UPDATE | DELETE |
|---|---|---|---|---|---|---|---|
| VARCHAR2(128) | string panjang variabel, hingga 128 byte | CHAR | VARCHAR(128) | No | Didukung | Didukung | Didukung |
| VARCHAR2(2000) | string panjang variabel, hingga 2000 byte | VARCHAR(255) | VARCHAR(255) | No — dipotong menjadi 255 karakter | Didukung | Didukung | Didukung |
| VARCHAR2(4000) | string panjang variabel, hingga 4000 byte | TEXT | VARCHAR(65535) | No | Didukung | Didukung | Didukung |
Tipe tanggal dan waktu
| Oracle type | Oracle type notes | MySQL type | AnalyticDB for MySQL type | Exact match | INSERT | UPDATE | DELETE |
|---|---|---|---|---|---|---|---|
| DATE | Menyimpan komponen tanggal dan waktu (tahun, bulan, hari, jam, menit, detik) | DATE | DATE | No — komponen waktu hilang | Didukung | Didukung | Didukung |
| DATE | Menyimpan komponen tanggal dan waktu (tahun, bulan, hari, jam, menit, detik) | TIME | TIME | No — komponen tanggal hilang | N/A | N/A | N/A |
| DATE | Menyimpan komponen tanggal dan waktu (tahun, bulan, hari, jam, menit, detik) | DATETIME | DATETIME | Yes | Didukung | Didukung | Didukung |
| DATE | Menyimpan komponen tanggal dan waktu (tahun, bulan, hari, jam, menit, detik) | TIMESTAMP | TIMESTAMP | Yes | Didukung | Didukung | Didukung |
Tipe DATE Oracle menyimpan komponen tanggal dan waktu. Memetakan DATE Oracle ke TIME MySQL akan menghilangkan komponen tanggal dan tidak mendukung sinkronisasi DML. Petakan DATE Oracle ke DATETIME atau TIMESTAMP untuk mempertahankan informasi tanggal dan waktu secara lengkap.
Menyinkronkan data Oracle ke AnalyticDB for MySQL
Alur sinkronisasi terdiri dari tiga tahap utama: buat tabel sumber di Oracle dan konfigurasikan OGG, buat tabel metadata checkpoint di MySQL, lalu buat tabel target di AnalyticDB for MySQL.
Pernyataan DDL berikut menampilkan tabel sumber Oracle dan tabel target AnalyticDB for MySQL yang sesuai secara berdampingan sehingga Anda dapat melihat pemetaan tipe lengkap dalam konteks sebelum menjalankan langkah-langkahnya satu per satu.
Source (Oracle):
create table users.xqtest15 (
c1 number(10), -- maps to int
c2 number(1), -- maps to boolean
c3 number(3), -- maps to tinyint
c4 number(5), -- maps to smallint
c5 number(19), -- maps to bigint
c6 float(24), -- maps to float
c7 float(24), -- maps to double
c8 float(24), -- maps to decimal(24, 0)
c9 char(1), -- maps to varchar(128)
c10 varchar2(2000), -- maps to varchar(255)
c11 varchar2(4000), -- maps to varchar(65535)
c12 date, -- maps to date
c13 date, -- maps to time (DML not supported)
c14 date, -- maps to datetime
c15 date, -- maps to timestamp
primary key(c1)
);Target (AnalyticDB for MySQL):
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)
) DISTRIBUTED BY HASH(`c1`) INDEX_ALL='Y';Langkah 1: Masuk ke instance ECS
Masuk ke instance ECS menggunakan akun Oracle:
sqlplus ogg/oggLangkah 2: Buat tabel sumber di Oracle
Jalankan pernyataan SQL berikut untuk membuat tabel sumber users.xqtest15:
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)
);Langkah 3: Konfigurasikan trandata OGG
Setelah membuat tabel sumber, aktifkan supplemental logging untuk tabel tersebut di OGG:
# Buka direktori instalasi OGG dan jalankan ggsci
cd /odata/ogg_o_12202
./ggsciJalankan perintah berikut di prompt ggsci:
ggsci> dblogin userid goldengate, password ogg
ggsci> add trandata users.xqtest15Jangan tambahkan tanda titik koma (;) di akhir perintah add trandata. Menambahkan tanda titik koma akan menyebabkan error No viable tables matched specification.
Langkah 4: Buat tabel metadata checkpoint di MySQL
OGG memerlukan dua tabel checkpoint di MySQL untuk melacak status replikasi. Jalankan pernyataan SQL berikut untuk membuatnya:
-- Checkpoint table
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`)
) DISTRIBUTED BY HASH(`group_key`) INDEX_ALL='Y';
-- Checkpoint LOX table
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`)
) DISTRIBUTED BY HASH(`group_key`) INDEX_ALL='Y';Langkah 5: Buat tabel target di AnalyticDB for MySQL
Buat tabel target yang menerima data hasil sinkronisasi dari Oracle. Tipe kolom mengikuti pemetaan yang tercantum dalam bagian Kompatibilitas tipe data di atas.
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)
) DISTRIBUTED BY HASH(`c1`) INDEX_ALL='Y';Lampiran
Tangkapan layar berikut menunjukkan hasil sinkronisasi untuk setiap operasi DML.
Sinkronisasi INSERT

Sinkronisasi UPDATE

Sinkronisasi DELETE
