Oracle GoldenGate Microservices Architectureの双方向レプリケーションの設定
このクイックスタートでは、単一のマルチテナント・コンテナOracleデータベース・インスタンスを介した2つのプラガブル・データベースの間のアクティブ/アクティブ双方向レプリケーションについて実例で示します。
![オンプレミスのOracle GoldenGateデプロイメントの双方向データ・レプリケーションを示すワークフロー。 オンプレミスのOracle GoldenGateデプロイメントの双方向データ・レプリケーションを示すワークフロー。](img/bidirectional_data_replication_hub_based.png)
アクティブ/アクティブ双方向レプリケーションとは、データ・ソースとターゲット(この場合はPDB)の両方が互いに更新を送信する可能性があることを意味します。同一のデータ・セットを含む2つのデータ・ソースがあり、アプリケーション・ユーザーがどちら側ででも変更できます。Oracle GoldenGateは、両方のデータセットを最新状態に維持するため、トランザクション・データ変更を一方のデータベースから他方のデータベースにレプリケートします。
次の図は、このクイックスタートで示されている双方向レプリケーション・ワークフローを表しています。
ノート:
このクイックスタートでは、2つのPDBがある単一のマルチテナント・コンテナ・データベースを使用して、2つのPDBの間の双方向レプリケーションを実例で示します。ただし、現実の多くのシナリオでは、双方向データ・レプリケーションは、様々なマルチテナント・コンテナ・データベースまたは様々なデータベース・インスタンスにわたり実施されます。双方向データ・レプリケーション環境でのプロセス名
コンテナ・データベース(CDB$ROOT)のプロセス名 | プラガブル・データベース(DBEAST)のプロセス名 | プラガブル・データベース(DBWEST)のプロセス名 |
---|---|---|
|
|
|
DBWestの場合:
双方向レプリケーションの構成に関する考慮事項
データの整合性を維持し、競合を回避するには、特定のパラメータ、および自動競合検出および解決(ACDR)機能を使用して、データのループおよび競合を回避するように、ExtractプロセスおよびReplicatプロセスを構成する必要があります。
理想的には、双方向または多方向レプリケーションでの競合発生の可能性があるすべての状況を回避する必要があります。ただし、競合が発生した場合、Oracle GoldenGateは、自動競合検出および解決(ACDR)機能を提供してそれらに対処します。
-
PDBレベルで:
Oracleデータベースで使用可能な自動競合検出および解決機能(ACDR)では、
DBMS_GOLDENGATE_ADM
パッケージを使用し、ADD_AUTO_CDR
プロシージャを使用して、競合の検出および解決を管理できます。この場合は、両方のPDBでデータベース・レベルでこのパッケージを有効にする必要があります。ACDRの有効化を参照してください。 -
Oracle GoldenGate Extractのパラメータ設定
-
LOGALLSUPCOLS
: このパラメータにより、ADD TRANDATA
を使用して指定された補足的に記録される列の書込みと、Oracle GoldenGateでの競合検出および解決(CDR)で有効になっている列の書込みを制御します。このパラメータは、Extractの場合はデフォルトで設定されています。 -
UPDATERECORDFORMAT
: このパラメータは、統合Extractの場合はデフォルトで設定されるため、パラメータ・ファイルで設定する必要はありません。この機能では、UPDATE
操作のビフォア・イメージとアフター・イメージが証跡内の単一レコードに結合されます。COMPACT
オプションにより、UPDATE
のビフォア・イメージとアフター・イメージを含む1つの証跡レコードが生成されます。ビフォア・イメージには、トランザクション・レコード内の使用可能なすべての列が含まれますが、アフター・イメージには、主キー列、およびUPDATE
で変更された列のみが含まれます。 -
EXCLUDETAG
オプションにより、データのループないことが保証されます。データのループは、あるデータベースが2番目のデータベースに更新を送信し、2番目のデータベースがそれらの更新を新しい変更であると見なし、この更新をソース・データベース自体にレプリケートし直そうとすると発生します。これらのパラメータ設定は、このドキュメントのステップ3: Extractの追加で示しているように、Extractパラメータ・ファイルの構成時に実行します。
-
-
Oracle GoldenGate Replicatのパラメータ設定:
ACDRは、統合Replicatまたはパラレル統合Replicatと連携します。詳細は、このドキュメントのReplicatパラメータ・ファイルを参照してください。
Oracle Multitenant Database用の必要な権限の設定
Oracleデータベースで、Oracle GoldenGateでのレプリケーションを有効にし、CDBレベルおよびプラガブル・データベース(PDB)レベルでデータベース・ユーザーに権限を割り当てる必要があります。
データベースはARCHIVELOG
モードであり、FORCE LOGGING
およびサプリメンタル・ロギングが有効になっています。コンテナ・データベースの場合は、次の権限を共通ユーザー(cdb$root
)に割り当てます。
## CGGNORTH DATABASE SETUP AT CDB LEVEL
ALTER SESSION SET CONTAINER=cdb$root;
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;
ALTER SYSTEM SET STREAMS_POOL_SIZE=2G;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
CREATE USER c##ggadmin IDENTIFIED BY PASSWORD CONTAINER=ALL DEFAULT TABLESPACE GG_DATA TEMPORARY TABLESPACE TEMP;
GRANT CONNECT, RESOURCE, DBA TO c##ggadmin CONTAINER=ALL;
GRANT CREATE SESSION TO c##ggadmin CONTAINER=ALL;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('c##ggadmin',CONTAINER=>'ALL');
ALTER SESSION SET CONTAINER=dbeast;
CREATE USER ggadmin IDENTIFIED BY PASSWORD CONTAINER=CURRENT;
GRANT CONNECT, RESOURCE, DBA TO GGADMIN CONTAINER=CURRENT;
GRANT CREATE SESSION TO ggadmin CONTAINER=CURRENT;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ggadmin');
DBWEST
のPDBユーザー権限ALTER SESSION SET CONTAINER=dbwest;
CREATE USER ggadmin IDENTIFIED BY PASSWORD CONTAINER=CURRENT;
GRANT CONNECT, RESOURCE, DBA TO ggadmin CONTAINER=CURRENT;
GRANT CREATE SESSION TO ggadmin CONTAINER=CURRENT;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ggadmin');
ノート:
DBA
ロールの付与は、すべてのユーザーに必須なわけではありません。権限は、ユーザーがデータベースで実行する必要がある操作に応じて付与する必要があります。たとえば、トランザクションを挿入、更新および削除するDML操作権限をggadmin
に付与するには、GRANT ANY INSERT/UPDATE/DELETE
権限を使用し、さらに、DML操作の一部として表および索引を操作することをユーザーに許可するには、GRANT CREATE/DROP/ALTER ANY TABLE/INDEX
権限を使用します。このクイックスタートでは、データベース・ユーザーがデータベース管理者であると想定しています。特定の権限要件の詳細は、「Oracle Database 21c以前のユーザー権限の付与」および「マルチテナント・コンテナ・データベースの構成」を参照してください。
ACDRの有効化
DBEAST
というPDBでACDRを有効にするには:EXEC DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR('hr', 'employees', RECORD_CONFLICTS=>TRUE);
PL/SQL procedure successfully completed.
DBWEST
という他のPDBに切り替えて、同じコマンドを実行します。EXEC DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR('hr', 'employees');
これにより、両方のPDBでACDRパッケージが有効になります。
列レベルでACDRを管理するために追加される、非表示の列を確認することで、PDBに対してACDRが有効になっているかどうかを確認できます。これをテストするには、次のコマンドを実行します。
ALL_GG_AUTO_CDR_TABLES
を使用して、PDB内のACDRに使用される列をリストします。SELECT table_owner, table_name, tombstone_table, row_resolution_column, FROM all_gg_auto_cdr_tables;
TABLE_OWNER
--------------------------------------------------------------------------------
TABLE_NAME
--------------------------------------------------------------------------------
TOMBSTONE_TABLE
--------------------------------------------------------------------------------
ROW_RESOLUTION_COLUMN
--------------------------------------------------------------------------------
HR
EMPLOYEES
DT$_EMPLOYEES
CDRTS$ROW
-
DT$_EMPLOYEES
: これは、削除トランザクションのロックに使用されるツームストン表です。 -
CDRTS$ROW
: これは行解決列です。競合がある場合は、トランザクションのタイムスタンプを含むこの列を使用して、行に適用されるレコードが決定されます。つまり、最新のタイムスタンプを持つレコードが、行で変更を適用するために使用されます。
これらの列は、両方のPDB (DBEAST
およびDBWEST
)でschema.table
に追加されます。
ACDRを有効にした後には、非表示の列を含めるようにReplicatパラメータ・ファイルを編集する必要があります。Replicatパラメータ・ファイルにMAPINVISIBLECOLUMNS
パラメータを追加して、Replicatでデフォルトの列マッピングを使用してターゲット列を含めることができるようにします。これについては、ステップ4: Replicatの追加の項でReplicatパラメータ・ファイルを構成するときに詳しく説明します。
-
Administration ServiceのWebインタフェースにログインします。
-
Administration Serviceの概要ページで、Extractプロセスexteの横にあるアクションボタンをクリックします。
-
開始をクリックします。
プロセスが正常に開始されたことを示す緑色のチェック・マークがそのプロセスの横に表示されます。
同様に、両方のPDBで他のExtractプロセスおよびReplicatプロセスを開始します。
Oracle GoldenGate MAのWebインタフェースからのレプリケーション・プロセスの構成
次のステップを使用すると、データ取得(Extract)および適用(Replicat)プロセスを構成できます。レプリケーションが開始されているかどうかもテストできます。
DISTPATH
プロセスは、この構成には使用されません。
ステップ1: Administration Serviceからのデータベース資格証明の追加
この項では、EZConnectを使用してソースおよびターゲット・データベースに接続するためのデータベース資格証明を追加します。
-
前のセッションで作成した、データベース・ユーザー資格証明を準備しておいてください。それらを使用して、Oracle GoldenGateをデータベース・サーバーに接続します。
-
WebブラウザでService Managerのログイン・ページを開き、Oracle GoldenGate管理者ユーザーの資格証明を使用してService Managerにログインします。初めてログインする場合は、Oracle GoldenGate Configuration Assistantウィザードでデプロイメントを追加したときに作成した、管理者アカウントのユーザー資格証明を使用してログインする必要があります。
-
Service Managerの概要ページで、デプロイメントのAdministration Serviceのポート番号をクリックします。
これにより、Administration Serviceのログイン・ページが開きます。
-
Service Managerへのログインに使用したのと同じ資格証明を使用して、Administration Serviceにログインします。Administration Serviceの概要ページが表示されます。
-
アプリケーション・ナビゲーションアイコンをクリックして左側のナビゲーション・ペインを開き、構成をクリックして構成ページのデータベースタブを開きます。
-
資格証明セクション内のプラス(+)記号をクリックしてデータベース・ユーザーの資格証明の追加を開始します。
-
コンテナ・データベース(CDB)およびプラガブル・データベース(PDB)について接続を追加する必要があります。各CDBは、配信(Replicat)のための、ソース・データベースおよびPDBからの取得(Extract)に使用されます。
EZconnect構文を使用してデータベース接続を構成します。EZConnect構文を使用するには、ユーザー名、パスワード、ホスト名、ポート番号およびサービス名の接続情報が必要です。
ユーザーIDフィールドに指定する必要がある構文を次に示します。
username@hostname:port/service_name
EZConnectを使用してユーザーIDを設定する例を次に示します。
c##ggadmin@dc.example.com:1521/DBWEST.example.com
-
アクション列内の青いアイコンをクリックしてデータベースに接続します。接続に成功すると、そのアイコンが青色になります。
データベースに接続すると、チェックポイント表、TRANDATAおよびハートビート表を追加するためのセクションが表示されます。
ステップ2: ハートビート表およびチェックポイント表の追加
PDBのハートビート表を追加して、ラグの可能性がないかモニターします。
ターゲット・データベースのチェックポイント表を追加して、障害が発生した場合にExtractプロセスおよびReplicatプロセスが障害発生時点から再開できるようにします。
ノート:
これはADD_AUTO_CDR
のPL/SQLコールで内部的に実行されるため、TRANDATAを追加する必要はありません。表に対してサプリメンタル・ロギングが有効になっていることを確認できます。
-
TRANDATA情報セクションを使用して、取得用に設定された表に対してサプリメンタル・ロギングが有効になっているかどうかを確認します。
虫眼鏡検索アイコンを使用して、TRANDATAを追加したスキーマを検索できます。これにより、TRANDATA情報が表示されます。次の図は、プラガブル・データベース
DBEAST
内のHR
スキーマのTRANDATA情報を示しています。
スキーマ、表またはプロシージャ・レベルでロギング・プロパティを構成するステップについては、ロギング・プロパティの構成を参照してください。
-
Replicatのチェックポイント表を設定するには、資格証明セクションからターゲット・データベース資格証明(ggwest)に接続する必要があります。
-
プラス記号(+)をクリックしてPDBのチェックポイント表を追加します。
発行をクリックします。チェックポイント表が追加されます。
ハートビート表の作成の詳細は、「Extractを作成する前に」の項も参照してください。
-
ステップ3と4を繰り返して、別の、2つ目のReplicat
reps
のチェックポイント表を追加します。 -
ggeastおよびggwestデータベース資格証明別名に接続することで、ソースおよびターゲット・エンドポイントの両方について、ハートビート表を追加します。
双方向アクティブ/アクティブ・レプリケーションの場合、ハートビート表は、各サイトの送信Extractと受信Replicatで同じスキーマ内にある必要があります。たとえば、次のユースケースを参照してください。
サイトA サイトB
EAB
–------------->RAB
RBA
–------------->EBA
この例では、
EAB
およびRBA
ハートビート表が同じスキーマを使用する必要があります。ただし、EAB
およびRAB
では異なるスキーマを使用できます。プラス記号をクリックしてハートビート表を追加します。
-
ハートビートのオプションを調整した後、送信をクリックします。
ステップ3: Extractの追加
この項では、2つのExtract (exte
およびextw
)を追加します。Extractプロセスにより、ソース・データベースからデータを取得し、それを証跡ファイルに書き込みます。exte
の証跡ファイルはea
であり、extw
の証跡ファイルはew
です。
-
Administration Serviceの左側のナビゲーション・ペインから概要オプションをクリックし、Extractセクションからプラス記号(+)をクリックします。
-
Extractの追加ウィザードから、統合Extractを選択します。
-
次をクリックし、Extractオプション画面でExtractのオプションを指定します。Extractを追加する詳細なステップは、「プライマリExtractの追加」の項を参照してください。
プラガブル・データベースのExtractを作成する場合は、資格証明のドメインおよび別名を入力するとすぐに、PDBに登録オプションが表示されます。レプリケーションに使用する、コンテナ・データベース内のPDBを選択します。
-
Extract (
exte
)のオプションを入力したら、次をクリックします。次の画面には、Extract設定の確認に役立つExtractパラメータ・ファイルが表示されます。Extract exteのExtractパラメータ・ファイルを次に示します。EXTRACT exte USERIDALIAS cggnorth DOMAIN OracleGoldenGate EXTTRAIL east/ea SOURCECATALOG DBEAST TRANLOGOPTIONS EXCLUDETAG 00 DDL INCLUDE MAPPED OBJNAME hr.* DDLOPTIONS REPORT TABLE DBEAST.hr.*;
これらの設定を確認し、必要に応じてExtract構成を更新します。
マルチテナント・データベースの場合は、複数のプラガブル・データベースから単一の証跡に取得する、Extractのエントリを追加する必要があります。パラメータ・ファイルにおいて、
TABLE
文でcontainer.schema.object
という形式の3つの部分からなる完全修飾名を使用して、またはSOURCECATALOG
パラメータで2つの部分からなる名前schema.object
を使用して、ソース・オブジェクトを指定する必要があります。作成および実行をクリックしてExtractを開始します。
extw
を作成するには:
-
アプリケーション・ナビゲーションペインを使用して、概要ページに戻ります。
-
Extractの追加ウィザードから、統合Extractを選択します。
-
次をクリックし、Extractオプション画面でExtractのオプションを指定します。
-
レプリケーションに使用する、コンテナ・データベース内のPDBとして
DBWEST
を選択します。 -
Extractのオプションを入力したら、次をクリックします。次の画面には、Extract設定の確認に役立つExtractパラメータ・ファイルが表示されます。
-
Extractパラメータのオプションを入力します。
EXTRACT extw USERIDALIAS cggnorth DOMAIN OracleGoldenGate EXTTRAIL west/ew SOURCECATALOG DBWEST TRANLOGOPTIONS EXCLUDETAG 00 DDL INCLUDE MAPPED OBJNAME hr.* DDLOPTIONS REPORT TABLE DBWEST.hr.*;
これらの設定を確認し、必要に応じてExtract構成を更新します。
- 作成および実行をクリックしてExtractを開始します。
ステップ4: Replicatの追加
この項では、Replicat (repeおよびrepw)を追加します。Replicatプロセスにより、Extractによって作成された証跡ファイル(ea
)からターゲット・データベースに、変更データを配信します。Replicatにより、ターゲット・データベースにある証跡ファイルを読み取り、DML操作またはDDL操作を再構成し、それらをターゲット・データベースに適用します。
-
Replicatを追加する前に、ggwestデータベース資格証明に接続して、ターゲット・データベース(
DBWEST
)のチェックポイント表を追加してあることを確認してください。 -
ターゲット・データベースにデータを配信するReplicatのタイプを選択します。ウィザードに従ってReplicatの追加を完了します。
-
Replicatオプション画面でパラレル統合Replicatオプションを選択します。
- 次をクリックしてReplicatパラメータ・ファイル画面を表示します。指定したパラメータはすべてここで確認できます。
マルチテナント・コンテナ・データベースの場合、Replicatは1つのプラガブル・データベースにのみ適用できます。正しいものを指定するには、
USERID
またはUSERIDALIAS
パラメータで指定するデータベース・ユーザーにSQL*Net接続文字列を使用します。たとえば、ggadmin@DBWEST
です。パラメータ・ファイルで、
MAP
文のTARGET
の部分に、schema.object
のみを指定します。MAP
の部分で、3つの部分からなる名前の複数のプラガブル・データベースからキャプチャされるソース・オブジェクトを識別するか、2つの部分からなる名前のSOURCECATALOG
パラメータを使用します。統合パラレルReplicatの場合、
MAPINVISIBLECOLUMNS
パラメータはデフォルトで設定されています。それをReplicatパラメータ・ファイルで明示的に設定する必要はありません。Replicatパラメータ・ファイルのサンプルを次に示します。
REPLICAT repe USERIDALIAS ggwest DOMAIN OracleGoldenGate DDLOPTIONS REPORT SOURCECATALOG DBEAST MAP hr.*, TARGET hr.*;
-
ステップ1と2を繰り返して、1つ目のReplicat (
repe
)を追加します。 -
Replicatオプション画面で、次の詳細を入力します。
その他のオプションの入力とは別に、必ず次の詳細を入力します。-
証跡名を
ew
に、証跡ファイルのサブディレクトリをwestに指定します。 -
チェックポイント表として
DBWEST.ggs_checkpoint
を選択します。 -
次をクリックします。
-
Replicatパラメータ・ファイルを次のように変更します。
REPLICAT repw USERIDALIAS ggeast DOMAIN OracleGoldenGate SOURCECATALOG DBWEST DDL INCLUDE ALL DDLOPTIONS REPORT MAPEXCLUDE ggadmin.ggs_checkpoint* MAPINVISIBLECOLUMNS MAP hr.*, TARGET hr.*;
-
Replicatが正常に開始された後、Administration Serviceの概要ページで、実行中状態のExtractプロセスおよびReplicatプロセスを確認できます。
トランザクションのテストとモニター
次の画面では、exte
ExtractによってDBEAST
内のhr.employees
表からレコードが取得されたことがわかります。
Replicat (repe
)でも同じ内容が更新されていることを確認します。
hr.employees
表内の2つのレコードがエンドポイント(DBWEST
)にレプリケートされています。
DBWEST
にあるExtract (extw
)を見てみましょう。
挿入済レコードの値が5であることに注目してください。これらの5つのレコードのうち、2つはrepe
によってDBWEST
上のhr.employees
にレプリケートされました。その後、3つの新しいレコードがDBWEST
上のhr.employees
に挿入されました。
これら3つのレコードがPDB DBWEST
内のhr.employees
表に挿入されると、更新されたレコードのみがDBEAST
にレプリケートされます。次の画面では、更新されたレコードのみがDBEAST
に追加されたことがわかります。
この図では、INSERTSが3件で、レコードの重複がないことがわかります。
これは、Oracle GoldenGate MAでアクティブ/アクティブ双方向レプリケーションを実装する方法の1つです。
自動競合検出および解決のテスト
この項では、レコードの最新のタイムスタンプを確認して、ACDRでレコードの競合を解決できるかどうかを確認します。競合の自動解決を確認するには、次のレコードを作成します。
DBEAST
でのトランザクション:
次の例では、DBEAST
とDBWEST
でUPDATEトランザクションを同時に実行しており、ACDRを使用して、競合が検出されて解決されています。
DBEAST
にあるhr.employees内のレコードを更新する問合せを次に示します。
UPDATE hr.employees set LAST_NAME='Simmonds', EMAIL='HSIMMONDS' where EMPLOYEE_ID=204;
UPDATE hr.employees set SALARY='15000' where EMPLOYEE_ID=203;
DBWEST
上で同じ行に対して別の問合せが実行されます。UPDATE hr.employees set LAST_NAME='Symmonds', EMAIL='HSYMMONDS' where EMPLOYEE_ID=204;
UPDATE hr.employees set SALARY='25000' where EMPLOYEE_ID=203;
これらのエントリのどちらが優先されたか、または最終的に適用されたエントリかを確認するには、また、そのエントリの適用に使用された基準を確認するには、次のオプションを使用します。
DBA_APPLY_ERROR_MESSAGESビューの使用
DBEAST
で、次の問合せを実行します。select OBJECT_NAME, CONFLICT_TYPE,APPLIED_STATE,CONFLICT_INFO from DBA_APPLY_ERROR_MESSAGES;
この問合せの出力には、次の情報が表示されます。
DBWEST
でも同じ問合せを実行します。
CDRTS$ROW
が表示されるようにします。ALTER TABLE hr.employees modify CDRTS$ROW visible;
DBEAST
またはDBWEST
のどちらかで実行できます。SELECT * from hr.employees WHERE employee_id=204
出力は次のようになります。
このトランザクションのタイムスタンプ(11.38.45.774317 AM)をメモしておくとよいでしょう。
次は、DBWEST
でのタイムスタンプを確認します。
![DBEASTにあるhr.employees表に対するSELECT問合せ DBEASTにあるhr.employees表に対するSELECT問合せ](img/acdr_select_query_dbeast.png)
競合が解決されると、タイムスタンプについて、両方のPDBで同じデータが示されます。
STATS REPLICAT repe, REPORTCDR
このコマンドの出力には、次の情報が表示されます。
この統計レポートでは、3つの競合があり、そのうち2つが解決されたことがわかります。UPDATEROWEXISTS
競合タイプが解決に使用されています。
Webインタフェースからこのレポートを表示することもできます。
親トピック: クイックスタート