Tous les produits
Search
Centre de documentation

AnalyticDB:Oracle Golden Gate

Dernière mise à jour :Aug 10, 2026

Oracle GoldenGate (OGG) synchronise les données Oracle vers AnalyticDB for MySQL en temps réel. Cette rubrique présente le mappage des types de données entre Oracle et AnalyticDB for MySQL, et explique comment configurer une synchronisation de bout en bout avec OGG.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

  • Une base de données Oracle avec OGG installé dans le répertoire /odata/ogg_o_12202

  • Une instance Elastic Compute Service (ECS) qui héberge la base de données Oracle

  • Une instance AnalyticDB for MySQL

  • Une instance MySQL pour stocker les métadonnées des points de contrôle OGG

Compatibilité des types de données

OGG achemine les données d'Oracle via MySQL avant de les écrire dans AnalyticDB for MySQL. Les tableaux ci-dessous illustrent le mappage des types de données Oracle vers les types de données AnalyticDB for MySQL à chaque étape, ainsi que les opérations DML prises en charge.

Les types sont regroupés par catégorie. Pour chaque ligne, consultez la colonne Exact match : Yes indique que le type Oracle correspond exactement à un type équivalent, sans perte de précision ni de sémantique ; No signifie que le mappage est approximatif et que vous devez vérifier la compatibilité avec vos données.

Types numériques

Type Oracle Remarques sur le type Oracle Type MySQL Type AnalyticDB for MySQL Exact match INSERT UPDATE DELETE
NUMBER(3) Entier à 3 chiffres BOOL ou TINYINT(1) BOOLEAN No Pris en charge Pris en charge Pris en charge
NUMBER(3) Entier à 3 chiffres TINYINT TINYINT Yes Pris en charge Pris en charge Pris en charge
NUMBER(5) Entier à 5 chiffres SMALLINT SMALLINT Yes Pris en charge Pris en charge Pris en charge
NUMBER(10) Entier à 10 chiffres INT INT ou INTEGER Yes Pris en charge Pris en charge Pris en charge
NUMBER(19) Entier à 19 chiffres BIGINT BIGINT Yes Pris en charge Pris en charge Pris en charge
FLOAT(24) Nombre à virgule flottante simple précision FLOAT FLOAT Yes Pris en charge Pris en charge Pris en charge
FLOAT(24) Nombre à virgule flottante simple précision DOUBLE DOUBLE No Pris en charge Pris en charge Pris en charge
FLOAT(24) Nombre à virgule flottante simple précision DECIMAL DECIMAL No Pris en charge Pris en charge Pris en charge

Types de caractères

Type Oracle Remarques sur le type Oracle Type MySQL Type AnalyticDB for MySQL Exact match INSERT UPDATE DELETE
VARCHAR2(128) Chaîne de longueur variable, jusqu'à 128 octets CHAR VARCHAR(128) No Pris en charge Pris en charge Pris en charge
VARCHAR2(2000) Chaîne de longueur variable, jusqu'à 2000 octets VARCHAR(255) VARCHAR(255) No — tronqué à 255 caractères Pris en charge Pris en charge Pris en charge
VARCHAR2(4000) Chaîne de longueur variable, jusqu'à 4000 octets TEXT VARCHAR(65535) No Pris en charge Pris en charge Pris en charge

Types date et heure

Type Oracle Remarques sur le type Oracle Type MySQL Type AnalyticDB for MySQL Exact match INSERT UPDATE DELETE
DATE Stocke la date et l'heure (année, mois, jour, heure, minute, seconde) DATE DATE No — la composante horaire est perdue Pris en charge Pris en charge Pris en charge
DATE Stocke la date et l'heure (année, mois, jour, heure, minute, seconde) TIME TIME No — la composante date est perdue N/A N/A N/A
DATE Stocke la date et l'heure (année, mois, jour, heure, minute, seconde) DATETIME DATETIME Yes Pris en charge Pris en charge Pris en charge
DATE Stocke la date et l'heure (année, mois, jour, heure, minute, seconde) TIMESTAMP TIMESTAMP Yes Pris en charge Pris en charge Pris en charge
Remarque

Le type DATE d'Oracle stocke à la fois la date et l'heure. Le mappage du type DATE d'Oracle vers le type TIME de MySQL entraîne la perte de la composante date et ne prend pas en charge la synchronisation DML. Mappez le type DATE d'Oracle vers DATETIME ou TIMESTAMP afin de conserver l'intégralité des informations de date et d'heure.

Synchroniser les données Oracle vers AnalyticDB for MySQL

Le flux de synchronisation comporte trois phases principales : créer la table source dans Oracle et configurer OGG, créer les tables de métadonnées des points de contrôle dans MySQL, puis créer la table cible dans AnalyticDB for MySQL.

Les instructions DDL suivantes présentent côte à côte la table source Oracle et sa table cible correspondante dans AnalyticDB for MySQL, afin que vous puissiez visualiser le mappage complet des types dans son contexte avant d'exécuter les étapes individuelles.

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)
);

Cible (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';

Étape 1 : Se connecter à l'instance ECS

Connectez-vous à l'instance ECS en utilisant le compte Oracle :

sqlplus ogg/ogg

Étape 2 : Créer la table source dans Oracle

Exécutez l'instruction SQL suivante pour créer la table source 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)
);

Étape 3 : Configurer trandata OGG

Après avoir créé la table source, activez la journalisation supplémentaire pour celle-ci dans OGG :

# Navigate to the OGG installation directory and start ggsci
cd /odata/ogg_o_12202
./ggsci

Exécutez les commandes suivantes dans l'invite ggsci :

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

N'ajoutez pas de point-virgule (;) à la fin de la commande add trandata. L'ajout d'un point-virgule provoque l'erreur No viable tables matched specification.

Étape 4 : Créer les tables de métadonnées des points de contrôle dans MySQL

OGG nécessite deux tables de point de contrôle dans MySQL pour suivre l'état de la réplication. Exécutez les instructions SQL suivantes pour les créer :

-- 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';

Étape 5 : Créer la table cible dans AnalyticDB for MySQL

Créez la table cible qui recevra les données synchronisées depuis Oracle. Les types de colonnes suivent le mappage indiqué dans la section Compatibilité des types de données ci-dessus.

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';

Annexe

Les exemples suivants montrent les résultats de la synchronisation pour chaque opération DML.

  • Synchronisation INSERT

    Structure de la table Oracle et résultats de la requête :

    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

    Instruction de création de table ADB 3.0, résultats de la requête et structure de la table :

    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(256),
        ->  `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    |                     |
    +-------+----------------+------+-----+---------+---------------------+
  • Synchronisation 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    | cccc | 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>
  • Synchronisation 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>