はじめに
OCI GoldenGateにはGoldenGate(レプリケーション)とData Transforms(データ変換)、Stream(ストリーム)と3つのデプロイメントがあります。
こちらのblogにData Transforms(データ変換)からGoldenGateのプロセスが作成できることが紹介されています。実際どのような感じなのか、Autonomous Database間の表のレプリケーションを例に確認してみました。
Data Transforms(データ変換)はオンプレミスの製品Oracle Data Integratorをベースにしたクラウド向けに作成されたETLサービスです。現在Autonomous Database、OCI GoldenGate、OCI Market Placeの3つのデプロイメントで利用いただけます。使い分けについては、最適なデータ統合ツールの選択 – Data Transforms or Oracle Data Integratorをご覧ください。
前提
- データソースはAutonomous Databaseを利用(ソースデータべースはATP1、ターゲットデータベースはADW1)
- ATP1、ADW1,OCI GoldenGateのデプロイメントは同じプライベート・サブネットを指定。セキュリティリストのイングレス、エグレスどちらもプライベート・サブネットでは全プロトコルを許可。
- Autonomous DatabaseはTLS接続を利用(mTLSは不要の設定)
- Autonomous Databaseのパブリック・アクセスは有効とし、アクセス制御はCIDRブロックを0.0.0.0/0に設定(
インターネット経由でAutonomous Database付属ツールにアクセス可) - Autonomous DatabaseのADMINスキーマでObject Storageのアクセスができるクレデンシャルが作成済み。(この記事ではcred_adminとしています)
- OCI GoldenGateからATP1,ADW1の接続はTLSを利用
- GoldenGate管理ユーザーggadminユーザーのパスワード・シークレットおよびData Transforms管理ユーザーSUPERVISORのパスワード・シークレットをOCI Vaultで作成済み(それぞれggadmin/supervisorとしています)。OCI Vaultでのシークレット作成についてはこちらの記事の1~3が参考になります。
1.Autonomous Databaseの準備
Autonomous Databaseを作成し、ユーザーを作成しサンプルデータをインストールします。続けてGoldenGateのためにサプリメンタルロギングをOnにします。Database ActionsはAutonomous Databaseの管理ユーザーであるADMINでログインします。
サンプルユーザの準備
まずソース・データベースで実行します。
Database Actionsの「データベース・ユーザー」でSRC_OCIGGLLユーザーを作成します。
コードの表示をクリックするとこちらのようになります。
-- USER SQL
CREATE USER SRC_OCIGGLL IDENTIFIED BY Welcome12345#;
-- ADD ROLES
GRANT CONNECT TO SRC_OCIGGLL;
GRANT DWROLE TO SRC_OCIGGLL;
GRANT RESOURCE TO SRC_OCIGGLL;
-- REST ENABLE
BEGIN
ORDS_ADMIN.ENABLE_SCHEMA(
p_enabled => TRUE,
p_schema => 'SRC_OCIGGLL',
p_url_mapping_type => 'BASE_PATH',
p_url_mapping_pattern => 'src_ociggll',
p_auto_rest_auth=> TRUE
);
-- ENABLE DATA SHARING
C##ADP$SERVICE.DBMS_SHARE.ENABLE_SCHEMA(
SCHEMA_NAME => 'SRC_OCIGGLL',
ENABLED => TRUE
);
commit;
END;
/
-- QUOTA
ALTER USER SRC_OCIGGLL QUOTA UNLIMITED ON DATA;
同様にターゲット・データベースでもSRCMIRROR_OCIGGLLというユーザーを作成します。
サンプル・データの準備
ドキュメントにあるOCI GoldenGateサンプル・データをダウンロードします。
次にソース・データベースのDatabase Actionsで「SQL」を起動して、「プリファレンス」で言語を”英語-English”に変更します。サンプルデータの月のデータ挿入が失敗を避けるためなので、サンプルデータの準備が完了したら日本語に戻します。
次にダウンロードしたスクリプトの内容をコピーして貼り付け、スクリプトの実行アイコンをクリックします。
実行が完了すると、表や索引、プロシージャが作成されていることが確認できます。
サンプルデータの準備が完了しました。
GGADMINのロック解除
ソース・データベースとターゲット・データベースの両方で、GoldenGateのためのユーザーGGADMINのロックを解除します。それぞれのDatabase Actionsの「データベース・ユーザー」でGGADMINを検索し、編集を選択します。
パスワードを入力して、アカウントがロックされていますをオフにし、変更の適用をクリックします。
コマンドだとこちらになります。
-- CHANGE PASSWORD
ALTER USER GGADMIN IDENTIFIED BY Welcome12345#;
-- ACCOUNT LOCK
ALTER USER GGADMIN ACCOUNT UNLOCK;
サプリメンタル・ロギングの変更
続けてAutonomoous Databaseのサプリメンタル・ロギングをONに変更します。Database Actionsの「SQL」で以下を実行します。
SELECT MINIMAL FROM dba_supplemental_logging;
ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA;
SELECT MINIMAL FROM dba_supplemental_logging;
MINIMALがYESに設定されていれば完了です。
また以下のSQLを実行しサンプルスキーマの表のサポートモードがFullになっているかを確認します。
select * from DBA_GOLDENGATE_SUPPORT_MODE where owner = 'SRC_OCIGGLL';
次のような結果になります。
2.GoldenGate(レプリケーション)デプロイメントの作成
OCI GoldenGateでレプリケーション・デプロイメントを作成します。
OCIコンソール→Oracle Database→GoldenGateでGoldenGateのホームを開きます。
左のメニューからデプロイメントを選択し、デプロイメントの作成をクリックします。
検証なので、以下以外はデフォルトの設定を受け入れ、作成
をクリックします。()内は本記事での設定です。
- 名前:任意の名前(NRT GG)
- デプロイメント・タイプの選択:データ・レプリケーション
- ハードウェア構成:開発
- サブネット:既存プライベート・サブネット
- GoldenGateインスタンス名:任意の名前(GGInstance)
- 資格証明ストア:GoldenGate
- 管理者ユーザー名:ggadmin
- パスワード・シークレット:作成済みのパスワード・シークレット(ggadmin)
作成できました。
レプリケーションに登録するデータ・ソースの接続の作成
レプリケーションで使用するデータ・ソースを登録するには接続の作成が必要です。今回はソース・データベース(ATP1)とターゲット・データベース(ADW1)への接続を作成します。
左のメニューから接続をクリックし、接続の作成をクリックします。
接続の作成画面でソース・データベースの情報を入力します。名前をsourceatp1とし、データベース・ユーザー名はggadmin、パスワードはggadminのロック解除で指定したパスワードを設定します。
またネットワーク接続は共有エンドポイントを選択します。
作成をクリックすると、接続が作成されます。
同様にターゲット・データベースへの接続もtargetadw1という名前で作成します。
デプロイメントに接続を割り当てる
デプロイメントに作成した接続を割り当てます。
作成済みのレプリケーション・デプロイメント(NRT GG)のホームから割り当て済接続を選択し、接続の割当てをクリックします。接続の割り当ては対象のデプロイメントが起動している必要があります。
ソース・データベース、ターゲット・データベースの両方の接続を割り当てます。
割り当てが完了すると、こちらのように状態がアクティブとなります。
各接続で接続のテストが可能なので、接続が成功することを確認しておきます。
Data Transforms(データ変換)デプロイメントの作成
次にOCI GoldenGateでデータ変換デプロイメントを作成します。デプロイメントの作成をクリックします。
検証なので、以下以外は基本的にデフォルトの設定を受け入れ作成
をクリックします。拡張オプションではGoldenGateデプロイメント同様、ロードバランサーの構成が可能です。
- 名前:任意の名前(NRT DT)
- デプロイメント・タイプの選択:データ変換
- ハードウェア構成:開発
- サブネット:既存プライベート・サブネット
- GoldenGateインスタンス名:任意の名前(GGInstance)
- 資格証明ストア:GoldenGate
- パスワード・シークレット:作成済みのパスワード・シークレット(supervisor)
作成が完了しました。
データ変換に登録するデータ・ソースの接続の作成
Data Transformsで利用するデータ・ソースとして、レプリケーション・デプロイメントに対して接続を作成します。左のメニューから接続をクリックし、接続の作成をクリックします。
名前に任意の名前(GG for DTにしました)、接続タイプに"汎用接続"を選択し、ホストにホスト名:ポート番号の形式で設定を行います。ホストの設定値はレプリケーション・デプロイメントの場合は、GoldenGate管理コンソールURLのホスト名とポート番号(443)となります。管理コンソールURIは、OCIコンソールのデプロイメント情報で確認できます。
データ変換ではデータベースなど他のデータソースの場合も接続タイプには"汎用接続"を選択し、ホスト名:ポート番号を設定します。例えばプライベート・エンドポイントでTLS接続のAutonomous Databaseをデータ変換で使用したい場合は接続文字列の接続ホスト名(プライベートホスト)、ポート番号(1521)になります
作成が完了すると、レプリケーション・デプロイメントの接続とあわせて、こちらのようになります。
デプロイメントに接続を割り当てる
データ変換・デプロイメントに作成した接続を割り当てます。
作成済みのデータ変換デプロイメント(NRT DT)のホームから割り当て済接続を選択し、接続の割当てをクリックします。
先ほど作成した接続を割り当てます。
割り当てが完了すると、状態がアクティブとなります。接続のテストを行い成功を確認しておきます。
3.データ変換デプロイメントのData Transformsコンソールで操作をする
データ変換でレプリケーション・デプロイメントを利用してソース・データベースとターゲット・データベース間で表のレプリケーションを設定します。
Data Transformsコンソールにアクセス
拡張オプションでパブリック・エンドポイントの構成をしていないため、データ変換デプロイメントのホームにある「コンソールの起動」をクリックすると、プライベート・ネットワークでアクセスする必要がある旨のメッセージとアクセスURLが表示されます。
SSH転送などを利用して、アクセスURLにアクセスし、ユーザ名SUPERVISORとシークレットに設定したパスワードでログインします。
Connectionの作成
Data Transformsのホーム画面です。左からConnectionsをクリックします。
続けて、Create Connection
をクリックします。
SevicesからOracle GoldenGate-OCIを選択し、Next
をクリックします。
Deployment URLにレプリケーション・デプロイメントのコンソールURLを入力し、ユーザ名にggadmin、パスワードにシークレットに設定したパスワードを設定し、Test Connection
で接続の確認をします。成功を確認後Create
をクリックします。
OCI GoldengateへのConnectionが作成されました。
GoldenGateと連携したデータロードの作成
まずプロジェクトを作成します。プロジェクトはData Transformsの設計リソースのコンテナのコンポーネントです。左からProjectsを選択し、Create Project
をクリックします。任意の名前(今回はdemo-pipleline)をつけてCreate
をクリックします。
作成したプロジェクトdemo-pipelineをクリックし、
Create Data Load
をクリックします。
表示されたウィンドウで設定をしていきます。Nameに任意の名前(今回はggdataload1)、Use GoldenGateにチェックをいれ、GoldenGate Deployment Connectionに作成したConnectionであるGGを選択し、Next
をクリックします、
Source Connectionを設定します。ソース・データベースになるので、GoldenGate Connectionsにはsourceatp1、SchemaにはSRC_OCIGGLLを選択し、Next
をクリックします。
Target Connectionを設定します。ターゲット・データベースになるので、GoldenGate Connectionsにはtargetadw1、SchemaにはSRCMIRROR_OCIGGLLを選択し、Save
をクリックします。
こちらのような画面になります。ソース・データベースのSRC_OCIGGLLスキーマの表が表示されるので、対象にしたい表とActionを選択します。右下にはGoldenGateのExtract、Replicatプロセスの情報がありますが、どちらもNot Deployedのステータスです。
今回はSRC_CITY表を含めて3つの表を選択し、そしてアクションはAppnedを選択し、保存しました。
左上の実行ボタン(デプロイ)をクリックします。
デプロイが成功すると、GoldenGate StatusでExtract、ReplicatそれぞれがNot deployedからStoppedにかわります。
Extract、Replicatを実行ボタンをクリックして起動します。GoldenGate StatusでExtract、ReplicatそれぞれがStopedからRunningにかわります。
4.レプリケーション・デプロイメントのGoldenGateコンソールで情報を確認する
データ変換側の操作でレプリケーションのExtract/Replicatプロセスが作成され、起動されました。詳細をレプリケーション側のGoldenGateコンソールで確認します。
GoldenGateコンソールのアクセス
拡張オプションでパブリック・エンドポイントの構成をしていないため、Data Transformsコンソール同様にssh転送などを用いてGoldenGateコンソールにアクセスします。ユーザーはggadminパスワードにはシークレットに設定したパスワードでログインします。
次のような画面が表示され、データ変換で作成したExtract/Replicatプロセスが存在、起動していることがわかります。
それぞれの詳細を確認してみます。まずExtractのアクションから詳細を選択します。
以下の情報が確認できます。
- Extractのプロセス情報
Replicatプロセス側も同様に確認ができます。
5.レプリケーションの確認
ソース・データベースにデータを投入し、ターゲット・データベースに伝播されるかどうかを確認します。
ソース・データベースにデータを投入
ソース・データベースのSRC_CITY表にデータを挿入します。ソース・データベースのDatabase ActionsにADMINユーザーでログインし、「SQL」で以下のSQL文で10行データを挿入します。
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1000,'Houston',20,743113);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1001,'Dallas',20,822416);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1002,'San Francisco',21,157574);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1003,'Los Angeles',21,743878);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1004,'San Diego',21,840689);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1005,'Chicago',23,616472);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1006,'Memphis',23,580075);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1007,'New York City',22,124434);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1008,'Boston',22,275581);
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1009,'Washington D.C.',22,688002);
GoldenGateコンソールでExtract、Replicatの統計をみてみると、10件データが挿入されていることが確認できます。
実際にターゲット・データベースで以下のSQLでも確認してみると、
SELECT * from SRCMIRROR_OCIGGLL.SRC_CITY order by city_id desc;
挿入したデータが正しく伝播されていることが確認できました。
おわりに
こちらのチュートリアルの通り、レプリケーション・デプロイメントのみでもちろんデータ連携できます。比較してみると、データ変換から行うと、Extract,Replicat,チェックポイントが自動化されるようでした。
データ変換とレプリケーション両方を使う場合に試してみてもよいかもしれません。