PostgreSQL

この項では、Oracle GoldenGate for PostgreSQLの構成の詳細を示します。

トピック:

データベース・ユーザーおよび権限の準備

データベース・ユーザーの作成およびOracle GoldenGate for PostgreSQLの権限の割当てについて学習します。

トピック:

Oracle GoldenGate for PostgreSQLのデータベース権限

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

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

権限 Extract Replicat 目的

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

CONNECT

はい

はい

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

GRANT CONNECT ON DATABASE dbname TO gguser;

WITH REPLICATION

はい

NA

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

ALTER USER gguser WITH REPLICATION;

WITH SUPERUSER

はい

NA

表レベルのサプリメンタル・ロギング(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;

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

NA

はい

レプリケートされた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 for MySQLのデータベース接続、システムおよびパラメータ設定の構成について学習します。

トピック:

データベース接続の構成

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

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

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

ノート:

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

ノート:

トピック:

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

Oracle GoldenGateプロセス用にLinuxでデータベース接続を作成するには、/etc/odbc.iniファイル内でDSN (データ・ソース名)を作成します。複数のDSNを、同じODBCファイルに含めることができます。

DSNファイルを作成するときは、次の最小設定を使用します。
  • Data Source Name - ExtractやReplicatなどのOracle GoldenGateプロセスによって参照される、ソースまたはターゲット・データベース接続のユーザー定義名。DSN名では、32文字までの英数字を使用でき、特殊文字としてはアンダースコア(_)とダッシュ(-)のみを使用できます。

  • IANAAppCodePage=4 - これがデフォルト設定ですが、データベース文字セットがUnicodeでない場合は、https://docs.progress.com/bundle/datadirect-connect-odbc-71/page/IANAAppCodePage_9.html#IANAAppCodePage_9のページで示されているガイダンスに従って変更できます。

  • InstallDir - Oracle GoldenGateインストール・パスの値です(/u01/app/oggなど)。

  • Driver - 21.8より前のOracle GoldenGateリリース・バージョンの場合は、 /<GoldenGate_Installation_Path>/lib/GGpsql25.soに設定します。

    Oracle GoldenGateリリース・バージョン21.8以降の場合は、この値を/<GoldenGate_Installation_Path>/datadirect/lib/ggpsql25.soに設定します。

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

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

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

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

次に、2つのDSNエントリを含む/etc/odbc.iniファイルの例を示します。次の例で使用されているデータ・ソース名は、PG_srcとPG_tgtです。

  1. /etc/odbc.iniファイルにソース・データベースまたはターゲット・データベースごとにDSNを作成します。
    sudo vi /etc/odbc.ini

  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)で構成パラメータSSLをonに設定します。SSLが有効である場合、対応するhostsslエントリがpg_hba.confファイル内に存在するか追加されている必要があります。

SSLが有効である場合、Oracle GoldenGateは次のスニペットに示すように、ルート証明書、ルート証明書失効リスト(CRL)、サーバー・クライアント証明書およびキーをデフォルトの場所から使用します。

~/.postgresql/root.crt
~/.postgresql/root.crl
~/.postgresql/postgresql.crt
~/.postgresql/postgresql.key

このリストから目的のエンティティを作成し、適切な場所に格納する必要があります。

デフォルト以外の場所を使用してSSL構成を設定する場合、次の環境変数を環境ごとに設定する必要があります。

PGSSLROOTCERT
PGSSLCRL
PGSSLCERT
PGSSLKEY

トピック:

$ODBCINIファイルに必要な変更

SSLサポートは、$ODBCINIファイルでEncryptionMethod DSN属性を1または6に設定することにより有効にできます。

0 (暗号化なし)に設定すると、データは暗号化されません。

1 (SSL)に設定すると、「Crypto Protocol Version」接続オプションで指定されたSSLプロトコルを使用してデータが暗号化されます。指定された暗号化方法がデータベース・サーバーでサポートされていない場合は、接続に失敗してエラーが返されます。

6 (RequestSSL)に設定すると、サーバーがSSL用に構成されていれば、ログイン・リクエストおよびデータはSSLを使用して暗号化されます。サーバーがSSL用に構成されていない場合は、暗号化されていない接続が確立されます。使用するSSLプロトコルは、「Crypto Protocol Version」接続オプションの設定によって決まります。

データベース・サーバー/クライアントの証明書も検証する必要がある場合は、対応するKeyStoreファイルを作成し、指定したODBC DSN属性を$ODBCINIで適宜設定する必要があります。

KeyStore=<path to .p12 keystore file> KeyStorePassword=<keystore-passwd> TrustStore=<path to root certificate> ValidateServerCertificate=1

ノート:

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

データベース構成

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 Extractをサポートするには、先行書込みロギングを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 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 Extractを構成する場合、論理デコードを有効にしてLOGICALに設定する必要があります。

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

https://learn.microsoft.com/en-us/azure/postgresql/

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 Extractのソース・データベースとして使用される場合は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を参照してください。

処理のための表の準備

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タイプ(textxmlbyteacharvarcharなど)の場合、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では設定できません。

次に、管理クライアントからADD TRANDATAを発行する構文を示します。
DBLOGIN SOURCEDB dsn_name USERIDALIAS alias_name
ADD TRANDATA schema.tablename ALLCOLS

ノート:

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

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

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