2 Oracle GoldenGateのためのデータベースの準備
Oracle GoldenGateのためのデータベースの準備方法について学習します。これには、接続とロギングを構成する方法、目的のデータベースでOracle GoldenGateを有効にする方法、フラッシュバック問合せを設定する方法、サーバー・リソースを管理する方法などが含まれます。
内容は次のとおりです。
- ExtractおよびReplicatプロセスのための接続の構成
キャプチャおよび統合Replicatでは、tnsnames.ora
ファイル内に専用のサーバー接続が必要です。 - ロギング・プロパティの構成
Oracle GoldenGateは、REDOログを使用して、ソース・トランザクションのレプリケートに必要なデータをキャプチャします。Oracle GoldenGateの処理を始める前に、Oracle REDOログをソース・システムに適切に構成する必要があります。 - データベースでのOracle GoldenGateの有効化
Oracle GoldenGateキャプチャをサポートおよび適用するために必要なデータベース・サービスは、すべてのOracleデータベース・バージョンで明示的に有効化する必要があります。これは、すべてのExtractおよびReplicatのモードに必要です。 - フラッシュバック問合せの設定
特定の更新レコードを処理するために、Extractによってソース・データベースから追加の行データがフェッチされます。 - サーバー・リソースの管理
Extractはソース・データベース内の基になるログマイニング・サーバーと対話し、Replicatはターゲット・データベース内のインバウンド・サーバーと対話します。この項では、これらのサーバーで消費される共有メモリーを管理するためのガイドラインについて説明します。 - ソース表とターゲット表での行の一意性の保証
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表に一意の行識別子が必要です。
2.1 ExtractおよびReplicatプロセスのための接続の構成
キャプチャおよび統合Replicatでは、tnsnames.ora
ファイル内に専用のサーバー接続が必要です。
これらのプロセスを構成する場合は、ExtractのUSERID
またはUSERIDALIAS
パラメータおよびReplicatパラメータを使用して、これらの接続を使用するようにプロセスを指定します。
次に、Extractおよび統合Replicatに必要な専用の接続の例を示します。
TEST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = test2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test) ) )
ExtractまたはReplicatパラメータ・ファイルに接続文字列を指定するセキュリティ・オプションは、次のとおりです。
パスワード暗号化の方法:
USERID intext@test, PASSWORD mypassword
資格証明ストアの方法:
USERIDALIAS ext
USERIDALIAS
の場合、次の例のように、別名ext
は、実際の接続文字列を含むOracle GoldenGate資格証明ストアに格納されます。
AdminClient INFO CREDENTIALSTORE DOMAIN support Domain: Support Alias: ext Userid: intext@test
Bequeath接続の設定
Bequeath接続記述子がtnsnames.ora
に追加されている場合、Oracle GoldenGateは、ネットワーク・リスナーを使用することなくデータベース・インスタンスに接続できます。
次の例は、Bequeath接続記述子を使用してデータベースに接続する場合の構成を示しています。
dbbeq = (DESCRIPTION=
(ADDRESS=(PROTOCOL=beq)
(ENVS='ORACLE_SID=sales,ORACLE_HOME=/app/db_home/oracle,LD_LIBRARY_PATH=/app/db_home/oracle/lib')
(PROGRAM=/app/db_home/oracle/bin/oracle)
(ARGV0=oraclesales)
(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))'))
(CONNECT_DATA=(SID=sales)))
この例の説明は、次のとおりです。
/app/db_home
は、ターゲットOracleデータベースのインストール・ディレクトリです。
sales
は、データベース・サービス名です
ENVS
パラメータのORACLE_SID
、ORACLE_HOME
およびLD_LIBRARY_PATH
は、ターゲット・データベースを表します。
ノート:
これらの環境変数の設定の間に空白がないことを確認してください。2.2 ロギング・プロパティの構成
Oracle GoldenGateは、REDOログを使用して、ソース・トランザクションのレプリケートに必要なデータをキャプチャします。Oracle GoldenGateの処理を始める前に、Oracle REDOログをソース・システムに適切に構成する必要があります。
この項では、Oracle GoldenGateに適用される次のロギング・レベルについて説明します。使用するロギング・レベルは、Oracle GoldenGate機能または使用している機能によって異なります。
ノート:
この必要なロギングによってREDOの量が増えます。Oracle GoldenGate処理を開始してログが有効化されるまで待つ場合があります。
この表に、様々なロギング・プロパティのOracle GoldenGateユースケースを示します。
ロギング・オプション | GGSCIコマンド | 機能 | ユースケース |
---|---|---|---|
強制ロギング・モード |
|
すべてのトランザクションおよびロードのロギングを強制します。 |
すべてのOracle GoldenGateユースケースで強くお薦めします。 |
最小のデータベース・レベルのサプリメンタル・ロギング |
|
最小サプリメンタル・ロギングで行連鎖情報をREDOログに追加できるようにします。 |
すべてのOracle GoldenGateユースケースに必要です。 |
スキーマ・レベルのサプリメンタル・ロギング、デフォルト設定 「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照してください。 |
|
主キーの無条件のサプリメンタル・ロギングを有効化し、スキーマのすべての表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。これらのキーは、すべてスケジューリング列と呼ばれます。 |
スキーマの現在および将来のすべての表でロギングを有効化します。主キー、一意キーおよび外部キーの列がソースとターゲットの両方で同じでない場合は、 |
サポートされるすべての列で無条件のロギングを使用したスキーマ・レベルのサプリメンタル・ロギング。(サポートされない列タイプの場合は、「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照してください。) |
|
スキーマのすべての表で、表のすべての列の無条件のサプリメンタル・ロギングを有効化します。 |
双方向およびアクティブ/アクティブ構成で使用され、そこでは更新または削除の実行時に、変更された列だけでなくすべての列値がチェックされます。より多くのリソースが消費されますが、最高レベルのリアルタイム・データ検証と競合検出が可能になります。 この方法は、初期ロードに |
スキーマ・レベルのサプリメンタル・ロギング、最小設定 |
|
スキーマのすべての表の主キーおよび有効なすべての一意索引の無条件のサプリメンタル・ロギングを有効化します。 |
非統合Replicatでのみ使用します。これは、最低限必要なスキーマ・レベルのロギングです。 |
統合Replicatの組込みサポートを使用した表レベルのサプリメンタル・ロギング 「表レベルのサプリメンタル・ロギングの有効化」を参照してください。 |
|
主キーの無条件のサプリメンタル・ロギングを有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。これらのキーは、すべてスケジューリング列と呼ばれます。 |
スキーマ・レベルのサプリメンタル・ロギングが使用されていないかぎり、すべてのOracle GoldenGateユースケースで必要です。主キー、一意キーおよび外部キーの列がソースとターゲットの両方で同じでない場合は、 |
サポートされるすべての列で無条件のロギングを使用した表レベルのサプリメンタル・ロギング。(サポートされない列タイプの場合は、「表レベルのサプリメンタル・ロギングの有効化」を参照してください。) |
|
表のすべての列の無条件のサプリメンタル・ロギングを有効化します。 |
双方向およびアクティブ/アクティブ構成で使用され、そこでは更新または削除の実行時に、変更された列だけでなくすべての列値がチェックされます。より多くのリソースが消費されますが、最高レベルのリアルタイム・データ検証と競合検出が可能になります。 ソースおよびターゲットの主キー、一意キーおよび外部キーがソースとターゲット間で同一でないか、定期的に変更される場合にも使用できます。 |
表レベルのサプリメンタル・ロギング、最小設定 |
|
表の主キーおよび有効なすべての一意索引の無条件のサプリメンタル・ロギングを有効化します。 |
非統合Replicatおよび非並列Replicatに使用します。これは、最低限必要な表レベルのロギングです。 |
ノート:
Oracle Databaseは、Extractでログ・ファイルを処理できるように、ARCHIVELOG
モードにする必要があります。
2.2.1 サブセット・データベース・レプリケーションのロギングの有効化
Oracleソース・データベースを強制ロギング・モードにすることを強くお薦めします。強制ロギング・モードでは、すべてのトランザクションおよびロードのロギングを強制し、反対にユーザーまたは記憶域の設定をオーバーライドします。これにより、Extract構成のソース・データが失われることがなくなります。
また、Oracle GoldenGate 19c以降のLogMinerには、サブセット・データベース・レプリケーションと呼ばれる高詳細度のデータベース・サプリメンタル・ロギング・モードが含まれています。このモードは、すべてのOracle GoldenGateとXStreamのクライアント対する基本推奨モードです。これは、以前に使用していた最小サプリメンタル・ロギング・モードにかわるものです。詳細は、『Oracle Database SQL言語リファレンス』のALTER DATABASEに関する項を参照してください。
現時点では、サブセット・データベース・レプリケーション・ロギングは、CDB$ROOT
で有効になっています(これは、すべてのユーザーPDBに継承されます)。
ノート:
データベース・レベルの主キー(PK)および一意索引(UI)のロギングは、表のサブセットをレプリケートする場合にかぎり非推奨です。ライブ・スタンバイで使用することも、移行やアップグレードの停止時間を短縮するために、Oracle GoldenGateがすべての表をレプリケートする場合に使用することもできます。
次のステップを実行して、サブセット・データベース・レプリケーション・ロギングと強制ロギングを確認し、必要に応じて有効化します。
select con_id, minimal, subset_rep, primary_key, UNIQUE_INDEX, FOREIGN_KEY, ALL_COLUMN from cdb_supplemental_logging;
YES
になります。subset_rep = YES
select name, log_mode, force_logging, SUPPLEMENTAL_LOG_DATA_MIN,
SUPPLEMENTAL_LOG_DATA_PK PK, SUPPLEMENTAL_LOG_DATA_UI UI,
SUPPLEMENTAL_LOG_DATA_FK FK,
SUPPLEMENTAL_LOG_DATA_ALL,
SUPPLEMENTAL_LOG_DATA_SRfrom v$database;
SUPPLEMENTAL_LOG_DATA_SR
に対する問合せの出力はYES
になり、SUPPLEMENTAL_LOG_DATA_MIN
に対する問合せの出力はIMPLICIT
になります。
-
CDB$ROOT
の以前の上位レベルを削除します。ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS; ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
-
subset database replication
モードのみを追加します。ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA SUBSET DATABASEREPLICATION;
-
すべてのPDBが、この
subset database replication
モードを継承していることを確認します。
親トピック: ロギング・プロパティの構成
2.2.2 スキーマ・レベルのサプリメンタル・ロギングの有効化
Oracle GoldenGateでは、スキーマ・レベルのサプリメンタル・ロギングをサポートしています。スキーマ・レベルのロギングは、Oracle GoldenGate DDLレプリケーション機能を使用する場合に、Oracleソース・データベースで必要です。その他すべてのユースケースではオプションですが、表レベルのロギングをかわりに使用する必要があります(「表レベルのサプリメンタル・ロギングの有効化」を参照してください)。
スキーマ・レベルのロギングでは、デフォルトで主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、スキーマのすべての表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。必要に応じて、オプションでロギングを変更できます。
ノート:
ワイルドカード指定を満たす場合に、スキーマに追加される新しい表がキャプチャされるため、表レベルのロギングよりもスキーマ・レベルのロギングを使用することを強くお薦めします。キー列の変更がサプリメンタル・ログ・データにも自動的に反映されるため、この方法もお薦めします。たとえば、キーが変更された場合に、ADD TRANDATA
を発行する必要はありません。
次のステップをソース・システムで実行して、スキーマ・レベルのサプリメンタル・ロギングを有効化します。
親トピック: ロギング・プロパティの構成
2.2.3 表レベルのサプリメンタル・ロギングの有効化
表レベルのサプリメンタル・ロギングは、次の場合にソース・システムで有効化します。
-
スキーマ・レベルのロギングを使用しない場合に、必要なレベルのロギングを有効にする場合(「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照)。スキーマ・レベルまたは表レベルのロギングを使用する必要があります。表レベルのロギングでは、デフォルトで主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。必要に応じて、オプションでロギングを変更できます。
-
指定した表で主キーのロギングを回避する場合。
-
キー以外の列の値を表レベルで記録し、Oracle GoldenGateの特定の機能(フィルタリング、競合検出および解決ロジックなど)をサポートする場合。
-
表レベルのサプリメンタル・ロギングのみを持つ表でキー列が変更された場合は、表に対するDMLアクティビティを許可する前に、その表に対して
ADD TRANDATA
を実行する必要があります。
次のステップをソース・システムで実行して、表レベルのサプリメンタル・ロギングを有効化するか、コマンドのオプションの機能を使用します。
-
ソース・システムでGGSCIを実行します。
-
資格証明ストア内の、表レベルのサプリメンタル・ロギングを有効にする権限を持つユーザーの別名を使用して
DBLOGIN
コマンドを発行します。DBLOGIN USERIDALIAS
alias
DBLOGIN
および追加オプションの詳細は、『Oracle GoldenGateリファレンス』のUSERIDALIASに関する項を参照してください。 -
ADD TRANDATA
コマンドを発行します。ADD TRANDATA [
PDB
.]schema.
table
[, COLS (columns)
] [, NOKEY] [, ALLCOLS | NOSCHEDULINGCOLS]説明:
-
PDB
は、表がマルチテナント・コンテナ・データベースにある場合、ルート・コンテナまたはプラガブル・データベースの名前です。 -
schema
は、表を含むソース・スキーマです。 -
table
は、表の名前です。オブジェクト名を指定する際の手順は、『Oracle GoldenGateの管理』のOracle GoldenGateの入力におけるオブジェクト名の指定に関する項を参照してください。 -
ADD TRANDATA
で他のオプションを指定しない場合は、主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。無条件ロギングでは、主キーの値を、キーが現在の操作で変更されたかどうかにかかわらず、強制的にログに記録します。条件付きロギングは、外部キーまたは一意キーの列のすべての値を、それらのうちの少なくとも1つが現在の操作で変更された場合に、ログに記録します。デフォルトは、非統合Replicat (NOSCHEDULINGCOLS
も参照)をオプションでサポートしますが、依存関係を計算するために、主キー、一意キーおよび外部キーをすべてインバウンド・サーバーで使用できるようにする必要があるため、統合Replicatをサポートする必要があります。統合Replicatの詳細は、「使用する適用方法の決定」を参照してください。 -
ALLCOLS
では、表のすべての列の無条件のサプリメンタル・ロギングを有効化します。ソース表とターゲット表に異なるスケジューリング列が含まれる場合に、統合Replicatをサポートするために使用します。(スケジューリング列は、主キー、一意キーおよび外部キーです。) -
NOSCHEDULINGCOLS
は、非統合モードのReplicatプロセスでのみ有効です。これは、表に対して定義されている一意制約のタイプ、または一意制約のないすべての列に適した、ADD SUPPLEMENTAL LOG DATA ALWAYS
句を含むALTER TABLE
コマンドを発行します。このコマンドは、スキーマ・レベルのロギングが使用されていない場合に、Oracle GoldenGateの表レベルのロギングの基本要件を満たします。Oracle GoldenGateがキーまたは索引をどのように選択するかについては、「ソース表とターゲット表での行の一意性の保証」を参照してください。 -
COLS
columns
は、KEYCOLS
句またはフィルタリングおよび操作に必要なキー以外の列を記録します。パラメータが必要です。NOKEY
オプションが存在しないかぎり、主キーに加えてこれらの列もログに記録されます。 -
NOKEY
によって、主キーまたは一意なキーのロギングが回避されます。TABLE
パラメータおよびMAP
パラメータにKEYCOLS
句が必要で、ADD TRANDATA
コマンドでCOLS
句を使用して代替のKEYCOLS
列を記録する必要があります。
-
-
ADD TRANDATA
にCOLS
オプションを使用する場合、ターゲットでそれらの列に一意の索引を作成して行の取得を最適化します。KEYCOLS
句の代替キーとしてこれらの列を記録する場合は、Oracle GoldenGateプロセスを構成するときにKEYCOLS
句をTABLE
およびMAP
文に追加する必要があります。
親トピック: ロギング・プロパティの構成
2.3 データベースでのOracle GoldenGateの有効化
Oracle GoldenGateキャプチャおよび適用をサポートするために必要なデータベース・サービスは、すべてのOracleデータベース・バージョンで明示的に有効化する必要があります。これは、すべてのExtractおよびReplicatのモードに必要です。
Oracle GoldenGateを有効化するには、次のデータベース初期化パラメータを設定します。Oracle RACのすべてのインスタンスで同じ設定にする必要があります。
ENABLE_GOLDENGATE_REPLICATION=true
このパラメータは、DBA_FEATURE_USAGE_STATISTICS
ビューを変更します。このパラメータの詳細は、初期化パラメータに関する項を参照してください。
2.4 フラッシュバック問合せの設定
特定の更新レコードを処理するために、Extractによってソース・データベースから追加の行データがフェッチされます。
Oracle GoldenGateでフェッチされるデータは次のとおりです。
-
ユーザー定義型
-
ネストされた表
-
XMLTypeオブジェクト
デフォルトでは、Oracle GoldenGateでフラッシュバック問合せを使用してUNDO (ロールバック)表領域から値をフェッチします。そのように、Oracle GoldenGateでは特定の時点またはSCNで読取り一貫性行イメージを再構築し、REDOレコードと一致させることができます。
最適なフェッチ結果を得るには、ソース・データベースを次のように構成します。
Oracle GoldenGateによって、フェッチの管理に次のパラメータが提供されます。
パラメータまたはコマンド | 説明 |
---|---|
|
必要に応じてExtractフェッチ統計を表示します。 |
|
常にフェッチ統計が表示されるように |
|
Extractによってソース・データベースに保持される準備済の問合せおよび |
|
Extractのデフォルトのフェッチ動作(Extractでフラッシュバック問合せを実行するか、現在のイメージを表からフェッチするか)を制御します。 |
|
UNDOの保存期限が切れている場合や、表の構造が変更された場合など、Extractのフラッシュバック問合せの失敗を処理します。Extractは、現在のイメージを表からフェッチするか、失敗を無視するように設定できます。 |
|
フェッチされたデータが含まれる証跡レコード、または列が見つからない証跡レコードの処理時に、Replicatで応答を制御します。 |
2.5 サーバー・リソースの管理
Extractはソース・データベース内の基になるログマイニング・サーバーと対話し、Replicatはターゲット・データベース内のインバウンド・サーバーと対話します。この項では、これらのサーバーで消費される共有メモリーを管理するためのガイドラインについて説明します。
サーバーで使用される共有メモリーは、データベースのシステム・グローバル領域(SGA)のStreamsプール部分です。したがって、統合モードで実行されるExtractおよびReplicatプロセスで使用できるメモリーを十分に保持するには、データベース初期化パラメータのSTREAMS_POOL_SIZE
を十分に高い値に設定する必要があります。Streamsプールは、データベースの他のコンポーネント(Oracle Streams、アドバンスト・キューイング、データポンプ・エクスポート/インポートなど)でも使用されるため、Oracle GoldenGateのStreamsプールのサイズを設定する際、このことを必ず考慮に入れてください。
デフォルトでは、1つのExtractは、ログマイニング・サーバーに1GBのMAX_SGA_SIZE
で実行するように要求します。そのため、同じデータベース・インスタンスで3つのExtractを実行する場合は、Streamsプールに3GB以上のメモリーを割り当てる必要があります。ベスト・プラクティスとしては、Streamsプールの25パーセントが使用可能であるようにします。たとえば、3つのExtractがある場合は、データベースのSTREAMS_POOL_SIZE
を次の値に設定します。
3 GB * 1.25 = 3.75 GB
2.6 ソース表とターゲット表での行の一意性の保証
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表に一意の行識別子が必要です。
TABLE
文またはMAP
文で、KEYCOLS
句を使用しない場合には、ロギングされる制約数およびタイプに応じて、Oracle GoldenGateにより、使用される行識別子が次の優先順位で選択されます(「ロギング・プロパティの構成」を参照)。
-
拡張(32K)
VARCHAR2/NVARCHAR2
列が含まれない場合は、主キー。非表示列を含まない主キー。 -
一意キー。非表示列を含まない一意キー。
非統合Replicatの場合、一意キーの選択は次のとおりです。
-
仮想列、UDT、ファンクション・ベース列、NULL値可能列、および拡張(32K)
VARCHAR2/NVARCHAR2
列がない英数字順で最初の一意キー。表示されない索引の一部である列を含むキーをサポートするには、Oracle GoldenGateGLOBALS
ファイルでALLOWINVISIBLEINDEXKEYS
パラメータを使用する必要があります。 -
仮想列、UDT、拡張(32K)
VARCHAR2/NVARCHAR2
列、ファンクション・ベース列はないが、Null値可能列がある英数字順で最初の一意キー。表示されない索引の一部である列を含むキーをサポートするには、Oracle GoldenGateGLOBALS
ファイルでALLOWINVISIBLEINDEXKEYS
パラメータを使用する必要があります。
-
-
前のどのキー型も存在しない場合(表に定義されているその他のキー型が存在する可能性があっても)、Oracle GoldenGateによって、一意なキーでデータベースを使用できるすべての列の擬似キー(仮想列、UDT、ファンクション・ベース列、拡張(32K)
VARCHAR2/NVARCHAR2
列、およびOracle GoldenGateユーザーによって、Oracle GoldenGate構成から明示的に除外されている列を除く)が作成されます。前述の制限事項によって除外されないかぎり、非表示列は擬似キーで使用できます。
ノート:
表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE
句が使用される原因となります。
表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLE
パラメータおよびReplicatのMAP
パラメータ内にKEYCOLS
句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。詳細は、『Oracle GoldenGateリファレンス』を参照してください。