16 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つのオープン・スロットが提供されるように設定する必要があります。通常、データベースごとに複数のExtractが必要になることはありません。たとえば、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)
  • 前述のいずれかの変更を加えた後は、データベースを再起動します。

内容は次のとおりです。

Azure Database for PostgreSQL、Amazon AuroraおよびAmazon RDS用のデータベース設定

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

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

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

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

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

はい

はい

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

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環境の保護資格証明ストアの作成および移入を参照してください。

データベース接続の構成

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

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

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

内容は次のとおりです。

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は、Oracle GoldenGateプロセス(ExtractやReplicatなど)によって参照されるソースおよびターゲット・データベース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は、データベースのリスニング・ポートです。

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

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

PostgreSQLのSSLサポートの構成

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

ノート:

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

処理のための表の準備

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

内容は次のとおりです。

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

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

無効にしないと、同じトリガーまたは制約がターゲット表に対してアクティブになり、レプリケートされたデータによって重複が起こります。ソース表に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構成から除外されている列は除く)で疑似キーを作成します。textxmlbyteacharvarcharなどのPostgreSQL LOB型の場合、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とともに設定できません。

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