16 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つのオープン・スロットが提供されるように設定する必要があります。通常、データベースごとに複数の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のドキュメントを参照してください。
-
前にリストしたデータベース構成設定が正しいことを確認するには、インスタンスに割り当てられているパラメータ・グループ内のそれらを確認します。
-
Amazonデータベース・サービス用の
wal_level
設定は、rds.logical_replication
というパラメータで構成します。そのデフォルトは0
であり、データベースがOracle GoldenGateキャプチャのソース・データベースとして使用される場合は1
に設定する必要があります。
親トピック: データベース構成
Oracle GoldenGate資格証明の確立
データベースとやり取りするプロセスのためにデータベース・ユーザーを作成し、適切な権限を割り当て、不正使用から資格証明を保護する方法について説明します。
内容は次のとおりです。
Oracle GoldenGateへの資格証明の割当て
Oracle GoldenGateプロセスでは、PostgreSQLデータベースに対するデータのキャプチャおよび配信にデータベース・ユーザーが必要であるため、ExtractおよびReplicat用の専用のPostgreSQLデータベース・ユーザーを作成することをお薦めします。
権限 | Extract | Replicat | 用途 |
---|---|---|---|
データベース・レプリケーション権限 |
|||
|
はい |
はい |
データベース接続に必要です。
|
|
はい |
該当なし |
ユーザーがExtractをレプリケーション・スロットに登録するために必要です。
|
WITH SUPERUSER |
はい |
該当なし |
表レベルのサプリメンタル・ロギング(
SUPERUSER 権限を持ち、TRANDATA を有効にできます。
|
|
はい |
はい |
レプリケートするスキーマ内の表へのメタデータ・アクセスのため。
|
|
はい |
はい |
レプリケートする表に対する選択アクセス権を付与します。 GRANT SELECT ON ALL TABLES IN SCHEMA tableschema TO gguser; |
ターゲット表に対する |
該当なし |
はい |
レプリケートされたDMLをターゲット・オブジェクトに適用 GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLE tablename TO gguser; |
ハートビートおよびチェックポイント表の権限 |
|||
|
はい |
はい |
ハートビートおよびチェックポイント表の作成のためにOracle GoldenGateスキーマを追加するExtractおよびReplicatユーザーが必要とします。 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資格証明の確立
データベース接続の構成
Oracle GoldenGateでは、ODBC (Open Database Connectivity)ドライバを介してPostgreSQLデータベースに接続します。また、ソースおよびターゲットの各PostgreSQLデータベースの正しいデータベース接続詳細を使用してシステムのデータ・ソース名(DSN)が作成されている必要があります。
この項では、ExtractおよびReplicatで使用するDSN接続の設定手順について説明します。
DSNを作成する前に、Oracle GoldenGateのインストールのPostgreSQL用のDataDirectドライバのインストールの手順に従ってドライバをインストールし構成してあることを確認してください。
内容は次のとおりです。
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
は、Oracle GoldenGateプロセス(ExtractやReplicatなど)によって参照されるソースおよびターゲット・データベースDSNのユーザー定義名です。DSN名には、32文字までの英数字を使用でき、アンダースコアとダッシュ以外の特殊文字は使用できません。IANAAppCodePage=4
はデフォルト設定ですが、データベース文字セットがUnicodeでない場合は、次のガイダンスに従って変更できます。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
パラメータを使用して参照することをお薦めします。 -
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_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構成から除外されている列は除く)で疑似キーを作成します。
text
、xml
、bytea
、char
、varchar
などのPostgreSQL LOB型の場合、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
を発行するための構文を次に示します。GGSCI> DBLOGIN SOURCEDB dsn_name USERIDALIAS alias_name
GGSCI> ADD TRANDATA schema.tablename ALLCOLS
ノート:
主キーまたは一意索引がある表の場合、表に対してFULL
ロギングを設定するにはALLCOLS
オプションが必要になります。それ以外の場合は、DEFAULT
ロギングが設定されます。
FULL
ロギングは、ALLCOLS
が指定されているかどうかに関係なく、主キーも一意索引もない表に対しては必ず設定されます。
GGSCI> INFO TRANDATA schema.tablename
親トピック: 処理のための表の準備