PostgreSQL
この項では、Oracle GoldenGate for PostgreSQLの構成の詳細を示します。
トピック:
- データベース・ユーザーおよび権限の準備
- データベース接続、システムおよびパラメータ設定の準備
- 表レベルのサプリメンタル・ロギングの有効化
- PostgreSQL: サポートされているデータ型、オブジェクトおよび操作
親トピック: 構成
データベース・ユーザーおよび権限の準備
データベース・ユーザーの作成およびOracle GoldenGate for PostgreSQLの権限の割当てについて学習します。
トピック:
Oracle GoldenGate for PostgreSQLのデータベース権限
Oracle GoldenGateプロセスでは、データベース・ユーザーがPostgreSQLデータベースに対してデータを取得して配信する必要があり、ExtractおよびReplicatに専用のPostgreSQLデータベース・ユーザーを作成することをお薦めします。
Oracle GoldenGateでPostgreSQLデータベースに対する取得および適用を実行するには、次のデータベース・ユーザー権限が必要です。
権限 | Extract | Replicat | 目的 |
---|---|---|---|
データベース・レプリケーション権限 |
|||
|
はい |
はい |
データベース接続に必要です。
|
|
はい |
NA |
ユーザーがExtractをレプリケーション・スロットに登録するために必要です。
|
|
はい |
NA |
表レベルのサプリメンタル・ロギング(
Azure Database for PostgreSQLの場合、管理ユーザーのみがSUPERUSER権限を持ち、TRANDATAを有効にできる唯一のユーザーです。 |
|
はい |
はい |
レプリケート対象のスキーマ内の表へのメタデータ・アクセス用。
|
|
はい |
はい |
レプリケート対象の表に対する選択アクセス権を付与します。
|
ターゲット表の |
NA |
はい |
レプリケートされたDMLをターゲット・オブジェクトに適用
|
ハートビートおよびチェックポイント表の権限 |
|||
|
はい |
はい |
ExtractおよびReplicatユーザーが、ハートビートおよびチェックポイント表の作成用にOracle GoldenGateスキーマを追加するために必要です。
または、 |
|
はい |
はい |
ExtractまたはReplicatユーザーがオブジェクトを所有していない場合の、ハートビートとチェックポイント表の作成/削除用。
|
|
はい |
はい |
関数をコールするユーザーがオブジェクトを所有していない場合の、ハートビート更新関数およびパージ関数の実行用。
|
|
はい |
はい |
ユーザーがオブジェクトを所有していない場合の、ハートビートとチェックポイント表の挿入、更新および削除用。
|
親トピック: データベース・ユーザーおよび権限の準備
データベース接続、システムおよびパラメータ設定の準備
Oracle GoldenGate for MySQLのデータベース接続、システムおよびパラメータ設定の構成について学習します。
トピック:
親トピック: PostgreSQL
データベース接続の構成
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ファイルに含めることができます。
-
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ユーザーの
LogonID
とPassword
を指定することもできますが、これらはクリア・テキストで格納されます。これらのフィールドは、DSNに含めずに、かわりにOracle GoldenGateウォレットに資格証明別名として格納し、ExtractおよびReplicatでUSERIDALIAS
パラメータを使用してそれらを参照することをお薦めします。
次に、2つのDSNエントリを含む/etc/odbc.ini
ファイルの例を示します。次の例で使用されているデータ・ソース名は、PG_src
とPG_tgtです。
-
/etc/odbc.ini
ファイルにソース・データベースまたはターゲット・データベースごとにDSNを作成します。sudo vi /etc/odbc.ini
#Sample DSN entries [ODBC Data Sources]
PG_src=Oracle GoldenGate PostgreSQL Wire Protocol
PG_tgt=Oracle GoldenGate PostgreSQL Wire Protocol
[ODBC] IANAAppCodePage=4 InstallDir=/u01/app/ogg
[PG_src]
Driver=/u01/app/ogg/datadirect/lib/ggpsql25.so
Description=Oracle GoldenGate PostgreSQL Wire Protocol
Database=sourcedb
HostName=remotehost
PortNumber=5432
[PG_tgt]
Driver=/u01/app/ogg/datadirect/lib/ggpsql25.so
Description=Oracle GoldenGate PostgreSQL Wire Protocol
Database=targetdb
HostName=remotehost
PortNumber=5432
-
odbc.ini
ファイルを保存して閉じます。
親トピック: データベース接続の構成
Windowsでのデータベース接続の構成
親トピック: データベース接続の構成
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接続の強制を無効にできます。
親トピック: PostgreSQLの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
- 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_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
、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
では設定できません。
ADD TRANDATA
を発行する構文を示します。DBLOGIN SOURCEDB dsn_name USERIDALIAS alias_name
ADD TRANDATA schema.tablename ALLCOLS
ノート:
主キーまたは一意索引が存在する表では、表に対してFULL
ロギングを設定するためにALLCOLS
オプションが必要であり、それ以外の場合は、DEFAULT
ロギングが設定されます。
FULL
ロギングは、ALLCOLS
が指定されているかどうかに関係なく、主キーまたは一意索引が存在しない表に対して常に設定されます。
INFO TRANDATA schema.tablename
親トピック: PostgreSQL