5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI GoldenGate(OCI GG) で BaseDB 19c から ADW-S にレプリケーションしてみる。(Oracle Cloud Infrastructure)

Last updated at Posted at 2023-11-02

以前にも似たような記事を書いているんですが、あれから OCI GoldenGate(以下、OCI GG)もアップデートされてUI等が変更されてたりするので、その整理も兼ねて改めて書いてみますやで。
彡(゚)(゚)

1. 参考にした記事&マニュアル

以前書いた記事とOCIチュートリアル401とマニュアルを参考にしています。やっている事はOCIチュートリアル401と同じなのですが、本記事では OCI GG で新たに必要になった OCI Secret作成、BaseDB の CDB/PDB接続 や ハートビート表の動作確認などを加味して記載しています。

Oracle GoldenGate Microservicesアーキテクチャを使用してのステップ・バイ・ステップ・データ・レプリケーション 21c
1.1 Oracle GoldenGate Microservices Architectureによるデータ・レプリケーションの設定
https://docs.oracle.com/cd/F51462_01/ggmas/quickstart-your-data-replication-oracle-goldengate-microservices-architecture.html#GUID-FAAAFDB1-FF77-4EF5-A85C-3FBBB832CCD1

2. 構成図

Private Subnet に BaseDB, ADW-S, OCI GoldenGate を作成して BaseDB 19c → ADW-S にレプリケーションします。

OCIGG2_001.png

これらの構成に必要な コンパートメント/VCN/Subnet/BaseDB/ADW-S等は作成済みのものとします。
伝播対象のDBユーザーやテーブルも予め作成しておきます。Source DB(PDB) と Target DB(ADW-S) の両方に作成しておきます。

CREATE TABLE AYSHIBAT.TEST_TBL01 (
    ID   NUMBER
  , NAME VARCHAR2(20)
);

ALTER TABLE AYSHIBAT.TEST_TBL01 ADD CONSTRAINT TEST_TBL01_PK PRIMARY KEY(ID) USING INDEX;

3. データベースの設定(ユーザー作成、権限付与、パラメータ変更など)

下記のマニュアルに従って OCI GG用 の DBユーザー を作成&権限付与します。

Oracle DatabaseでのOracle GoldenGateの使用 21c (21.3.0)
3.1.1.1 適切なユーザー権限の付与
https://docs.oracle.com/cd/F51462_01/oracle-db/establishing-oracle-goldengate-credentials.html#GUID-F9EBB989-E22F-4355-BE60-40F957B8515E

下記のパラメータ(ENABLE_GOLDENGATE_REPLICATION)も Source/Target の両方で TRUE に変更します。

Oracle Database データベース・リファレンス 19c
1.119 ENABLE_GOLDENGATE_REPLICATION
https://docs.oracle.com/cd/F19136_01/refrn/ENABLE_GOLDENGATE_REPLICATION.html#GUID-600FC071-1516-49B2-B3B3-C1C5430C5917

  • Source側(BaseDB, CDB$ROOT) の共通ユーザー(C##~)作成、権限付与、パラメータ変更、サプリメンタル・ロギング設定
CREATE USER C##GGADMIN IDENTIFIED BY xxxxxxxxxx
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

GRANT CREATE SESSION         TO C##GGADMIN CONTAINER = ALL;
GRANT RESOURCE               TO C##GGADMIN CONTAINER = ALL;
GRANT ALTER SYSTEM           TO C##GGADMIN CONTAINER = ALL;
GRANT ALTER USER             TO C##GGADMIN CONTAINER = ALL;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('C##GGADMIN', container => 'ALL');
GRANT SELECT ANY DICTIONARY  TO C##GGADMIN CONTAINER = ALL;
GRANT SELECT ANY TRANSACTION TO C##GGADMIN CONTAINER = ALL;

-- For User Objects
GRANT DBA TO C##GGADMIN CONTAINER = ALL;
GRANT UNLIMITED TABLESPACE TO C##GGADMIN CONTAINER = ALL;

-- DB Setting
ALTER SYSTEM SET enable_goldengate_replication = TRUE SCOPE=BOTH SID='*';
ALTER DATABASE FORCE LOGGING;
-- 19c以降のサプリメンタル・ロギング有効化
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA SUBSET DATABASE REPLICATION;
-- 19cより前のサプリメンタル・ロギング有効化
-- ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

サプリメンタル・ロギングの「~ SUBSET DATABASE REPLICATION;」は 19c の新機能です。下記マニュアルを参照して下さい。

Oracle Database データベース新機能ガイド 19c
粒度の高いサプリメンタル・ロギング
https://docs.oracle.com/cd/F19136_01/newft/new-features.html#GUID-1466A888-5F47-41BA-AF7D-9A4B30F5F8D2

  • Source側(BaseDB, PDB) の GG用ユーザー(GGADMIN)作成、権限付与
CREATE USER GGADMIN IDENTIFIED BY xxxxxxxxxx
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

-- For GG
GRANT CREATE SESSION TO GGADMIN CONTAINER=CURRENT;
GRANT ALTER ANY TABLE TO GGADMIN CONTAINER=CURRENT;
GRANT RESOURCE TO GGADMIN CONTAINER=CURRENT;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('GGADMIN');

-- For User Objects
GRANT DBA TO GGADMIN CONTAINER=CURRENT;
GRANT UNLIMITED TABLESPACE TO GGADMIN CONTAINER = CURRENT;
  • Target側(ADW-S) の設定
    Autonomous Database の場合は事前定義ユーザーの GGADMIN のアカウントロック解除+パスワード設定を行います。
CONNECT ADMIN/xxxxxxxx@(description=;
ALTER USER GGADMIN ACCOUNT UNLOCK;
ALTER USER GGADMIN IDENTIFIED BY xxxxxxxx;

ADB の場合は GUI でもアカウントロックを解除可能です。下記記事を参照して下さい。

image.png

4. OCI Key-Management(旧OCI Vault)の暗号化キー作成

新規にデプロイする OCI GG Deployment のパスワードについて、OCI Key-Management(旧OCI Vault)に格納されたシークレットを使用することが必要になりました。
前準備として OCI Key-Management の暗号化キーを事前に準備しておきます。

まず OCI Key-Management の Vault を作成します。
OCIGG2_003.png

次に暗号化キー(パスワードを暗号化するための鍵)を作成します。HSM は非常に高価なのでソフトウェアキーで作成しましょう……。
OCIGG2_004.png

現時点で OCI GG で使用する暗号化キーのアルゴリズムは AES のみが使用可能です。下記マニュアルを参照してください。

Create a deployment
https://docs.oracle.com/en/cloud/paas/goldengate-service/llyhq/index.html#GUID-899C1348-58CA-43EE-B775-EAD3B365A7A9
Note:Only AES keys, Software protected keys, and HSM keys are supported. RSA and ECDSA keys are not supported for GoldenGate password secret keys.

5. OCI GG Deproyment の作成

OCI Console の 左上のハンバーガーボタン ⇒ Oracle Database ⇒ GoldenGate(右側)と遷移して、Deployments の Create deployment をクリックします。

OCIGG2_007.png
OCIGG2_008.png
OCIGG2_009.png

以下のように入力していきます。

変数名 入力値
Name 任意の文字列を入力
Description 任意の説明
Compartment 任意のコンパートメントを選択
oCPU count 必要なoCPU数 ※後から変更可能です。
Subnet OCI GG をデプロイする VCN Subnet を選択
Choose a license type ライセンス持ち込み以外は License included を選択します。
GoldenGate instance name 任意の文字列を入力
Administrator usrename GoldenGate管理ユーザー名を入力、DBユーザーとは異なります。
Password secret GoldenGate管理ユーザーのパスワードを格納したSecretを選択 ※この時点では未作成で選択不可

パスワードは直接入力が不可になって OCI Secret を選択する方式になっています。
この時点では未作成なので画面右下の「Create password secret」ボタンをクリックします。

OCIGG2_010.png

Secret は以下のように入力してCreateボタンをクリックします。

変数名 入力値
Name 任意の文字列を入力
Description 任意の説明
Compartment 任意のコンパートメントを選択
Vault 前述 4. で作成した暗号化キーを保持している OCI Vault を選択
Encryption key 前述 4. で作成した暗号化キーを選択、AESのキーのみ利用可能です。
User Password, Confirm User Password GoldenGate管理ユーザー名のパスワードを入力

Create Deployment画面に戻ってCreateボタンをクリックします。完了すると以下のようになります。
OCIGG2_011.png

6. データベース接続の作成とアサイン&接続テスト

OCI Console の 左上のハンバーガーボタン ⇒ Oracle Database ⇒ GoldenGate(右側) と遷移して、Connections の Create Connectionボタンをクリックして、BaseDB および ADW-S への接続を作成します。

BaseDB は CDB と PDB をそれぞれ個別にひとつずつ、ADW-S はひとつの合計3つのデータベース接続を作成します。
OCIGG2_012.png

  • BaseDB CDB接続の作成

BaseDB の CDB接続 は下記のとおり入力しています。

変数名 入力値
Name 任意の文字列を入力
Description 任意の説明
Compartment 任意のコンパートメントを選択
Type Oracle Database を選択
Enter Connection details for Oracle Database 今回は Enter Database Information を選択
Database Connection String SCANアドレス+CDBサービス名の接続文字列を設定します
Database username 前述 3. で作成した C##~ユーザーを入力
Database user password C##~ユーザーのパスワードを入力
Traffic routing method BaseDB/ADW/OCIGG を Private Subnet に作成しているので Dedicated endpoint を選択
Session mode 今回作成した BaseDB は RAC のため Redirect を選択

OCIGG2_013.png
OCIGG2_014.png

  • BaseDB PDB接続の作成

BaseDB の PDB接続 は下記のとおり入力しています。

変数名 入力値
Name 任意の文字列を入力
Description 任意の説明
Compartment 任意のコンパートメントを選択
Type Oracle Database を選択
Enter Connection details for Oracle Database 今回は Enter Database Information を選択
Database Connection String SCANアドレス+PDBサービス名の接続文字列を設定します
Database username 前述 3. で作成した GGADMIN を入力
Database user password 前述 3. で作成した PDB の GGADMIN のパスワードを入力
Traffic routing method BaseDB/ADW/OCIGG を Private Subnet に作成しているので Dedicated endpoint を選択
Session mode 今回作成した BaseDB は RAC のため Redirect を選択

OCIGG2_049.png
OCIGG2_050.png

  • ADW-S接続の作成

ADW-S(Autonomous Database Warehourse)は下記のとおり入力しています。今回の ADW-S は Private Endpoint で作成しているため、通常の Oracle Database相当の接続設定としています。

変数名 入力値
Name 任意の文字列を入力
Description 任意の説明
Compartment 任意のコンパートメントを選択
Type Oracle Database を選択
Enter Connection details for Oracle Database 今回は Enter Database Information を選択
Database Connection String ADW-SのTLS(※1521ポート)接続文字列を設定します。ADW-Sの事前定義DBサービスはlowサービスを選択します。
Database username 前述 3. でロック解除した GGADMIN を入力
Database user password 前述 3. で設定した GGADMINユーザーのパスワードを入力
Traffic routing method BaseDB/ADW/OCIGG を Private Subnet に作成しているので Dedicated endpoint を選択
Session mode Private Subnet に作成した ADW-S のエンドポイントは Single のため Direct を選択
Subnet Private Subnetを選択
Database node IP 無し

OCIGG2_023.png
OCIGG2_024.png

作成したデータベース接続を OCI GG Deployment にアサインします。

OCIGG2_015.png
OCIGG2_016.png

データベース接続のアサイン完了後に Deployment にアサインした接続をテストします。

OCIGG2_019.png
OCIGG2_020.png

Test Connection で successful が出ていればデータベース接続の作成とアサインは完了です。
BaseDB 19c の CDB と PDB、ADW-S で合計3つのデータベース接続が作成&アサインされた状態です。

OCIGG2_025.png

各データベース接続の接続先, 接続ユーザー, 用途は以下の通りです。

データベース接続(接続先) 接続ユーザー 用途
BaseDB CDB C##GGADMIN Extractで使用
BaseDB PDB GGADMIN スキーマ or 表単位の ADD TRANDATA, ハートビート表(Source側)作成で使用
ADW-S GGADMIN ハートビート表(Target側)作成、チェックポイント表作成、Replicatで使用

7. Oracle GoldenGate管理サービス・コンソールへの接続 と コンソールからのデータベース接続確認

OCI GG Deployment のトップ画面からOracle GoldenGate管理サービス・コンソールに接続します。

今回は Private Subnet に OCI GG Deployment を作成しており、手元のPCからの直接接続は不可だったため、Compute に SSH接続して SSHポートフォワードで管理サービス・コンソールに接続しています。

OCIGG2_026.png
OCIGG2_027.png

管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) と遷移して、登録データベースのハンバーガーボタンを押して接続を確認します。BaseDB の CDB, PDB および ADW-S の三つで接続できることを確認します。

OCIGG2_028.png

接続が成功すると「チェックポイント」「TRANDATA情報」「ハートビート」といった項目が表示されます。

8. スキーマ単位 または 表単位 のサプリメンタル・ロギング設定(Source DB の PDB のみ)

管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) ⇒ Source DB(PDB) のハンバーガーボタンと遷移して Source DB(BaseDB) の PDB に接続します。

今回はAYSHIBATスキーマに対してサプリメンタル・ロギングを有効化します。
スキーマ名に AYSHIBAT を入力して発行ボタンをクリックします。

OCIGG2_029.png

実行後にTRANDATA情報を検索すると、以下のようにTRANDATAが設定されていることを確認できます。

OCIGG2_030.png

下記マニュアルも参照して下さい。

Oracle GoldenGate Microservicesアーキテクチャを使用してのステップ・バイ・ステップ・データ・レプリケーション
4.4 Extractを作成する前に
https://docs.oracle.com/cd/F44199_01/ggmas/working-data-replications.html#GUID-C3B8B4EE-B13F-43BF-AE94-CFCB01B26F60

9. チェックポイント表の作成(Target DB のみ)

チェックポイント表は Replicat がレプリケーションの進行状況を記録するための GoldenGate内部表 です。

管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) ⇒ Target(ADW-S) のハンバーガーボタンと遷移して Targetデータベース(ADW-S)に接続します。

チェックポイントからチェックポイント表の作成を発行します。
チェックポイント表の名前はGG用DBユーザーのユーザー名(ADBの場合はGGADMIN).チェックポイント表名の形式で入力してください。

OCIGG2_031.png

チェックポイント表の作成に成功すると、以下のように作成されたチェックポイント表が表示されます。

OCIGG2_032.png

下記マニュアルも参照して下さい。

Oracle GoldenGate Microservicesアーキテクチャを使用してのステップ・バイ・ステップ・データ・レプリケーション
3.6 Replicatを作成する前に
https://docs.oracle.com/cd/F44199_01/ggmas/working-data-replications.html#GUID-498DD0DD-25DD-4578-92B6-F3A41E3AE6AB

10. ハートビート表の作成(Source DB(PDB) と Target両方)

ハートビート表は GoldenGate の伝播状況、特にラグ(伝播遅延)を確認するのに極めて有益な情報となります。

17.4 自動ハートビート表を使用した監視
https://docs.oracle.com/cd/F51462_01/admin/monitoring-oracle-goldengate-processing.html#GUID-59E61274-BDDE-4D4B-9681-ED0BC39E9FCF

管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) ⇒ Source DB(PDB) のハンバーガーボタンと遷移して Source DB(BaseDB) の PDB に接続します。

ハートビートからハートビート表の更新頻度、保存期間、パージ頻度を設定して発行ボタンをクリックします。この時に Target Only のチェックは解除して下さい。

OCIGG2_033.png

次に管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) ⇒ Target DB のハンバーガーボタンと遷移して Target DB(ADW-S) に接続します。

ハートビートからハートビート表の保存期間、パージ頻度を設定して発行ボタンをクリックします。この時に Target Only のチェックは設定しておいて下さい。

OCIGG2_034.png

11. GLOBALSパラメータ編集

管理サービス・コンソールのトップ画面から 構成 ⇒ パラメータ・ファイル(サブタブ) ⇒ GLOBALS の編集ボタンと遷移して GLOBALSパラメータを以下のように編集します。

ggschema <Source DB(PDB)  GG用ユーザー>
CRYPTOENGINE FIPS140
checkpointtable <Target DB GGDBユーザー名>.<チェックポイント表名>

今回は以下のように設定しています。

ggschema GGADMIN
CRYPTOENGINE FIPS140
checkpointtable GGADMIN.OCIGGCKPT

OCIGG2_045.png

12. Extract の作成

管理サービス・コンソールのトップ画面から Extract を作成します。Extract の +ボタン をクリックします。

OCIGG2_035.png

統合Extract を選択して次へをクリックします。

OCIGG2_036.png

変数名 入力値
プロセス名 任意の文字列ただし8文字まで、今回は EXT01 を入力
トレイル名 2文字のPREFIXを設定、今回は tr を入力
資格証明ドメイン OracleGoldenGate を選択
資格証明別名 Source DB の CDB の Alias を選択
PDBに登録 資格証明を選択後に入力できます。伝播対象表が有る PDB を選択

OCIGG2_037.png

次へボタンをクリックして Extractパラメータの画面に遷移します。Extract のパラメータは以下のように設定します。GoldenGate は色々と多機能でここの設定も色々有るのですが、今回はシンプルに構成します。

EXTRACT EXT01
USERIDALIAS aysoskociggconnection01basedb1 DOMAIN OracleGoldenGate
EXTTRAIL tr
TABLE AYSPDB19C.AYSHIBAT.*;

OCIGG2_038.png

「作成および実行」をクリックして正常に終了すると、Extractプロセス が作成されて起動します。

OCIGG2_039.png

13. Replicat の作成

管理サービス・コンソールのトップ画面から Replicat を作成します。Replicat の +ボタン をクリックします。

OCIGG2_040.png

Replicatプロセスの種別を選択します。色々あるのですが今回は 非統合Replicat を選択して次をクリックします

OCIGG2_041.png

以下を入力します。変更する部分のみをピックアップしています。

変数名 入力値
プロセス名 任意の文字列ただし8文字まで、今回は REP01 を入力
資格証明ドメイン OracleGoldenGate を選択
資格証明別名 Target DB(ADW-S) の Alias を選択
トレイル名 Extract に設定した 2文字のPREFIXを入力、今回は tr を入力
チェックポイント表 上記8. で作成したチェックポイント表を選択

OCIGG2_042.png

Replicat のパラメータは以下のように設定します。やはり色々と設定はあるのですが、今回はここもシンプルに構成します

REPLICAT REP01
USERIDALIAS aysoskociggconnection03adws DOMAIN OracleGoldenGate
MAP AYSPDB19C.AYSHIBAT.*, TARGET AYSHIBAT.*;

OCIGG2_043.png

「作成」をクリックして正常に終了すると、Replicatプロセス が作成されます。この時点ではまだ起動していません。

OCIGG2_051.png

「アクション」→「オプションを使用して開始」を選択します。

OCIGG2_052.png

今回は CSN に 0 を指定して Replicat を起動します。ケースによっては「CSNより後」を選択して Oracle Database の SCN値 を入力して起動します。

OCIGG2_053.png

Replicat が正常に起動したことを確認します。

OCIGG2_054.png

14. レプリケーションの確認(INSERT, UPDATE, DELETE, 統計, ハートビート)

レプケーションを確認します。まず Source DB(BaseDB PDB)側 でデータを INSERT してみます。

SQL> SHOW USER;
USER is "AYSHIBAT"

SQL> SHOW CON_NAME;

CON_NAME
------------------------------
AYSPDB19C

SQL> INSERT INTO TEST_TBL01 SELECT LEVEL, 'REC' || LEVEL FROM DUAL CONNECT BY LEVEL <= 10;

10 rows created.

SQL> COMMIT;

Commit complete.

Target(ADW-S)側 で対象テーブルを SELECT してみます。

SQL> SHOW USER
USER is "AYSHIBAT"

SQL> SHOW CON_NAME

CON_NAME
------------------------------
L5LSSTUM9V4ZR9T_AYSADW01

SQL> SELECT * FROM TEST_TBL01;

        ID NAME
---------- --------------------
         1 REC1
         2 REC2
         3 REC3
         4 REC4
         5 REC5
         6 REC6
         7 REC7
         8 REC8
         9 REC9
        10 REC10

10 rows selected.

SQL>

レプリケーションされてるやで!彡(^)(^)

UPDATE や DELETE も Source DB(BaseDB PDB)側 で実行してみます。

SQL> SHOW USER;
USER is "AYSHIBAT"

SQL> SHOW CON_NAME;

CON_NAME
------------------------------
AYSPDB19C

SQL> UPDATE TEST_TBL01 SET NAME = 'XXXXXXXX' WHERE ID = 10;

1 row updated.

SQL> DELETE FROM TEST_TBL01 WHERE ID = 9;

1 row deleted.

SQL> COMMIT;

Commit complete.

SQL>

Target DB(ADW-S)側で結果を確認してみます。

SQL> SHOW USER;
USER is "AYSHIBAT"

SQL> SHOW CON_NAME;

CON_NAME
------------------------------
L5LSSTUM9V4ZR9T_AYSADW01

SQL> SELECT * FROM TEST_TBL01;

        ID NAME
---------- --------------------
         1 REC1
         2 REC2
         3 REC3
         4 REC4
         5 REC5
         6 REC6
         7 REC7
         8 REC8
        10 XXXXXXXX

9 rows selected.

SQL>

Extract, Replicat のプロセス名はリンクになっていて、遷移先の統計(サブタブ)から各種統計を確認可能です。

OCIGG2_046.png
OCIGG2_047.png

Replicat のハートビート(サブタブ)からはラグ(伝播遅延)を確認できます。

OCIGG2_048.png

まとめ

OCI GG で BaseDB のデータを ADW-S にレプリケーションできました。
皆さんどんどんご活用くださいね。彡(^)(^)

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?