17 Oracle GoldenGateのためのデータベースの準備
この章では、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のドキュメントを参照してください。
-
前にリストしたデータベース構成設定について、インスタンスに割り当てられたパラメータ・グループでこれらの設定を検証し、正しいことを確認します。
-
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データベース・ユーザーを作成することをお薦めします。
権限 | Extract | Replicat | 目的 |
---|---|---|---|
データベース・レプリケーション権限 |
|||
|
はい |
はい |
データベース接続に必要です。
|
|
はい |
該当なし |
ユーザーがExtractをレプリケーション・スロットに登録するために必要です。
|
WITH SUPERUSER |
はい |
該当なし |
表レベルのサプリメンタル・ロギング(
|
|
はい |
はい |
レプリケート対象のスキーマ内の表へのメタデータ・アクセス用。
|
|
はい |
はい |
レプリケート対象の表に対する選択アクセス権を付与します。 GRANT SELECT ON ALL TABLES IN SCHEMA tableschema TO gguser; |
ターゲット表の |
該当なし |
はい |
レプリケートされたDMLをターゲット・オブジェクトに適用 GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLE tablename TO gguser; |
ハートビートおよびチェックポイント表の権限 |
|||
|
はい |
はい |
ExtractおよびReplicatユーザーが、ハートビートおよびチェックポイント表の作成用にOracle GoldenGateスキーマを追加するために必要です。 GRANT CREATE ON DATABASE dbname TO gguser; または、 |
|
はい |
はい |
ExtractまたはReplicatユーザーがオブジェクトを所有していない場合の、ハートビートとチェックポイント表の作成/削除用。
|
|
はい |
はい |
関数をコールするユーザーがオブジェクトを所有していない場合の、ハートビート更新関数およびパージ関数の実行用。 GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA ggschema TO gguser; |
|
はい |
はい |
ユーザーがオブジェクトを所有していない場合の、ハートビートとチェックポイント表の挿入、更新および削除用。 GRANT SELECT, INSERT, UPDATE, DELETE, ON ALL TABLES IN SCHEMA ggschema TO gguser; |
親トピック: Oracle GoldenGate資格証明の確立
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)を作成する必要があります。
Oracle GoldenGateのインストールのPostgreSQLのDataDirectドライバのインストールに従って、DSNを作成する前にドライバをインストールして構成していることを確認します。
ノート:
Extract接続がレプリケーション接続として識別されないことによってPgBouncerがレプリケーション・プロトコルを認識しないため、PostgreSQLデータベースへのExtract接続にはPgBouncer設定を使用しないでください。この項では、ExtractおよびReplicatで使用するDSN接続を設定する手順について説明します。
内容は次のとおりです。
Linuxでのデータベース接続の構成
/etc/odbc.ini
ファイル内にデータ・ソース名(DSN)を設定します。
-
/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でない場合、次のガイダンスに従って変更できます。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
パラメータを使用して参照することをお薦めします。 -
odbc.ini
ファイルを保存して閉じます。
親トピック: データベース接続の構成
Windowsでのデータベース接続の構成
-
Windowsシステムで、「コントロール パネル」フォルダを開きます。
-
「管理ツール」フォルダを開きます。
-
「ODBC データ ソース (64 ビット)」を開きます。「ODBC データ ソース アドミニストレーター」ダイアログ・ボックスが表示されます。
-
「システム DSN」タブを選択し、「追加」をクリックします。
-
「データ ソースの新規作成」でOracle GoldenGate PostgreSQL Wire Protocolドライバを選択し、「完了」をクリックします。
-
「新しいデータ ソースの作成」ウィザードが表示されます。
-
次のように指定します。
-
「データ ソース名」にDSNの名前(アンダースコアとダッシュ以外のキーボードの特殊文字を除く英数字で32文字までの長さ)を入力します。
-
(オプション)「説明」に、このDSNの説明を入力します。
-
データベース・サーバーの「ホスト名」、データベースの「ポート番号」および「データベース名」を指定します。
-
- 「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_src
とsalary_src
、ターゲット表にemp_targ
とsalary_targ
を使用している次の例について考えます-
emp_src
に対して削除が発行されます。 -
それによって、削除が
salary_src
にカスケードされます。 -
Oracle GoldenGateが、両方の削除をターゲットに送信します。
-
まず親削除が到着し、
emp_targ
に適用されます。 -
親削除によって、削除が
salary_targ
にカスケードされます。 -
salary_src
のカスケードされた削除が、salary_targ
に適用されます。 -
行は、すでにステップ5で削除されているため、見つかりません。
ReplicatのMAP
文で、ソース表を適切なターゲットにマップし、ソース表がトリガーまたは外部キー・カスケード制約で参照する子表をマップします。データの整合性を保つには、トリガーおよびカスケードされた子操作を適切なターゲットにマップする必要があります。ExtractのTABLE
パラメータに同じ親と子のソース表を含めます。
親トピック: 処理のための表の準備
表における行の一意性の保証
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。
TABLE
またはMAP
文でKEYCOLS
句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
-
主キー
-
タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。
-
前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。PostgreSQL LOBタイプ(
text
、json
、xml
、bytea
、char
、varchar
など)の場合、Oracle GoldenGateでは、長さ8191バイトまで、これらの列がソース表またはターゲット表の主キーとしてサポートされます。ノート:
表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE
句が使用される原因となります。表に一意性がなく、同じ値を含む繰返し行が存在する場合、Replicatは、これらの行の更新および削除操作時に異常終了します。
-
表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。Extractの
TABLE
パラメータおよびReplicatのMAP
パラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。Oracle GoldenGateリファレンスのTABLE | MAPを参照してください。
親トピック: 処理のための表の準備
表レベルのサプリメンタル・ロギングの有効化
サプリメンタル・ロギングの有効化のプロセスでは、Oracle GoldenGateにより、ソース・データベースの表レベルのロギングが、ソースDML操作のチェンジ・データ・キャプチャをサポートするように設定され、ロギングのレベルに応じて、競合の検出と解決が構成された双方向レプリケーションなどの場合に必要となる、変更されない追加の列が含められます。
PostgreSQLには、表のREPLICA IDENTITY
設定に相当する4つのレベルの表レベルのロギングがあり、これらのレベルにはNOTHING
、USING INDEX
、DEFAULT
およびFULL
が含まれます。
Oracle GoldenGateでは、非圧縮の証跡レコードおよび競合の検出と解決を必要とするユースケースにFULL
ロギングが必要ですが、単純な単方向構成で変更がレプリケートされる主キーまたは一意索引が表に存在する場合、またはイメージ前レコードや非圧縮レコード全体が不要である場合は、DEFAULT
レベルを使用できます。NOTHING
およびUSING INDEX
ロギング・レベルはOracle GoldenGateでサポートされておらず、ADD TRANDATA
では設定できません。
サプリメンタル・ロギングは、Microservices Architecture Webインタフェース内の「管理サービス」、「構成」ページで、ソース・データベースに対して作成された「資格証明」から有効にするか、GGSCIまたはMicroservices Architecture管理クライアント内でADD TRANDATA
コマンドを使用して発行できます。
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
親トピック: 処理のための表の準備