Oracle Linux 9上のPostgreSQLからOCI上のマネージドサービス(PaaS)として提供されているAutonomous Database (Oracle Autonomous Transaction Processing) に対し、OCI GoldenGateを利用した異種データベース間のリアルタイムデータ同期の設定を行いました。
今回の検証ではOCI GoldenGate 21cを利用しています。
検証環境の準備
OCIのアーキテクチャ
ソースデータベースとターゲットデータベースは下記ように配備されています。
それぞれのデータベースはOCI GoldenGateのPrivate Endpointを利用して接続を行います。
ソースデータベースの準備 (PostgreSQL on Linux Compute VM)
前々回の記事をご参照ください。
OCI 上で構築する PostgreSQL の稼働環境
ソースデータベースの準備 (PostgreSQL on Linux Compute VM)
ターゲットデータベースAutonomous Database (ATP) の作成
ナビゲーション・メニュー より、Oracle Database > Autonomous Databaseにアクセスします。
Autonomous Databaseの作成を選択し、ATPインスタンスを作成します。
ウィザード内の入力項目の設定値は下記スクリーンショットを参考にしてください。
ATPインスタンスの作成が完了したら、OCI GoldenGateとの接続に利用するデータベースユーザーを設定します。Autonomous Databaseでは、OCI GoldenGateとの接続ユーザーであるGGADMINユーザーが事前定義されています。データベース・アクションのデータベース・ユーザーから、ユーザー管理画面にアクセスし、GGADMINユーザーのロックを解除し、新規パスワードを設定します。
次にレプリケーション対象となるSRC_OCIGGLスキーマを作成します。
データベースアクションよりSQLの実行画面から、下記SQLを実行します。
CREATE USER SRC_OCIGGLL IDENTIFIED BY “PASSWORD” DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
grant create session to "SRC_OCIGGLL";
alter user "SRC_OCIGGLL" account unlock;
grant connect, resource, dwrole to "SRC_OCIGGLL";
grant unlimited tablespace to "SRC_OCIGGLL";
レプリケーション対象となるテーブルを事前に作成しておきます。PostgreSQLで作成していたテーブルのカラム名dateがOracle Databaseでは予約語になっており利用できなかった為、カラム名log_dateに変更しています。OCI GoldenGateではCOLMAPパラメータを利用し連携対象のカラムのマッピングを行いました。
参考) SQL言語リファレンス Oracle SQLの予約語
CREATE TABLE SRC_OCIGGLL.log (
id NUMBER primary key,
log_date TIMESTAMP
);
OCI GoldenGateデプロイメント・インスタンスの作成
デプロイメント・インスタンス作成の事前準備
OCI GoldenGateデプロイメントの作成に必要なIAMポリシーの設定やOCI Vaultの作成については前回の記事を参考ください。
OCI GoldenGateの利用に必要なIAMポリシーの作成
OCI Vaultの作成
PostgreSQL用OCI GoldenGateデプロイメント・インスタンス作成
PostgreSQL用OCI GoldenGateデプロイメント・インスタンス作成、ソースデータベースであるPostgreSQLとの接続の作成、初期ロード用Extract、CDCレプリケーション用のExtractの作成については前回の記事を参考ください。
PostgreSQL用OCI GoldenGateデプロイメント・インスタンス作成
ソースデータベースであるPostgreSQLとの接続の作成
初期ロード用Extractの作成
CDCレプリケーション用のExtractの作成
Oracle Database用OCI GoldenGateデプロイメント・インスタンス作成
ナビゲーション・メニュー より、Oracle Database > GoldenGateにアクセスします。デプロイメントの作成を選択し、ウィザード内の入力項目に対し下記の値を設定していきます。
① 一般情報
- 名前:OCIGG4ORACLE
- 説明:オプション
- コンパートメント:”コンパートメント名”
- 本番 / 開発またはテスト:開発またはテストを選択
- OCPU数:1
- 自動スケーリング:無効
- サブネット in ”コンパートメント名”: ex) Postgres_Private_Subnet (demo-vcn VCN内)
- ライセンス・タイプの選択:ライセンス込み
- Show advanced options内
- ネットワーク
- GoldenGateコンソール・パブリック・アクセスの有効化:有効
- ロード・バランサ・サブネット in demo:Public Subnet (demo-vcn VCN内)
②GoldenGateの詳細
- デプロイメント・タイプの選択:データ・レプリケーション
- テクノロジの選択:Oracle Database
- バージョン:oggoracle:21.13.0.0.0_240227.2300_952
- GoldenGateインスタンス名:OCIGG4ORACLE
- 資格証明ストア:GoldenGate
- 管理者ユーザー名:ociggadmin
- パスワードシークレットの作成
- 名前:secret4ocigg
- 説明:オプション
- コンパートメント:”コンパートメント名”
- ボールト in ”コンパートメント名”:OCIVault
- 暗号化キー in demo:MasterKey
- ユーザー・パスワード:
ATPに対する接続の作成とOCI GoldenGateデプロイメントの登録
OCI GoldenGateではデータベースに対する接続情報をOCIコンソールから設定しGoldenGateに登録を行います。作成した接続では事前に接続性のテストを実行することができ、接続性に関する問題の切り分けを実施することが可能です。「接続の作成」を選択し、ターゲットデータベースであるATPに対する接続を作成します。ウィザード内の入力項目に対する設定値についてはスクリーンショットを参照してください。
作成した接続がアクティブになったら、「デプロイメントの割当て」を選択し、事前に作成しておいたOCI GoldenGateのデプロイメント・インスタンスに対する登録を行います。デプロイメントの割当てが完了したら、接続テストを実施し、ソースデータベースに対する接続性に問題がないことを確認します。
OCI GoldenGateの初期ロード用分散パスの作成
PostgreSQL用のOCI GoldenGateデプロイメントと、ATPに接続したOracle Database用のOCI GoldenGateデプロイメントを接続する為の分散パスを作成します。
分散パス作成の準備
分散パスとの接続のためにターゲット側であるOracle Database用のOCI GoldenGateデプロイメントのFQDNとPrivateIPを確認します。デプロイメントの詳細ページ、「デプロイメント情報」の「ネットワーク」の「プライベートIPアドレス」をメモしておきます。また「編集」ボタンからアクセスできる「デプロイメントの編集」からFQDNをメモします。
今回の検証環境の場合は下記の設定値となっていました。
FQDN: e2seqbot5tjq.deployment.goldengate.ap-tokyo-1.oci.oraclecloud.com
プライベートIPアドレス: 10.0.40.2
分散パスの認証ユーザーの作成
分散パスが利用するOCI GoldenGateの認証ユーザーを作成します。ターゲット側OCI GoldenGateデプロイメントに対し、作成時に指定した管理者ユーザー名(ociggadmin)、シークレット作成時に指定したパスワードを利用してOCI GoldenGate管理コンソールにサインインします。
左上のナビゲーション・メニューから「管理者」にアクセスし、「ユーザー」横の+アイコンを選択し、新規ユーザーの作成を行います。
ナビゲーション・メニューを開き、「管理者」をクリックします。
新規ユーザーの追加 (プラス・アイコン)を選択し、次のように設定します。
- ユーザー名: ggsnet
- ロール: 演算子
- タイプ: パスワード
- 任意のパスワードを設定してください
ソース側OCI GoldenGateデプロイメントに対しても同様の手順でユーザーを作成します。
ソース側OCI GoldenGateデプロイメントでは、ggsnetユーザーの資格証明書を作成しておきます。ナビゲータ・メニューを開いて、「構成」を選択、「資格証明の追加」(プラス・アイコン)を選択し、下記設定値を入力します。
- 資格証明ドメイン: GGSNetwork
- 資格証明別名: dpuser
- Database Name: 任意の名前を入力して「Database Server」および「Port」フィールドを空白のままにするか、デフォルト値をそのまま使用できます
- ユーザーID: ggsnet
GoldenGateデプロイメント間の接続の作成
上述の手順で確認したFQDNやプライベートIPアドレス、OCI GoldenGateに登録した認証ユーザーを利用して接続を作成します。
接続がアクティブに変わったらソース側のPostgreSQL用のOCI GoldenGateデプロイメントに割当てます。
初期ロードExtractの分散パスの作成
ソース側のPostgreSQL用のOCI GoldenGate管理コンソールにおいて、「分散サービスタブ」画面右端のプラス・アイコンを選択し分散パスを作成します。
- パス名: DistributionPath4InitialLoad
- ソース・トレイル: Extract
- 証跡名: 初期ロードEXTRACT証跡名(I1)を入力
- ターゲット認証方式: 「UserID別名」
- ターゲット」で、「wss」を選択します。
- ターゲット・ホスト: ターゲットAutonomous DatabaseデプロイメントURLをhttps://または末尾のスラッシュなしで入力します。
- ポート番号: 443
- 証跡名: I1
- ドメイン: 前のステップで作成したドメイン名
- 別名: 前のステップで作成した資格証明別名
OCI GoldenGateの初期ロード用Replicatの作成
ターゲット側のOracle Database用のOCI GoldenGate管理コンソールにおいて、「分散サービスタブ」画面右端のプラス・アイコンを選択し分散パスを作成します。ATPとの接続アイコンを選択し、「チェックポイント」横のプラス・アイコンを選択し、チェックポイント表GGADMIN.ckptを入力し、発行を選択します。
OCI GoldenGate管理コンソールの管理サービス画面からReplicat横のプラス・アイコンを選択し初期ロード用のReplicatを作成します。各設定項目についてはスクリーンショットを参照ください。
Replicatのパラメータファイルでは、ソース側のPostgreSQL上の表と異なるカラム名を有するATP上の表をMAPするためにCOLMAPパラメータを利用して下記のように記述します。COLMAPパラメータ内の記述は、「連携先のカラム名」=「連携元のカラム名」と記載する必要があるので順序を間違えないように気を付ける必要があります。
REPLICAT INITREP
USERIDALIAS TargetATP DOMAIN OracleGoldenGate
MAP SRC_OCIGGLL.log, TARGET SRC_OCIGGLL.log COLMAP(id=id, log_date=date);
初期ロード用のReplicatの作成が完了したら、アクションメニューの「詳細」画面より初期ロードの状況を確認することができます。
6件のレコードのロードが実施されたことを確認できます。
ソース側のPostgreSQL用のOCI GoldenGate管理コンソールの初期ロード用Extractのアクションメニューより「詳細」画面にアクセスし、レポートタブから初期ロードされたLSNを取得します。
初期ロードの状況はターゲット側のATPに対しSELECT文を発行することでも確認することができました。
CDCレプリケーション用の分散パスの作成
ソース側のPostgreSQL用のOCI GoldenGate管理コンソールにおいて、「分散サービスタブ」画面右端のプラス・アイコンを選択し分散パスを作成します。
CDCレプリケーション用Replicatの作成
ターゲット側のOracle Database用のOCI GoldenGate管理コンソールにおいて、管理サービス画面からReplicat横のプラス・アイコンを選択しCDCレプリケーション用のReplicatを作成します。各設定項目についてはスクリーンショットを参照ください。
ソース側のPostgreSQL用のOCI GoldenGate管理コンソールのCDCレプリケーション用Extractのアクションメニューより「オプションを使用して開始」を選択し、開始ポイントに「CSN」を選択し、CSNの項目に事前に確認しておいたLSNの値を入力します。
CDCレプリケーションの確認
ソースデータベースであるPostgreSQLにアクセスし、連携対象の表のデータを更新します。
ociggll=# delete from src_ociggll.log where id > 3;
DELETE 3
ociggll=# INSERT INTO src_ociggll.log(id, date) VALUES (10, current_timestamp);
INSERT INTO src_ociggll.log(id, date) VALUES (11, current_timestamp);
INSERT INTO src_ociggll.log(id, date) VALUES (12, current_timestamp);
INSERT 0 1
INSERT 0 1
INSERT 0 1
ociggll=#
ターゲット側のATPに対しSELECT文を発行し、変更が反映されていることを確認することができました。
参考情報