17 Oracle GoldenGateのためのデータベースの準備

この章では、Oracle GoldenGate用のPostgreSQLデータベースおよび環境を準備する方法について説明します。

内容は次のとおりです。

データベース構成

Oracle GoldenGateをサポートするには、PostgreSQLデータベース構成ファイル$PGDATA/postgresql.confの次のパラメータを構成する必要があります。
  • ExtractまたはReplicatのリモート接続の場合は、リモート・データベース接続を許可するようにPostgreSQL listen_addressesを設定します。たとえば:

    listen_addresses=remotehost_ip_address

    ノート:

    pg_hba.confファイルを構成して、Oracle GoldenGateホストからの接続を許可するようにクライアント認証が設定されていることを確認します。詳細は、次のドキュメントを参照してください: pg_hba.confファイル
  • Oracle GoldenGateキャプチャをサポートするには、先行書込みロギングlogicalに設定する必要があります。これにより、トランザクション・レコードのデコードをサポートするために必要な情報が追加されます。

    最大レプリケーション・スロットの数は、Extractごとに1つのオープン・スロットを格納するように設定する必要があり、通常、データベースごとに1必要なExtractは1つのみです。たとえば、PostgreSQLネイティブ・レプリケーションがすでに使用されており、現在構成されているすべてのレプリケーション・スロットを使用している場合は、値を増加してExtractの登録を許可します。

    最大先行書込み送信者は、最大レプリケーションスロット値と一致するように設定する必要があります。

    オプションで、コミット・タイムスタンプを先行書込みログで有効にできます。これにより、論理先行書込みロギングが同時に有効になっている場合、その時点以降の最初のDMLコミット・レコードが正しいタイムスタンプ値で追跡されます。それ以外の場合は、Oracle GoldenGate取得で取得された最初のレコードに、正しくないコミット・タイムスタンプが含まれます。

    wal_level = logical            # set to logical for Capture
    
    max_replication_slots = 1      # max number of replication slots,
                                   # one slot per Extract/client
    
    max_wal_senders = 1            # one sender per max repl slot
    
    track_commit_timestamp = on    # optional, correlates tx commit time
                                   # with begin tx log record (useful for      
                                   # timestamp-based positioning)
  • 前述の変更を行った後、データベースを再起動します。

PostgreSQLクラウド・データベースのデータベース設定

次の手順を使用して、Azure Database for PostgreSQL、Amazon Aurora PostgreSQL、Amazon RDS for PostgreSQLおよびGoogle Cloud SQL for PostgreSQLのデータベース設定を管理します。

Azure Database for PostgreSQL

Azure Database for PostgreSQLに対してOracle GoldenGate for PostgreSQLキャプチャを構成する場合、論理デコードを有効にしてLOGICALに設定する必要があります。

手順は、Microsoftのドキュメントを参照してください。

Azure Database for PostgreSQLのその他のデータベース設定は、データベース・インスタンスの「Server parameters」セクションを使用して管理できます。

Azure Database for PostgreSQLインスタンスへの接続では、Azureのデフォルトの「接続のセキュリティ」設定でSSL接続が必要です。この要件に従うには、Oracle GoldenGateとのSSL接続をサポートするための追加ステップが必要です。詳細は、PostgreSQLのSSLサポートの構成に記載されている内容に従ってください。

Amazon Aurora PostgreSQLおよびAmazon RDS for PostgreSQL

Amazon Aurora PostgreSQLおよびPostgreSQLのAmazon RDSの場合、データベース設定はパラメータ・グループ内で変更されます。新しいパラメータ・グループ内のデータベース設定を編集し、データベース・インスタンスに割り当てる方法の詳細は、Amazon AWSのドキュメントを参照してください。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
  • 前にリストしたデータベース構成設定について、インスタンスに割り当てられたパラメータ・グループでこれらの設定を検証し、正しいことを確認します。

  • Amazonデータベース・サービスのwal_level設定はrds.logical_replicationというパラメータで構成され、そのデフォルトは0で、データベースがOracle GoldenGateキャプチャのソース・データベースとして使用される場合は1に設定する必要があります。

Google Cloud SQL for PostgreSQL

Google Cloud SQL for PostgreSQLデータベース用にOracle GoldenGate for PostgreSQL Extractを構成する場合は、論理デコードを設定する必要があり、そのためにはcloudsql.logical_decoding変数をONに設定します。このデータベース・フラグを有効にする方法の手順は、Googleによって示されています。詳細は、https://cloud.google.com/sql/docs/postgres/flags#postgres-lを参照してください。

Oracle GoldenGate資格証明の確立

データベースと対話するプロセス用のデータベース・ユーザーを作成し、適切な権限を割り当てて、権限のないユーザーから資格証明を保護する方法について学習します。

内容は次のとおりです。

Oracle GoldenGateへの資格証明の割当て

Oracle GoldenGateプロセスでは、データベース・ユーザーがPostgreSQLデータベースに対してデータを取得して配信する必要があり、ExtractおよびReplicatに専用のPostgreSQLデータベース・ユーザーを作成することをお薦めします。

Oracle GoldenGateでPostgreSQLデータベースに対する取得および適用を実行するには、次のデータベース・ユーザー権限が必要です。
権限 Extract Replicat 目的

データベース・レプリケーション権限

CONNECT

はい

はい

データベース接続に必要です。

GRANT CONNECT ON DATABASE dbname TO gguser;

WITH REPLICATION

はい

該当なし

ユーザーがExtractをレプリケーション・スロットに登録するために必要です。

ALTER USER gguser WITH REPLICATION;

WITH SUPERUSER

はい

該当なし

表レベルのサプリメンタル・ロギング(ADD TRANDATA)を有効にするために必要ですが、表に対してTRANDATAを有効にした後で取り消すことができます。

ALTER USER gguser WITH SUPERUSER;

Azure Database for PostgreSQLの場合、管理ユーザーのみがSUPERUSER権限を持ち、TRANDATAを有効にできる唯一のユーザーです。

USAGE ON SCHEMA

はい

はい

レプリケート対象のスキーマ内の表へのメタデータ・アクセス用。

GRANT USAGE ON SCHEMA tableschema TO gguser;

SELECT ON TABLES

はい

はい

レプリケート対象の表に対する選択アクセス権を付与します。

GRANT SELECT ON ALL TABLES IN SCHEMA tableschema TO gguser;

ターゲット表のINSERT, UPDATE, DELETE,TRUNCATE。または、すべての表をレプリケートする場合は、INSERT, UPDATE, DELETEをすべての表に付与するのではなく、GRANT INSERT, UPDATE, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA TO...をReplicatユーザーに使用できます。

該当なし

はい

レプリケートされたDMLをターゲット・オブジェクトに適用

GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLE tablename TO gguser;

ハートビートおよびチェックポイント表の権限

CREATE ON DATABASE

はい

はい

ExtractおよびReplicatユーザーが、ハートビートおよびチェックポイント表の作成用にOracle GoldenGateスキーマを追加するために必要です。

GRANT CREATE ON DATABASE dbname TO gguser;

または、GGSCHEMAがユーザーと同じ場合は、CREATE SCHEMA AUTHORIZATION ggsuser;を発行して、オブジェクトをユーザーの下に作成できます

CREATE, USAGE ON SCHEMA

はい

はい

ExtractまたはReplicatユーザーがオブジェクトを所有していない場合の、ハートビートとチェックポイント表の作成/削除用。

GRANT CREATE, USAGE ON SCHEMA ggschema TO gguser;

EXECUTE ON ALL FUNCTIONS

はい

はい

関数をコールするユーザーがオブジェクトを所有していない場合の、ハートビート更新関数およびパージ関数の実行用。

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA ggschema TO gguser;

SELECT, INSERT, UPDATE, DELETE

はい

はい

ユーザーがオブジェクトを所有していない場合の、ハートビートとチェックポイント表の挿入、更新および削除用。

GRANT SELECT, INSERT, UPDATE, DELETE, ON ALL TABLES IN SCHEMA ggschema TO gguser;

Oracle GoldenGate資格証明の保護

データのセキュリティを確保し、Oracle GoldenGateの処理を正確に監視するため、他のユーザー、アプリケーションまたはプロセスにOracle GoldenGateデータベース・ユーザーとしてのログオンまたは操作を許可しないでください。

Oracle GoldenGateには、Oracle GoldenGateプロセスに割り当てられたログイン資格証明を保護する様々なオプションが用意されています。推奨されるオプションは、資格証明ストアを使用することです。1つの資格証明ストアを作成して、Oracle GoldenGateのすべてのインストールでアクセス可能な共有の場所に格納したり、Oracle GoldenGateがインストールされるシステムごとに個別の資格証明ストアを作成したりできます。

資格証明ストアには、割り当てられている各Oracle GoldenGateユーザーのユーザー名およびパスワードが格納されます。ユーザーIDは1つ以上の別名に関連付けられ、実際のユーザー名またはパスワードではなく、コマンドおよびパラメータ・ファイルで提供される別名です。資格証明ファイルはドメインにパーティション化できるため、別名の標準のセットをプロセスに使用して、各システムの管理者がローカルで管理できます。

データベース接続の構成

Oracle GoldenGateは、ODBC (Open Database Connectivity)ドライバを使用してPostgreSQLデータベースに接続するため、ソースおよびターゲットPostgreSQLデータベースごとに、正しいデータベース接続詳細を使用してシステム・データ・ソース名(DSN)を作成する必要があります。

Oracle GoldenGateのインストールPostgreSQLのDataDirectドライバのインストールに従って、DSNを作成する前にドライバをインストールして構成していることを確認します。

ノート:

Extract接続がレプリケーション接続として識別されないことによってPgBouncerがレプリケーション・プロトコルを認識しないため、PostgreSQLデータベースへのExtract接続にはPgBouncer設定を使用しないでください。

この項では、ExtractおよびReplicatで使用するDSN接続を設定する手順について説明します。

内容は次のとおりです。

Linuxでのデータベース接続の構成

Linuxでデータベース接続を作成するには、/etc/odbc.iniファイル内にデータ・ソース名(DSN)を設定します。
  1. /etc/odbc.iniファイルにソース・データベースまたはターゲット・データベースごとにDSNを作成します。

    sudo vi /etc/odbc.ini
    #Sample DSN entries
    [ODBC Data Sources]
    PG_src=DataDirect 7.1 PostgreSQL Wire Protocol
    PG_tgt=DataDirect 7.1 PostgreSQL Wire Protocol
    [ODBC]
    IANAAppCodePage=4
    InstallDir=/u01/app/ogg
    [PG_src]
    Driver=/u01/app/ogg/lib/GGpsql25.so
    Description=DataDirect 7.1 PostgreSQL Wire Protocol
    Database=sourcedb
    HostName=remotehost
    PortNumber=5432
    [PG_tgt]
    Driver=/u01/app/ogg/lib/GGpsql25.so
    Description=DataDirect 7.1 PostgreSQL Wire Protocol
    Database=targetdb
    HostName=remotehost
    PortNumber=5432

    前述の例で、各要素の意味は次のとおりです。

    PG_srcおよびPG_tgtは、ExtractやReplicatなどのOracle GoldenGateプロセスによって参照されるソース・データベースおよびターゲット・データベースのDSNのユーザー定義名です。DSN名はアンダースコアとダッシュ以外のキーボードの特殊文字を除く英数字で32文字までの長さにできます。

    IANAAppCodePage=4はデフォルト設定ですが、データベース文字セットがUnicodeでない場合、次のガイダンスに従って変更できます。

    https://docs.progress.com/bundle/datadirect-connect-odbc-71/page/IANAAppCodePage_9.html#IANAAppCodePage_9

    InstallDirは、Oracle GoldenGateインストール・フォルダの場所です。

    Driverは、Oracle GoldenGateインストール・ホーム$OGG_HOME/lib/GGpsql25.soファイルの場所です。

    Databaseは、ソース・データベースまたはターゲット・データベースの名前です。

    HostNameは、データベース・ホストのIPアドレスまたはホスト名です。

    PortNumberは、データベースのリスニング・ポートです。

    また、LogonIDおよびPasswordをExtractまたはReplicatユーザーに提供することもできますが、これらはクリア・テキストに格納されるため、かわりにこれらのフィールドをDSNから除外して、Oracle GoldenGateウォレットに資格証明別名として格納し、ExtractおよびReplicatのUSERIDALIASパラメータを使用して参照することをお薦めします。

  2. odbc.iniファイルを保存して閉じます。

Windowsでのデータベース接続の構成

Windowsでデータベース接続を作成するには、Windowsの「ODBCデータ ソース アドミニストレーター」を使用して、ソース・データベースおよびターゲット・データベースごとにシステムDSNを作成します。
  1. Windowsシステムで、「コントロール パネル」フォルダを開きます。

  2. 「管理ツール」フォルダを開きます。

  3. 「ODBC データ ソース (64 ビット)」を開きます。「ODBC データ ソース アドミニストレーター」ダイアログ・ボックスが表示されます。

  4. 「システム DSN」タブを選択し、「追加」をクリックします。

  5. 「データ ソースの新規作成」Oracle GoldenGate PostgreSQL Wire Protocolドライバを選択し、「完了」をクリックします。

  6. 「新しいデータ ソースの作成」ウィザードが表示されます。

  7. 次のように指定します。
    • 「データ ソース名」にDSNの名前(アンダースコアとダッシュ以外のキーボードの特殊文字を除く英数字で32文字までの長さ)を入力します。

    • (オプション)「説明」に、このDSNの説明を入力します。

    • データベース・サーバーの「ホスト名」、データベースの「ポート番号」および「データベース名」を指定します。

  8. 「OK」をクリックし、ダイアログ・ボックスを閉じます。

「ユーザー名」情報は「セキュリティ」タブで指定することもできますが、かわりにこのフィールドを空のままにして、ユーザー名とパスワードをOracle GoldenGateウォレットに資格証明別名として格納し、ExtractおよびReplicatのUSERIDALIASパラメータを使用して参照することをお薦めします。

PostgreSQLのSSLサポートの構成

SSLを有効にするには、PostgreSQL構成ファイル($PGDATA/postgresql.conf)を構成します。詳細は、Oracle GoldenGate環境の保護SSLサポート(PostgreSQL)の構成を参照してください。

ノート:

Azure Database for PostgreSQLは、デフォルトでSSL接続を強制します。この要件に従うには、ここにリストされている要件を実行するか、またはオプションで、Microsoft Azure Portalを使用して、データベース・インスタンスの接続セキュリティ設定からSSL接続の強制を無効にできます。

処理のための表の準備

次の表属性は、PostgreSQLのOracle GoldenGate環境で対処する必要があります。

内容は次のとおりです。

ターゲット表に対するトリガーおよびカスケード制約の無効化

トリガー操作またはカスケード制約によって発生するDML操作をソース表から取得するようにOracle GoldenGateが構成されている場合は、ターゲット表でトリガー、カスケード削除制約およびカスケード更新制約を無効にします。

無効になっていない場合、同じトリガーまたは制約がターゲット表でアクティブになり、レプリケートされたデータのために重複となります。ソース表にemp_srcsalary_src、ターゲット表にemp_targsalary_targを使用している次の例について考えます
  1. emp_srcに対して削除が発行されます。

  2. それによって、削除がsalary_srcにカスケードされます。

  3. Oracle GoldenGateが、両方の削除をターゲットに送信します。

  4. まず親削除が到着し、emp_targに適用されます。

  5. 親削除によって、削除がsalary_targにカスケードされます。

  6. salary_srcのカスケードされた削除が、salary_targに適用されます。

  7. 行は、すでにステップ5で削除されているため、見つかりません。

ReplicatのMAP文で、ソース表を適切なターゲットにマップし、ソース表がトリガーまたは外部キー・カスケード制約で参照する子表をマップします。データの整合性を保つには、トリガーおよびカスケードされた子操作を適切なターゲットにマップする必要があります。ExtractのTABLEパラメータに同じ親と子のソース表を含めます。

表における行の一意性の保証

Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。

TABLEまたはMAP文でKEYCOLS句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
  1. 主キー

  2. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。

  3. 前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。PostgreSQL LOBタイプ(textjsonxmlbyteacharvarcharなど)の場合、Oracle GoldenGateでは、長さ8191バイトまで、これらの列がソース表またはターゲット表の主キーとしてサポートされます。

    ノート:

    表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。

    表に一意性がなく、同じ値を含む繰返し行が存在する場合、Replicatは、これらの行の更新および削除操作時に異常終了します。

  4. 表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。Oracle GoldenGateリファレンスTABLE | MAPを参照してください。

表レベルのサプリメンタル・ロギングの有効化

サプリメンタル・ロギングの有効化のプロセスでは、Oracle GoldenGateにより、ソース・データベースの表レベルのロギングが、ソースDML操作のチェンジ・データ・キャプチャをサポートするように設定され、ロギングのレベルに応じて、競合の検出と解決が構成された双方向レプリケーションなどの場合に必要となる、変更されない追加の列が含められます。

PostgreSQLには、表のREPLICA IDENTITY設定に相当する4つのレベルの表レベルのロギングがあり、これらのレベルにはNOTHINGUSING INDEXDEFAULTおよびFULLが含まれます。

Oracle GoldenGateでは、非圧縮の証跡レコードおよび競合の検出と解決を必要とするユースケースにFULLロギングが必要ですが、単純な単方向構成で変更がレプリケートされる主キーまたは一意索引が表に存在する場合、またはイメージ前レコードや非圧縮レコード全体が不要である場合は、DEFAULTレベルを使用できます。NOTHINGおよびUSING INDEXロギング・レベルはOracle GoldenGateでサポートされておらず、ADD TRANDATAでは設定できません。

サプリメンタル・ロギングは、Microservices Architecture Webインタフェース内の「管理サービス」「構成」ページで、ソース・データベースに対して作成された「資格証明」から有効にするか、GGSCIまたはMicroservices Architecture管理クライアント内でADD TRANDATAコマンドを使用して発行できます。

次に、GGSCIからADD TRANDATAを発行する構文を示します。
GGSCI> DBLOGIN SOURCEDB dsn_name USERIDALIAS alias_name
 GGSCI> ADD TRANDATA schema.tablename ALLCOLS

ノート:

主キーまたは一意索引が存在する表では、表に対してFULLロギングを設定するためにALLCOLSオプションが必要であり、それ以外の場合は、DEFAULTロギングが設定されます。

FULLロギングは、ALLCOLSが指定されているかどうかに関係なく、主キーまたは一意索引が存在しない表に対して常に設定されます。

サプリメンタル・ロギングのレベルをチェックするには、次のようにします。
GGSCI> INFO TRANDATA schema.tablename