Oracle GoldenGate Microservicesの移行

Oracle GoldenGate Microservicesを使用して、非分散データベースからOracle 23ai分散データベースにデータを移行できます。

前提条件

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

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

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

  • シャード表および重複表は、ターゲット分散データベースに事前作成されている必要があります。これを行うには、ソース・データベースから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のリリース 23ai (マルチテナント) 23ai (マルチテナント)
Oracle GoldenGateのリリース 23ai (Microservices Architecture) 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;