すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Oracle GoldenGate

最終更新日:Jul 30, 2026

Oracle GoldenGate (OGG) は、Oracle のデータを AnalyticDB for MySQL にリアルタイムで同期します。このトピックでは、Oracle と AnalyticDB for MySQL 間のデータ型マッピングについて説明し、OGG を使用したエンドツーエンドの同期を設定する手順を解説します。

前提条件

開始する前に、以下が準備できていることを確認してください。

  • OGG が /odata/ogg_o_12202 にインストールされている Oracle データベース

  • Oracle データベースをホストする Elastic Compute Service (ECS) インスタンス

  • AnalyticDB for MySQL インスタンス

  • OGG のチェックポイントメタデータを格納するための MySQL インスタンス

データ型の互換性

OGG は、AnalyticDB for MySQL に書き込む前に、Oracle から MySQL を経由してデータをルーティングします。以下の表は、Oracle のデータ型が各段階で AnalyticDB for MySQL のデータ型にどのようにマッピングされるか、およびどの DML 操作がサポートされているかを示しています。

データ型はカテゴリ別にグループ化されています。各行で [完全一致] 列を確認してください。[はい] は、Oracle のデータ型が精度や意味的な損失なしに同等の型にマッピングされることを意味します。[いいえ] は、マッピングが近似的であり、ご自身のデータとの互換性を検証する必要があることを意味します。

数値データ型

Oracle のデータ型 Oracle のデータ型の注釈 MySQL のデータ型 AnalyticDB for MySQL のデータ型 完全一致 INSERT UPDATE DELETE
NUMBER(3) 3桁の整数 BOOL or TINYINT(1) BOOLEAN いいえ サポート済み サポート済み サポート済み
NUMBER(3) 3桁の整数 TINYINT TINYINT はい サポート済み サポート済み サポート済み
NUMBER(5) 5桁の整数 SMALLINT SMALLINT はい サポート済み サポート済み サポート済み
NUMBER(10) 10桁の整数 INT INT or INTEGER はい サポート済み サポート済み サポート済み
NUMBER(19) 19桁の整数 BIGINT BIGINT はい サポート済み サポート済み サポート済み
FLOAT(24) 単精度浮動小数点 FLOAT FLOAT はい サポート済み サポート済み サポート済み
FLOAT(24) 単精度浮動小数点 DOUBLE DOUBLE いいえ サポート済み サポート済み サポート済み
FLOAT(24) 単精度浮動小数点 DECIMAL DECIMAL いいえ サポート済み サポート済み サポート済み

文字データ型

Oracle のデータ型 Oracle のデータ型の注釈 MySQL のデータ型 AnalyticDB for MySQL のデータ型 完全一致 INSERT UPDATE DELETE
CHAR(n) 最大 n バイトの固定長文字列 CHAR VARCHAR いいえ サポート済み サポート済み サポート済み
VARCHAR2(128) 最大 128 バイトの可変長文字列 CHAR VARCHAR(128) いいえ サポート済み サポート済み サポート済み
VARCHAR2(2000) 最大 2000 バイトの可変長文字列 VARCHAR(255) VARCHAR(255) いいえ、255 文字に切り捨てられます サポート済み サポート済み サポート済み
VARCHAR2(4000) 最大 4000 バイトの可変長文字列 TEXT VARCHAR(65535) いいえ サポート済み サポート済み サポート済み

日時データ型

Oracle のデータ型 Oracle のデータ型の注釈 MySQL のデータ型 AnalyticDB for MySQL のデータ型 完全一致 INSERT UPDATE DELETE
DATE 日付と時刻 (年、月、日、時、分、秒) を格納 DATE DATE いいえ、時刻部分が失われます サポート済み サポート済み サポート済み
DATE 日付と時刻 (年、月、日、時、分、秒) を格納 TIME TIME いいえ、日付部分が失われます 非対応 非対応 非対応
DATE 日付と時刻 (年、月、日、時、分、秒) を格納 DATETIME DATETIME はい サポート済み サポート済み サポート済み
DATE 日付と時刻 (年、月、日、時、分、秒) を格納 TIMESTAMP TIMESTAMP はい サポート済み サポート済み サポート済み
説明

Oracle の DATE 型は、日付部分と時刻部分の両方を格納します。Oracle DATE を MySQL TIME にマッピングすると、日付部分が失われ、DML 同期はサポートされません。Oracle DATE を DATETIME または TIMESTAMP にマッピングして、完全な日時情報を保持してください。

Oracle から AnalyticDB for MySQL へのデータ同期

同期フローには、Oracle でのソーステーブルの作成と OGG の設定、MySQL でのチェックポイントメタデータテーブルの作成、そして AnalyticDB for MySQL でのターゲットテーブルの作成という 3 つの主要なフェーズがあります。

以下の DDL ステートメントは、ソースの Oracle テーブルと、それに対応するターゲットの AnalyticDB for MySQL テーブルを並べて示しているため、個々の手順を実行する前に、コンテキスト内で完全なデータ型マッピングを確認できます。

ソース (Oracle)

create table users.xqtest15 (
  c1  number(10),   -- int にマッピング
  c2  number(1),    -- boolean にマッピング
  c3  number(3),    -- tinyint にマッピング
  c4  number(5),    -- smallint にマッピング
  c5  number(19),   -- bigint にマッピング
  c6  float(24),    -- float にマッピング
  c7  float(24),    -- double にマッピング
  c8  float(24),    -- decimal(24, 0) にマッピング
  c9  char(1),      -- varchar(128) にマッピング
  c10 varchar2(2000), -- varchar(255) にマッピング
  c11 varchar2(4000), -- varchar(65535) にマッピング
  c12 date,         -- date にマッピング
  c13 date,         -- time にマッピング (DML はサポートされていません)
  c14 date,         -- datetime にマッピング
  c15 date,         -- timestamp にマッピング
  primary key(c1)
);

ターゲット (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';

ステップ1:ECS インスタンスへのログイン

Oracle アカウントを使用して ECS インスタンスにログインします:

sqlplus ogg/ogg

ステップ2:Oracle でのソーステーブルの作成

次の SQL ステートメントを実行して、ソーステーブル 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)
);

ステップ3:OGG trandata の設定

ソーステーブルを作成した後、OGG でそのテーブルのサプリメンタル・ロギングを有効にします:

# OGG のインストールディレクトリに移動し、ggsci を起動します
cd /odata/ogg_o_12202
./ggsci

ggsci プロンプトで次のコマンドを実行します:

ggsci> dblogin userid goldengate, password ogg
ggsci> add trandata users.xqtest15
重要

add trandata コマンドの末尾にセミコロン (;) を追加しないでください。セミコロンを追加すると、"No viable tables matched specification" エラーが発生します。

ステップ4:MySQL でのチェックポイントメタデータテーブルの作成

OGG は、レプリケーションの状態を追跡するために、MySQL に 2 つのチェックポイントテーブルを必要とします。次の SQL ステートメントを実行して、これらのテーブルを作成します:

-- チェックポイントテーブル
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';

-- チェックポイント LOX テーブル
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';

ステップ5: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)
) DISTRIBUTED BY HASH(`c1`) INDEX_ALL='Y';

付録

以下の例は、各 DML 操作の同期結果を示しています。

  • INSERT 同期

    Oracle のテーブル構造とクエリ結果:

    SQL> desc users.xqtest15
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     C1                                        NOT NULL 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
    
    SQL> select * from users.xqtest15;
    
           C1        C2         C3         C4         C5         C6         C7
    --------- --------- ---------- ---------- ---------- ---------- ----------
           C8 C9
    --------- ---
    
    C10
    --------------------------------------------------------------------------------
    C11
    --------------------------------------------------------------------------------
           C12           C13           C14           C15
    ------------- ------------- ------------- -------------
            1          1        100        100      65535       3.14       3.14
         3.14 a
    aaaaabbbbbb
    
    aaaaabbbbbbbbbb
    06-JAN-20     06-JAN-20     06-JAN-20     06-JAN-20

    ADB 3.0 のテーブル作成ステートメント、クエリ結果、およびテーブル構造:

    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)
        -> ) DISTRIBUTE BY HASH(`c1`) INDEX_ALL='Y';
    Query OK, 0 rows affected (3.00 sec)
    
    mysql> select * from xqtest15;
    +------+------+------+------+-------+------+------+------+------+-------------+-----------------+------------+----------+---------------------+---------------------+
    | c1   | c2   | c3   | c4   | c5    | c6   | c7   | c8   | c9   | c10         | c11             | c12        | c13      | c14                 | c15                 |
    +------+------+------+------+-------+------+------+------+------+-------------+-----------------+------------+----------+---------------------+---------------------+
    |    1 |    1 |  100 |  100 | 65535 | 3.14 | 3.14 |    3 | a    | aaaaabbbbbb | aaaaabbbbbbbbbb | 2020-01-06 | 21:01:38 | 2020-01-06 21:01:38 | 2020-01-06 21:01:38 |
    +------+------+------+------+-------+------+------+------+------+-------------+-----------------+------------+----------+---------------------+---------------------+
    1 row in set (0.05 sec)
    
    mysql> desc xqtest15;
    +-------+----------------+------+-----+---------+---------------------+
    | Field | Type           | Null | Key | Default | Extra               |
    +-------+----------------+------+-----+---------+---------------------+
    | c1    | int            | NO   | PRI | NULL    | distribute(0) PRI(0)|
    | c2    | boolean        | YES  | MUL | NULL    |                     |
    | c3    | tinyint        | YES  | MUL | NULL    |                     |
    | c4    | smallint       | YES  | MUL | NULL    |                     |
    | c5    | bigint         | YES  | MUL | NULL    |                     |
    | c6    | float          | YES  | MUL | NULL    |                     |
    | c7    | double         | YES  | MUL | NULL    |                     |
    | c8    | decimal(24, 0) | YES  | MUL | NULL    |                     |
    | c9    | varchar        | YES  | MUL | NULL    |                     |
    | c10   | varchar        | YES  | MUL | NULL    |                     |
    | c11   | varchar(65535) | YES  | MUL | NULL    |                     |
    | c12   | date           | YES  | MUL | NULL    |                     |
    | c13   | time           | YES  | MUL | NULL    |                     |
    | c14   | datetime       | YES  | MUL | NULL    |                     |
    | c15   | timestamp      | YES  | MUL | NULL    |                     |
    +-------+----------------+------+-----+---------+---------------------+
  • UPDATE 同期

    SQL> update users.xqtest15 set c2=0,c3=120,c4=120,c5=32765,c6=99.99,c7=99.99,c8=99.99,c9='c',c10='ccc c',c11='cccc',c12=sysdate,c13=sysdate,c14=sysdate,c15=sysdate where c1=1;
    
    1 row updated.
    
    SQL> commit;
    
    Commit complete.
    
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    
    mysql> select * from xqtest15;
    +------+------+------+------+-------+-------+-------+------+------+-------+------+------------+----------+---------------------+---------------------+
    | c1   | c2   | c3   | c4   | c5    | c6    | c7    | c8   | c9   | c10   | c11  | c12        | c13      | c14                 | c15                 |
    +------+------+------+------+-------+-------+-------+------+------+-------+------+------------+----------+---------------------+---------------------+
    |    1 |    0 |  120 |  120 | 32765 | 99.99 | 99.99 |  100 | c    | ccc c | cccc | 2020-01-06 | 21:28:23 | 2020-01-06 21:28:23 | 2020-01-06 21:28:23 |
    +------+------+------+------+-------+-------+-------+------+------+-------+------+------------+----------+---------------------+---------------------+
    1 row in set (0.04 sec)
    
    mysql>
  • DELETE 同期

    SQL> delete from users.xqtest15 where c1=1;
    
    1 row deleted.
    
    SQL> commit;
    
    Commit complete.
    
    SQL>
    
    mysql> select * from xqtest15;
    Empty set (0.03 sec)
    
    mysql>
    mysql>
    mysql>
    mysql>
    mysql>
    mysql>