Oracle GoldenGate Microservicesの移行

Oracle GoldenGate Microservicesを使用して、非分散データベースからOracle AI Database 26ai上のOracle Globally Distributed AI Databaseにデータを移行できます。

前提条件

  • 非分散データベースから移行する表は、シャード表および重複表に分類されている必要があります

  • シャード表に移行するすべての表のシャーディング・キーは識別されている必要があります。

  • ターゲット分散データベース・シャード・カタログは、システム管理のデータ分散方法を使用して作成されている必要があります。

  • シャード表および重複表は、ターゲット分散データベースに事前作成されている必要があります。これを行うには、ソース・データベースからDDLを抽出して変更し、対応するシャード表文および重複表文を作成します。

  • OCI Marketplaceイメージ(Oracle GoldenGate 23ai for Oracle Database (23.7.2.25.03))を使用して、Oracle GoldenGate Hubソフトウェアをインストールします。手順は、『Oracle Cloud MarketplaceでのOracle GoldenGateの使用』を参照してください。

分散データベースから分散データベースへのデータの移行

環境の例

以降のステップの例では、次のトポロジを使用します

システム/オブジェクト ソース環境 ターゲット環境
データベース・タイプ 非分散データベース Oracle Globally Distributed Database
Oracle Databaseのリリース Oracle AI Database 26ai (Multitenant) Oracle AI Database 26ai (Multitenant)
Oracle GoldenGateのリリース Oracle GoldenGate 23ai (Microservices Architecture) Oracle GoldenGate 23ai (Microservices Architecture)

CDB名

nshdcdb

sdbcdb

PDB名

nshdpdb

シャード: sdbpdb1、sdbpdb2、sdbpdb3

シャード・カタログ: scpdb

アプリケーション・スキーマ

app_schema

app_schema

シャード表

顧客、注文、品目

顧客、注文、品目

重複表

製品

製品

概要ステップ

概要レベルでは、Oracle GoldenGate Microservicesを使用した非分散データベースから分散データベースへのデータの移行は、次の2つのフェーズで実行されます:

  1. ソース・データベースでの抽出: 単一のExtractプロセスをソース・データベースで使用して、ソース・データベースからすべての表を抽出します。

  2. ターゲット・データベースでのレプリケーション: シャード表へのデータ・レプリケーションはシャード・データベースで実行し、重複表へのデータ・レプリケーションはシャード・カタログで実行します。

ソース・データベースおよびターゲット・データベースの構成

GoldenGateレプリケーションを有効にするようにソース・データベースおよびターゲット・データベースを構成します。

Source Database:
 
CDB Level.
 
1. Enable FORCE LOGGING on database.
 
SQL> ALTER DATABASE FORCE LOGGING;
 
2. Enable minimum database-level supplemental logging.
 
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
 
3. Enable GoldenGate Replication.
 
SQL> ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
 
PDB level.
 
4. Create user and grant privileges on the source PDB.
 
SQL> alter session set container=GGPDB;
SQL> create user ggadmin identified by <password>;
SQL> GRANT CONNECT, RESOURCE to ggadmin;
SQL> alter user ggadmin QUOTA UNLIMITED on users;
SQL> GRANT OGG_CAPTURE to ggadmin;
 
 
Target Databases: All Shard Databases
 
CDB Level.
 
1. Enable GoldenGate replication.
 
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
 
PDB Level. 
 
2. Create users and privileges. (local user, NOT a sharded user)
 
create user ggadmin identified by <password>;
alter user ggadmin QUOTA UNLIMITED on users;
GRANT CONNECT, RESOURCE to ggadmin;
GRANT OGG_APPLY to ggadmin;
GRANT SELECT, INSERT, UPDATE, DELETE on APP_SCHEMA.CUSTOMERS to ggadmin;
GRANT SELECT, INSERT, UPDATE, DELETE on APP_SCHEMA.ORDERS to ggadmin;
GRANT SELECT, INSERT, UPDATE, DELETE on APP_SCHEMA.LINEITEMS to ggadmin;
 
 
Catalog Database:
 
CDB Level.
 
1. Enable GoldenGate replication.
 
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
 
PDB Level. 
 
2. create users and privileges. (local user, NOT a sharded user)
 
create user ggadmin identified by <password>;
alter user ggadmin QUOTA UNLIMITED on users;
GRANT CONNECT, RESOURCE to ggadmin;
GRANT OGG_APPLY to ggadmin;
GRANT SELECT, INSERT, UPDATE, DELETE on APP_SCHEMA.PRODUCTS to ggadmin;

資格証明の追加

OCI GoldenGateインスタンス(ハブ)にログインし、ソースおよびターゲットのユーザー資格証明を作成します。

oggadminパスワードは、GoldenGate Hubノード(マーケットプレイスを使用してインストール)の場所/home/opc/ogg-credentials.jsonにあります。

export PATH=$PATH:/u01/app/ogg/bin/
 
[opc@ogg23aiora ~]$ adminclient
 
OGG (not connected) 1>
 
OGG (not connected) 6> connect http://localhost:9000 as oggadmin password <password>
Using default deployment 'GG23Test'
 
--Add credentials for the source database:
 
ALTER CREDENTIALSTORE ADD USER
 ggadmin@gg23ai.dbsubnet.shardvcn.oraclevcn.com:1521/ggpdb.dbsubnet.shardvcn.oraclevcn.com
 ALIAS ggadmin_src DOMAIN OracleGoldenGate PASSWORD <password>
 
--Add credentials for the downstream database:
 
ALTER CREDENTIALSTORE ADD USER
 ggadmin@devshdphx10.dbsubnet.shardvcn.oraclevcn.com:1521/shdpdb.dbsubnet.shardvcn.oraclevcn.com
 ALIAS ggadmin_shd1 DOMAIN OracleGoldenGate PASSWORD <password>
ALTER CREDENTIALSTORE ADD USER
 ggadmin@devshdphx11.dbsubnet.shardvcn.oraclevcn.com:1521/shdpdb.dbsubnet.shardvcn.oraclevcn.com
 ALIAS ggadmin_shd2 DOMAIN OracleGoldenGate PASSWORD <password>
ALTER CREDENTIALSTORE ADD USER
 ggadmin@devshdphx12.dbsubnet.shardvcn.oraclevcn.com:1521/shdpdb.dbsubnet.shardvcn.oraclevcn.com
 ALIAS ggadmin_shd3 DOMAIN OracleGoldenGate PASSWORD <password>
ALTER CREDENTIALSTORE ADD USER
 ggadmin@devcatphx10.dbsubnet.shardvcn.oraclevcn.com:1521/catpdb.dbsubnet.shardvcn.oraclevcn.com ALIAS
 ggadmin_cat DOMAIN OracleGoldenGate PASSWORD <password>

ソース(非分散)データベース構成

  1. SCHEMATRANDATAを有効にして、ソース・データベースでExtractを作成し、ソース表からトランザクションを取得して起動します。

    $ adminclient
    
    OGG (not connected) 6> connect http://localhost:9000 as oggadmin password <password>
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     > DBLOGIN USERIDALIAS ggadmin_src
    
    --Enable SCHEMATRANDATA:
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     3> add schematrandata app_schema
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     7> info schematrandata app_schema
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     6> info trandata app_schema.*
    
    --Add Extract
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     > ADD EXTRACT extnshd INTEGRATED TRANLOG BEGIN NOW
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     > REGISTER EXTRACT extnshd DATABASE
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     > ADD EXTTRAIL extnshd/et EXTRACT extnshd 
      
    Add the following parameters in extract parameter file
     
    OGG (http://localhost:9000 GG23Test) 3> edit params extnshd
    EXTRACT EXTNSHD
    USERIDALIAS ggadmin_src DOMAIN OracleGoldenGate
    EXTTRAIL extnshd/et
    Table app_schema.customers;
    Table app_schema.orders;
    Table app_schema.lineitems;
    Table app_schema.products;
     
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     > START EXTRACT extnshd
  2. expdpを使用して、初期ロード用にソース・データベースからデータを取得します。

    ノート:

    flashback_scnオプションは必須ではありません。これは、ReplicatのSCHEMATRANDATA (ソースで有効化)およびDBOPTIONS ENABLE_INSTANTIATION_FILTERINGパラメータがSCNを処理するためです。
    $ expdp app_schema/<password>@NSHDPDB directory=DATA_PUMP_DIR
     dumpfile=app_schema_exp.dmp logfile=app_schema_exp.log

ターゲット(分散)データベース構成

  1. impdpを使用して、ターゲット分散データベースおよびカタログで初期ロードを実行します。

    Import into shards:
    $ impdp app_schema/<password>@SDBPDB1 directory=DATA_PUMP_DIR dumpfile=app_schema_exp.dmp
     logfile=app_schema_imp.log tables=CUSTOMERS,ORDERS,LINEITEMS, CONTENT=DATA_ONLY
    $ impdp app_schema/xxxxx@SDBPDB2 directory=DATA_PUMP_DIR dumpfile=app_schema_exp.dmp
     logfile=app_schema_imp.log tables=CUSTOMERS,ORDERS,LINEITEMS, CONTENT=DATA_ONLY
    $ impdp app_schema/xxxxx@SDBPDB3 directory=DATA_PUMP_DIR dumpfile=app_schema_exp.dmp
     logfile=app_schema_imp.log tables=CUSTOMERS,ORDERS,LINEITEMS, CONTENT=DATA_ONLY
     
    Import into shard catalog:
    $ impdp app_schema/<password>@SCPDB directory=DATA_PUMP_DIR dumpfile=app_schema_exp.dmp
     logfile=app_schema_imp.log tables=PRODUCTS CONTENT=DATA_ONLY
  2. ターゲット・データベースに3つ(シャードと同じ数)のReplicatを作成します。

    Replicat for sharded tables on Shard 1
    ======================================
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     34> DBLOGIN USERIDALIAS ggadmin_shd1
    
    OGG (http://localhost:9000 GG23Test as ggadmin_shd1@SHDCDB)
     42> ADD CHECKPOINTTABLE ggadmin.GGCHKPT
    
    OGG (http://localhost:9000 GG23Test as ggadmin_shd2@SHDCDB)
     51> ADD REPLICAT REP1,PARALLEL INTEGRATED, EXTTRAIL extnshd/et
     CHECKPOINTTABLE ggadmin.GGCHKPT
    
    Add the following parameters in replicat for shard1
    
      
    OGG (http://localhost:9000 GG23Test) 4> view params REP1
      
    REPLICAT rep1
    USERIDALIAS ggadmin_shd1 DOMAIN OracleGoldenGate
    DBOPTIONS ENABLE_INSTANTIATION_FILTERING
    MAP_PARALLELISM 3
    MIN_APPLY_PARALLELISM 2
    MAX_APPLY_PARALLELISM 10
    MAP app_schema.customers, TARGET app_schema.customers;
    MAP APP_SCHEMA.orders, target APP_SCHEMA.orders;
    MAP APP_SCHEMA.lineitems, target APP_SCHEMA.lineitems;
     
    
    Replicat for sharded tables on Shard 2
    ======================================
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     34> DBLOGIN USERIDALIAS ggadmin_shd2
    
    OGG (http://localhost:9000 GG23Test as ggadmin_shd1@SHDCDB)
     42> ADD CHECKPOINTTABLE ggadmin.GGCHKPT
    
    OGG (http://localhost:9000 GG23Test as ggadmin_shd2@SHDCDB)
     51> ADD REPLICAT REP2,PARALLEL INTEGRATED, EXTTRAIL extnshd/et
     CHECKPOINTTABLE ggadmin.GGCHKPT
    
    Add the following parameters in replicat for shard2
    
      
    OGG (http://localhost:9000 GG23Test) 4> view params REP2
      
    REPLICAT rep2
    USERIDALIAS ggadmin_shd2 DOMAIN OracleGoldenGate
    DBOPTIONS ENABLE_INSTANTIATION_FILTERING
    MAP_PARALLELISM 3
    MIN_APPLY_PARALLELISM 2
    MAX_APPLY_PARALLELISM 10
    MAP app_schema.customers, TARGET app_schema.customers;
    MAP APP_SCHEMA.orders, target APP_SCHEMA.orders;
    MAP APP_SCHEMA.lineitems, target APP_SCHEMA.lineitems;
    
    
    Replicat for sharded tables on Shard 3
    ======================================
    OGG (http://localhost:9000 GG23Test as ggadmin_src@GGDB23)
     34> DBLOGIN USERIDALIAS ggadmin_shd3
    
    OGG (http://localhost:9000 GG23Test as ggadmin_shd1@SHDCDB)
     42> ADD CHECKPOINTTABLE ggadmin.GGCHKPT
    
    OGG (http://localhost:9000 GG23Test as ggadmin_shd2@SHDCDB)
     51>  ADD REPLICAT REP3,PARALLEL INTEGRATED, EXTTRAIL extnshd/et
     CHECKPOINTTABLE ggadmin.GGCHKPT
    
    Add the following parameters in replicat for shard3
    
      
    OGG (http://localhost:9000 GG23Test) 4> view params REP3
      
    REPLICAT rep3
    USERIDALIAS ggadmin_shd3 DOMAIN OracleGoldenGate
    DBOPTIONS ENABLE_INSTANTIATION_FILTERING
    MAP_PARALLELISM 3
    MIN_APPLY_PARALLELISM 2
    MAX_APPLY_PARALLELISM 10
    MAP app_schema.customers, TARGET app_schema.customers;
    MAP APP_SCHEMA.orders, target APP_SCHEMA.orders;
    MAP APP_SCHEMA.lineitems, target APP_SCHEMA.lineitems;
    
    
    #### NOTE ####
    
    You can remove DBOPTIONS ENABLE_INSTANTIATION_FILTERING parameter
     when Replicat has processed all transactions beyond the instantiation SCN.
    
    
    
     
    Replicat for duplicate tables on Catalog
    ========================================
     
    OGG (http://localhost:9000 GG23Test as ggadmin_shd3@SHDCDB)
     67> DBLOGIN USERIDALIAS ggadmin_cat
    
    OGG (http://localhost:9000 GG23Test as ggadmin_cat@CATCDB)
     68> ADD CHECKPOINTTABLE ggadmin.GGCHKPT
    
    OGG (http://localhost:9000 GG23Test as ggadmin_cat@CATCDB)
     69> ADD REPLICAT REPC, PARALLEL INTEGRATED, EXTTRAIL extnshd/et
     CHECKPOINTTABLE ggadmin.GGCHKPT
    
    Add the following parameters in replicat for catalog 
    
    OGG (http://localhost:9000 GG23Test as ggadmin_cat@CATCDB) > edit params repcat
      
    REPLICAT repc
    USERIDALIAS ggadmin_cat DOMAIN OracleGoldenGate
    DBOPTIONS ENABLE_INSTANTIATION_FILTERING
    MAP_PARALLELISM 3
    MIN_APPLY_PARALLELISM 2
    MAX_APPLY_PARALLELISM 10
    MAP APP_SCHEMA.products, target APP_SCHEMA.products;
  3. ターゲット・シャードでAFTERCSNを使用してReplicatを起動します。

    OGG (http://localhost:9000 GG23Test as ggadmin_shd3@SHDCDB)
     64> start replicat rep1
    OGG (http://localhost:9000 GG23Test as ggadmin_shd3@SHDCDB) 64> start replicat rep2
    OGG (http://localhost:9000 GG23Test as ggadmin_shd3@SHDCDB) 64> start replicat rep3
    OGG (http://localhost:9000 GG23Test as ggadmin_shd3@SHDCDB) 64> start replicat repc  
    
    OGG (http://localhost:9000 GG23Test as ggadmin_cat@CATCDB) 17> info all
    Program     Status      Group       Type            Lag at Chkpt    Time Since Chkpt
    
    ADMINSRVR   RUNNING   
    DISTSRVR    RUNNING   
    PMSRVR      RUNNING   
    RECVSRVR    RUNNING   
    EXTRACT     RUNNING     EXTNSHD     INTEGRATED      00:00:00        00:00:08    
    REPLICAT    RUNNING     REP1        PARALLEL INT    00:00:00        00:00:09    
    REPLICAT    RUNNING     REP2        PARALLEL INT    00:00:00        00:00:00    
    REPLICAT    RUNNING     REP3        PARALLEL INT    00:00:00        00:00:03    
    REPLICAT    RUNNING     REPC        PARALLEL INT    00:00:00        00:00:00 

検証

非シャード表からシャードに行がレプリケートされていることを確認します。たとえば、ソース表に9000行あり、3つのターゲット・シャードがある場合は、各シャードに約3000行が分散されている必要があります。

テスト環境の作成

テスト用のソース非分散データベース環境を作成する方法

Login to Database
 
Create tablespace
SQL> create tablespace customers_tsp datafile size 100m autoextend on;
 
Create app_schema
SQL> create user app_schema identified by <password>;
SQL> grant connect, resource, alter session to app_schema;
SQL> grant create view, create database link, alter database link, create materialized view, create tablespace to app_schema;
SQL> grant unlimited tablespace to app_schema;
 
Create tables
SQL> CREATE TABLE Customers
(
  CustId      VARCHAR2(60) NOT NULL,
  FirstName   VARCHAR2(60),
  LastName    VARCHAR2(60),
  Class       VARCHAR2(10),
  Geo         VARCHAR2(8),
  CustProfile VARCHAR2(4000),
 CONSTRAINT pk1_customers PRIMARY KEY (CustId)
) TABLESPACE customers_tsp;
 
 
SQL> CREATE TABLE Orders
(
  OrderId     INTEGER NOT NULL,
  CustId      VARCHAR2(60) NOT NULL,
  OrderDate   TIMESTAMP NOT NULL,
  SumTotal    NUMBER(19,4),
  Status      CHAR(4),
  constraint  pk_orders primary key (CustId, OrderId)
 ) TABLESPACE customers_tsp;
 
 
SQL> CREATE TABLE LineItems
(
  OrderId     INTEGER NOT NULL,
  CustId      VARCHAR2(60) NOT NULL,
  ProductId   INTEGER NOT NULL,
  Price       NUMBER(19,4),
  Qty         NUMBER,
  constraint  pk_items primary key (CustId, OrderId, ProductId)
) TABLESPACE customers_tsp;
 

SQL> CREATE TABLE "PRODUCTS"
   (    "PRODUCTID" NUMBER(*,0) GENERATED BY DEFAULT AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE  NOKEEP  NOSCALE  NOT NULL ENABLE,
    "NAME" VARCHAR2(128),
    "DESCRURI" VARCHAR2(128),
    "LASTPRICE" NUMBER(19,4),
     PRIMARY KEY ("PRODUCTID")
)  TABLESPACE USERS;

テスト用のターゲット分散データベース環境を作成する方法

create tablespace set tsp_set_1 using template (datafile size 100m autoextend on next 10M maxsize unlimited extent
management local segment space management auto) in shardspace shardspaceora;
 
create tablespace products_tsp datafile size 100m autoextend on;
 
create user app_schema identified by xxxxxx;
grant connect, resource, alter session to app_schema;
 
grant create view, create database link, alter database link, create materialized view, create tablespace to app_schema;
 
grant unlimited tablespace to app_schema;
 
Tables creation:
 
sqlplus app_schema/<password>@SCPDB
 
alter session enable shard ddl;
 
CREATE SHARDED TABLE Customers
(
  CustId      VARCHAR2(60) NOT NULL,
  FirstName   VARCHAR2(60),
  LastName    VARCHAR2(60),
  Class       VARCHAR2(10),
  Geo         VARCHAR2(8),
  CustProfile VARCHAR2(4000),
  CONSTRAINT pk1_customers PRIMARY KEY (CustId)
) TABLESPACE SET tsp_set_1
PARTITION BY CONSISTENT HASH (CustId) PARTITIONS AUTO;
 
CREATE SHARDED TABLE Orders
(
  OrderId     INTEGER NOT NULL,
  CustId      VARCHAR2(60) NOT NULL,
  OrderDate   TIMESTAMP NOT NULL,
  SumTotal    NUMBER(19,4),
  Status      CHAR(4),
  constraint  pk_orders primary key (CustId, OrderId),
  constraint  fk_orders_parent foreign key (CustId) 
    references Customers on delete cascade
) partition by reference (fk_orders_parent);
 
 
CREATE SHARDED TABLE LineItems
(
  OrderId     INTEGER NOT NULL,
  CustId      VARCHAR2(60) NOT NULL,
  ProductId   INTEGER NOT NULL,
  Price       NUMBER(19,4),
  Qty         NUMBER,
  constraint  pk_items primary key (CustId, OrderId, ProductId),
  constraint  fk_items_parent foreign key (CustId, OrderId)
    references Orders on delete cascade
) partition by reference (fk_items_parent);
 
CREATE DUPLICATED TABLE Products
(
  ProductId  INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  Name       VARCHAR2(128),
  DescrUri   VARCHAR2(128),
  LastPrice  NUMBER(19,4)
) TABLESPACE PRODUCTS_TSP;