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つのフェーズで実行されます:
-
ソース・データベースでの抽出: 単一のExtractプロセスをソース・データベースで使用して、ソース・データベースからすべての表を抽出します。
-
ターゲット・データベースでのレプリケーション: シャード表へのデータ・レプリケーションはシャード・データベースで実行し、重複表へのデータ・レプリケーションはシャード・カタログで実行します。
ソース・データベースおよびターゲット・データベースの構成
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>
ソース(非分散)データベース構成
-
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
-
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
ターゲット(分散)データベース構成
-
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
-
ターゲット・データベースに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;
-
ターゲット・シャードで
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;