以前にも似たような記事を書いているんですが、あれから 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 にレプリケーションします。
これらの構成に必要な コンパートメント/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 でもアカウントロックを解除可能です。下記記事を参照して下さい。
4. OCI Key-Management(旧OCI Vault)の暗号化キー作成
新規にデプロイする OCI GG Deployment のパスワードについて、OCI Key-Management(旧OCI Vault)に格納されたシークレットを使用することが必要になりました。
前準備として OCI Key-Management の暗号化キーを事前に準備しておきます。
まず OCI Key-Management の Vault を作成します。
次に暗号化キー(パスワードを暗号化するための鍵)を作成します。HSM は非常に高価なのでソフトウェアキーで作成しましょう……。
現時点で 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 をクリックします。
以下のように入力していきます。
変数名 | 入力値 |
---|---|
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」ボタンをクリックします。
Secret は以下のように入力してCreateボタンをクリックします。
変数名 | 入力値 |
---|---|
Name | 任意の文字列を入力 |
Description | 任意の説明 |
Compartment | 任意のコンパートメントを選択 |
Vault | 前述 4. で作成した暗号化キーを保持している OCI Vault を選択 |
Encryption key | 前述 4. で作成した暗号化キーを選択、AESのキーのみ利用可能です。 |
User Password, Confirm User Password | GoldenGate管理ユーザー名のパスワードを入力 |
Create Deployment画面に戻ってCreateボタンをクリックします。完了すると以下のようになります。
6. データベース接続の作成とアサイン&接続テスト
OCI Console の 左上のハンバーガーボタン ⇒ Oracle Database ⇒ GoldenGate(右側) と遷移して、Connections の Create Connectionボタンをクリックして、BaseDB および ADW-S への接続を作成します。
BaseDB は CDB と PDB をそれぞれ個別にひとつずつ、ADW-S はひとつの合計3つのデータベース接続を作成します。
- 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 を選択 |
- 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 を選択 |
- 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 | 無し |
作成したデータベース接続を OCI GG Deployment にアサインします。
データベース接続のアサイン完了後に Deployment にアサインした接続をテストします。
Test Connection で successful が出ていればデータベース接続の作成とアサインは完了です。
BaseDB 19c の CDB と PDB、ADW-S で合計3つのデータベース接続が作成&アサインされた状態です。
各データベース接続の接続先, 接続ユーザー, 用途は以下の通りです。
データベース接続(接続先) | 接続ユーザー | 用途 |
---|---|---|
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ポートフォワードで管理サービス・コンソールに接続しています。
管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) と遷移して、登録データベースのハンバーガーボタンを押して接続を確認します。BaseDB の CDB, PDB および ADW-S の三つで接続できることを確認します。
接続が成功すると「チェックポイント」「TRANDATA情報」「ハートビート」といった項目が表示されます。
8. スキーマ単位 または 表単位 のサプリメンタル・ロギング設定(Source DB の PDB のみ)
管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) ⇒ Source DB(PDB) のハンバーガーボタンと遷移して Source DB(BaseDB) の PDB に接続します。
今回はAYSHIBATスキーマに対してサプリメンタル・ロギングを有効化します。
スキーマ名に AYSHIBAT を入力して発行ボタンをクリックします。
実行後にTRANDATA情報を検索すると、以下のようにTRANDATAが設定されていることを確認できます。
下記マニュアルも参照して下さい。
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).チェックポイント表名の形式で入力してください。
チェックポイント表の作成に成功すると、以下のように作成されたチェックポイント表が表示されます。
下記マニュアルも参照して下さい。
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 のチェックは解除して下さい。
次に管理サービス・コンソールのトップ画面から 構成 ⇒ データベース(サブタブ) ⇒ Target DB のハンバーガーボタンと遷移して Target DB(ADW-S) に接続します。
ハートビートからハートビート表の保存期間、パージ頻度を設定して発行ボタンをクリックします。この時に Target Only のチェックは設定しておいて下さい。
11. GLOBALSパラメータ編集
管理サービス・コンソールのトップ画面から 構成 ⇒ パラメータ・ファイル(サブタブ) ⇒ GLOBALS の編集ボタンと遷移して GLOBALSパラメータを以下のように編集します。
ggschema <Source DB(PDB) の GG用ユーザー>
CRYPTOENGINE FIPS140
checkpointtable <Target DB のGG用DBユーザー名>.<チェックポイント表名>
今回は以下のように設定しています。
ggschema GGADMIN
CRYPTOENGINE FIPS140
checkpointtable GGADMIN.OCIGGCKPT
12. Extract の作成
管理サービス・コンソールのトップ画面から Extract を作成します。Extract の +ボタン をクリックします。
統合Extract を選択して次へをクリックします。
変数名 | 入力値 |
---|---|
プロセス名 | 任意の文字列ただし8文字まで、今回は EXT01 を入力 |
トレイル名 | 2文字のPREFIXを設定、今回は tr を入力 |
資格証明ドメイン | OracleGoldenGate を選択 |
資格証明別名 | Source DB の CDB の Alias を選択 |
PDBに登録 | 資格証明を選択後に入力できます。伝播対象表が有る PDB を選択 |
次へボタンをクリックして Extractパラメータの画面に遷移します。Extract のパラメータは以下のように設定します。GoldenGate は色々と多機能でここの設定も色々有るのですが、今回はシンプルに構成します。
EXTRACT EXT01
USERIDALIAS aysoskociggconnection01basedb1 DOMAIN OracleGoldenGate
EXTTRAIL tr
TABLE AYSPDB19C.AYSHIBAT.*;
「作成および実行」をクリックして正常に終了すると、Extractプロセス が作成されて起動します。
13. Replicat の作成
管理サービス・コンソールのトップ画面から Replicat を作成します。Replicat の +ボタン をクリックします。
Replicatプロセスの種別を選択します。色々あるのですが今回は 非統合Replicat を選択して次をクリックします
以下を入力します。変更する部分のみをピックアップしています。
変数名 | 入力値 |
---|---|
プロセス名 | 任意の文字列ただし8文字まで、今回は REP01 を入力 |
資格証明ドメイン | OracleGoldenGate を選択 |
資格証明別名 | Target DB(ADW-S) の Alias を選択 |
トレイル名 | Extract に設定した 2文字のPREFIXを入力、今回は tr を入力 |
チェックポイント表 | 上記8. で作成したチェックポイント表を選択 |
Replicat のパラメータは以下のように設定します。やはり色々と設定はあるのですが、今回はここもシンプルに構成します
REPLICAT REP01
USERIDALIAS aysoskociggconnection03adws DOMAIN OracleGoldenGate
MAP AYSPDB19C.AYSHIBAT.*, TARGET AYSHIBAT.*;
「作成」をクリックして正常に終了すると、Replicatプロセス が作成されます。この時点ではまだ起動していません。
「アクション」→「オプションを使用して開始」を選択します。
今回は CSN に 0 を指定して Replicat を起動します。ケースによっては「CSNより後」を選択して Oracle Database の SCN値 を入力して起動します。
Replicat が正常に起動したことを確認します。
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 のプロセス名はリンクになっていて、遷移先の統計(サブタブ)から各種統計を確認可能です。
Replicat のハートビート(サブタブ)からはラグ(伝播遅延)を確認できます。
まとめ
OCI GG で BaseDB のデータを ADW-S にレプリケーションできました。
皆さんどんどんご活用くださいね。彡(^)(^)