2 Oracle GoldenGateのためのデータベースの準備

Oracle GoldenGateのためのデータベースの準備方法について説明します。これには、接続とロギングを構成する方法、目的のデータベースでOracle GoldenGateを有効にする方法、フラッシュバック問合せを設定する方法、サーバー・リソースを管理する方法などが含まれます。

内容は次のとおりです。

統合プロセスの接続の構成

統合キャプチャおよび統合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資格証明ストアに格納されます。

GGSCI> INFO CREDENTIALSTORE DOMAIN support
Domain: Support
  Alias: ext
  Userid: intext@test

パラメータ・ファイルにデータベース接続情報を指定する方法の詳細は、『Oracle GoldenGateの管理』を参照してください。

ロギング・プロパティの構成

Oracle GoldenGateは、REDOログを使用して、ソース・トランザクションのレプリケートに必要なデータをキャプチャします。Oracle GoldenGateの処理を始める前に、Oracle REDOログをソース・システムに適切に構成する必要があります。

この項では、Oracle GoldenGateに適用される次のロギング・レベルについて説明します。使用するロギング・レベルは、Oracle GoldenGate機能または使用している機能によって異なります。

注意:

この必要なロギングによってREDOの量が増えます。Oracle GoldenGate処理を開始してログが有効化されるまで待つ場合があります。

この表に、様々なロギング・プロパティのOracle GoldenGateユースケースを示します。

ロギング・オプション GGSCIコマンド 機能 ユースケース

強制ロギング・モード

なし: データベースを通じて有効化します。

すべてのトランザクションおよびロードのロギングを強制します。

すべてのOracle GoldenGateユースケースで強くお薦めします。

最小のデータベース・レベルのサプリメンタル・ロギング

なし: データベースを通じて有効化します。

最小サプリメンタル・ロギングで行連鎖情報をREDOログに追加できるようにします。

すべてのOracle GoldenGateユースケースに必要です。

スキーマ・レベルのサプリメンタル・ロギング、デフォルト設定

「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照してください。

ADD SCHEMATRANDATA

主キーの無条件のサプリメンタル・ロギングを有効化し、スキーマのすべての表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。これらのキーは、すべてスケジューリング列と呼ばれます。

スキーマの現在および将来のすべての表でロギングを有効化します。主キー、一意キーおよび外部キーの列がソースとターゲットの両方で同じでない場合は、ALLCOLSを使用します。DDLサポートを使用する場合に必要です。

サポートされるすべての列で無条件のロギングを使用したスキーマ・レベルのサプリメンタル・ロギング。(サポートされない列タイプの場合は、「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照してください。)

ALLCOLSオプションを指定したADD SCHEMATRANDATA

スキーマのすべての表で、表のすべての列の無条件のサプリメンタル・ロギングを有効化します。

双方向およびアクティブ/アクティブ構成で使用され、そこでは更新または削除の実行時に、変更された列だけでなくすべての列値がチェックされます。より多くのリソースが消費されますが、最高レベルのリアルタイム・データ検証と競合検出が可能になります。

ソースおよびターゲットの主キー、一意キーおよび外部キーがソースとターゲット間で同一でないか、定期的に変更される場合にも使用できます。

スキーマ・レベルのサプリメンタル・ロギング、最小設定

NOSCHEDULINGCOLSオプションを指定したADD SCHEMATRANDATA

スキーマのすべての表の主キーおよび有効なすべての一意索引の無条件のサプリメンタル・ロギングを有効化します。

非統合Replicatでのみ使用します。これは、最低限必要なスキーマ・レベルのロギングです。

統合Replicatの組込みサポートを使用した表レベルのサプリメンタル・ロギング

「表レベルのサプリメンタル・ロギングの有効化」を参照してください。

ADD TRANDATA

主キーの無条件のサプリメンタル・ロギングを有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。これらのキーは、すべてスケジューリング列と呼ばれます。

スキーマ・レベルのサプリメンタル・ロギングが使用されていないかぎり、すべてのOracle GoldenGateユースケースで必要です。主キー、一意キーおよび外部キーの列がソースとターゲットの両方で同じでない場合は、ALLCOLSを使用します。

サポートされるすべての列で無条件のロギングを使用した表レベルのサプリメンタル・ロギング。(サポートされない列タイプの場合は、「表レベルのサプリメンタル・ロギングの有効化」を参照してください。)

ALLCOLSオプションを指定したADD TRANDATA

表のすべての列の無条件のサプリメンタル・ロギングを有効化します。

双方向およびアクティブ/アクティブ構成で使用され、そこでは更新または削除の実行時に、変更された列だけでなくすべての列値がチェックされます。より多くのリソースが消費されますが、最高レベルのリアルタイム・データ検証と競合検出が可能になります。

ソースおよびターゲットの主キー、一意キーおよび外部キーがソースとターゲット間で同一でないか、定期的に変更される場合にも使用できます。

表レベルのサプリメンタル・ロギング、最小設定

NOSCHEDULINGCOLSオプションを指定したADD TRANDATA

表の主キーおよび有効なすべての一意索引の無条件のサプリメンタル・ロギングを有効化します。

非統合Replicatでのみ使用します。これは、最低限必要な表レベルのロギングです。

注意:

Oracle Databaseは、Extractでログ・ファイルを処理できるように、ARCHIVELOGモードにする必要があります。

最小のデータベース・レベルのサプリメンタル・ロギングの有効化

Oracleソース・データベースを強制ロギング・モードにすることを強くお薦めします。強制ロギング・モードでは、すべてのトランザクションおよびロードのロギングを強制し、反対にユーザーまたは記憶域の設定をオーバーライドします。これにより、Extract構成のソース・データが失われることがなくなります。

また、最小サプリメンタル・ロギング、データベース・レベル・オプションは、Oracle GoldenGateを使用する場合にOracleソース・データベースに必要です。これは、連鎖行の情報(存在する場合)を更新操作用のREDOログに追加します。

注意:

レプリケーションの外部の表に過剰なオーバーヘッドが発生するため、データベース・レベルの主キー(PK)および一意索引(UI)ロギングはあまりお薦めしません。これらのロギング・オプションがビジネス用途に必要でないかぎり、必要な操作は、最小サプリメンタル・ロギングをデータベース・レベルで有効化し、Oracle GoldenGateのロギングを強制するだけです。

次の手順を実行し、必要に応じて最小サプリメンタル・ロギングおよび強制ロギングを確認して有効化します。

  1. ALTER SYSTEM権限を持つユーザーとしてSQL*Plusにログインします。
  2. 次のコマンドを発行し、データベースがサプリメンタル・ロギング・モードかどうか、および強制ロギング・モードかどうかを確認します。両方の問合せで結果がYESの場合、データベースはOracle GoldenGate要件を満たしています。
    SELECT supplemental_log_data_min, force_logging FROM v$database;
    
  3. いずれかまたは両方のプロパティで結果がNOの場合、次のステップに進み、必要に応じて有効化します。
    SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    SQL> ALTER DATABASE FORCE LOGGING;
    
  4. 次のコマンドを発行し、これらのプロパティが有効化されていることを確認します。
    SELECT supplemental_log_data_min, force_logging FROM v$database;
    

    両方のプロパティで、この問合せの出力がYESになる必要があります。

  5. ログ・ファイルを切り替えます。
    SQL> ALTER SYSTEM SWITCH LOGFILE;

スキーマ・レベルのサプリメンタル・ロギングの有効化

Oracle GoldenGateでは、スキーマ・レベルのサプリメンタル・ロギングをサポートしています。スキーマ・レベルのロギングは、Oracle GoldenGate DDLレプリケーション機能を使用する場合に、Oracleソース・データベースで必要です。その他すべてのユースケースではオプションですが、表レベルのロギングをかわりに使用する必要があります(「表レベルのサプリメンタル・ロギングの有効化」を参照してください)。

スキーマ・レベルのロギングでは、デフォルトで主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、スキーマのすべての表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。必要に応じて、オプションでロギングを変更できます。

注意:

ワイルドカード指定を満たす場合に、スキーマに追加される新しい表がキャプチャされるため、表レベルのロギングよりもスキーマ・レベルのロギングを使用することを強くお薦めします。

次の手順をソース・システムで実行して、スキーマ・レベルのサプリメンタル・ロギングを有効化します。

  1. 11.2.0.2より前のバージョンの場合、ソースOracle DatabaseにOracle Patch 13794550を適用します。
  2. ソース・システムでGGSCIを実行します。
  3. 資格証明ストア内の、スキーマ・レベルのサプリメンタル・ロギングを有効にする権限を持つユーザーの別名でDBLOGINコマンドを発行します。
    DBLOGIN USERIDALIAS alias
    

    USERIDALIASおよび追加オプションの詳細は、『Oracle GoldenGateリファレンス』USERIDALIASに関する項を参照してください。

  4. Oracle GoldenGateでデータの変更をキャプチャする対象の各スキーマに対し、ADD SCHEMATRANDATAコマンドを発行します。
    ADD SCHEMATRANDATA schema [ALLCOLS | NOSCHEDULINGCOLS]
    

    説明:

    • オプションがない場合、ADD SCHEMATRANDATAスキーマでは、主キーのソース・システムで無条件のサプリメンタル・ロギングを有効化し、指定したスキーマの現在および将来のすべての表のすべての一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。無条件ロギングでは、主キーの値を、キーが現在の操作で変更されたかどうかにかかわらず、強制的にログに記録します。条件付きロギングは、外部キーまたは一意キーの列のすべての値を、それらのうちの少なくとも1つが現在の操作で変更された場合に、ログに記録します。デフォルトは、非統合Replicatをオプションでサポートしますが、依存関係を計算するために、主キー、一意キーおよび外部キーをすべてインバウンド・サーバーで使用できるようにする必要があるため、統合Replicatをサポートする必要があります。統合Replicatの詳細は、「使用する適用方法の決定」を参照してください。

    • ALLCOLSを使用すると、表のすべての列の無条件のサプリメンタル・ロギングを有効化して、指定したスキーマの現在および将来のすべての表に適用できます。ソース表とターゲット表に異なるスケジューリング列が含まれる場合に、統合Replicatをサポートするために使用します。(スケジューリング列は、主キー、一意キーおよび外部キーです。)

    • NOSCHEDULINGCOLSは、スキーマの既存の表および後で追加された新しい表で、主キーおよび有効なすべての一意索引の値のみをログに記録します。これは、必要最小限のレベルのスキーマ・レベルのロギングで、非統合モードのReplicatのみで有効です。

    次の例では、financeスキーマのデフォルトのサプリメンタル・ロギングをコマンドで有効にします。

    ADD SCHEMATRANDATA finance
    

    次の例では、hrスキーマの主キーおよび有効な一意索引のみでサプリメンタル・ロギングをコマンドで有効にします。

    ADD SCHEMATRANDATA hr NOSCHEDULINGCOLS
    

表レベルのサプリメンタル・ロギングの有効化

表レベルのサプリメンタル・ロギングは、次の場合にソース・システムで有効化します。

  • スキーマ・レベルのロギングを使用しない場合に、必要なレベルのロギングを有効にする場合(「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照)。スキーマ・レベルまたは表レベルのロギングを使用する必要があります。表レベルのロギングでは、デフォルトで主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。必要に応じて、オプションでロギングを変更できます。

  • 指定した表で主キーのロギングを回避する場合。

  • キー以外の列の値を表レベルで記録し、Oracle GoldenGateの特定の機能(フィルタリング、競合検出および解決ロジックなど)をサポートする場合。

次の手順をソース・システムで実行して、表レベルのサプリメンタル・ロギングを有効化するか、コマンドのオプションの機能を使用します。

  1. ソース・システムでGGSCIを実行します。

  2. 資格証明ストア内の、表レベルのサプリメンタル・ロギングを有効にする権限を持つユーザーの別名を使用してDBLOGINコマンドを発行します。

    DBLOGIN USERIDALIAS alias
    

    DBLOGINおよび追加オプションの詳細は、『Oracle GoldenGateリファレンス』USERIDALIASに関する項を参照してください。

  3. ADD TRANDATAコマンドを発行します。

    ADD TRANDATA [container.]schema.table [, COLS (columns)] [, NOKEY] [, ALLCOLS | NOSCHEDULINGCOLS]
    

    説明:

    • containerは、表がマルチテナント・コンテナ・データベースにある場合、ルート・コンテナまたはプラガブル・データベースの名前です。

    • 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列を記録する必要があります。

  4. ADD TRANDATACOLSオプションを使用する場合、ターゲットでそれらの列に一意の索引を作成して行の取得を最適化します。KEYCOLS句の代替キーとしてこれらの列を記録する場合は、Oracle GoldenGateプロセスを構成するときにKEYCOLS句をTABLEおよびMAP文に追加する必要があります。

データベースでのOracle GoldenGateの有効化

Oracle GoldenGateキャプチャをサポートおよび適用するために必要なデータベース・サービスは、11.2.0.4以上のOracleデータベースで明示的に有効化する必要があります。

Oracle GoldenGateキャプチャをサポートおよび適用するために必要なデータベース・サービスは、11.2.0.4以上のOracleデータベースで明示的に有効化する必要があります。これは、ExtractおよびReplicatのすべてのモードに必要です。

Oracle GoldenGateを有効化するには、次のデータベース初期化パラメータを設定します。Oracle RACのすべてのインスタンスで同じ設定にする必要があります。

ENABLE_GOLDENGATE_REPLICATION=true

このパラメータの詳細は、初期化パラメータに関する項を参照してください。

フラッシュバック問合せの設定

特定の更新レコードを処理するために、Extractによってソース・データベースから追加の行データがフェッチされます。

Oracle GoldenGateでフェッチされるデータは次のとおりです。

  • ユーザー定義型

  • ネストされた表

  • XMLTypeオブジェクト

デフォルトでは、Oracle GoldenGateでフラッシュバック問合せを使用してUNDO (ロールバック)表領域から値をフェッチします。そのように、Oracle GoldenGateでは特定の時点またはSCNで読取り一貫性行イメージを再構築し、REDOレコードと一致させることができます。

最適なフェッチ結果を得るには、ソース・データベースを次のように構成します。

  1. 次のようにOracle初期化パラメータUNDO_MANAGEMENTおよびUNDO_RETENTION(秒単位)を設定することで、REDO保存に十分な時間を設定します。
    UNDO_MANAGEMENT=AUTO
    
    UNDO_RETENTION=86400 
    
    UNDO_RETENTION can be adjusted upward in high-volume environments.
    
  2. 次の式を使用して、UNDO表領域で必要な領域を計算します。
    undo_space = UNDO_RETENTION * UPS + overhead
    

    説明:

    • undo_spaceは、UNDOブロック数です。

    • UNDO_RETENTIONは、UNDO_RETENTIONパラメータの値です(秒単位)。

    • UPSは、1秒当たりのUNDOブロック数です。

    • overheadは、メタデータ(トランザクション表など)の最小オーバーヘッドです。

    システム・ビューV$UNDOSTATを使用して、UPSおよびoverheadを見積ります。

  3. LOBが含まれている表には、次のいずれかを実行します。
    • LOB記憶域句をRETENTIONに設定します。これは、UNDO_MANAGEMENTAUTOに設定したときに作成される表のデフォルトです。

    • RETENTIONのかわりにPCTVERSIONを使用する場合、PCTVERSIONを初期値の25に設定します。これは、STATS EXTRACTコマンドでレポートされるフェッチ統計に基づいて調整できます。これらの統計のSTAT_OPER_ROWFETCH CURRENTBYROWIDフィールドまたはSTAT_OPER_ROWFETCH_CURRENTBYKEYフィールドの値が大きい場合、統計で低い値を示すまでPCTVERSIONを10ずつ増やします。

  4. 次の権限のいずれかをOracle GoldenGate Extractユーザーに付与します。
    GRANT FLASHBACK ANY TABLE TO db_user
    
    GRANT FLASHBACK ON schema.table TO db_user
    

Oracle GoldenGateによって、フェッチの管理に次のパラメータが提供されます。

パラメータまたはコマンド 説明

REPORTFETCHオプションを使用したSTATS EXTRACTコマンド

必要に応じてExtractフェッチ統計を表示します。

REPORTFETCHオプションを使用したSTATOPTIONSパラメータ

常にフェッチ統計が表示されるようにSTATS EXTRACTコマンドを設定します。

MAXFETCHSTATEMENTSパラメータ

Extractによってソース・データベースに保持される準備済の問合せおよびSQLEXEC操作のオープン・カーソル数を制御します。

MAXFETCHSTATEMENTSパラメータ

Extractのデフォルトのフェッチ動作(Extractでフラッシュバック問合せを実行するか、現在のイメージを表からフェッチするか)を制御します。

USELATESTVERSIONまたはNOUSELATESTVERSIONオプションを使用したFETCHOPTIONSパラメータ

UNDOの保存期限が切れている場合や、表の構造が変更された場合など、Extractのフラッシュバック問合せの失敗を処理します。Extractは、現在のイメージを表からフェッチするか、失敗を無視するように設定できます。

REPFETCHEDCOLOPTIONSパラメータ

フェッチされたデータが含まれる証跡レコード、または列が見つからない証跡レコードの処理時に、Replicatで応答を制御します。

サーバー・リソースの管理

統合モードでは、Extractは、ソース・データベースの基礎となるログマイニング・サーバーと対話し、Replicatはターゲット・データベースのインバウンド・サーバーと対話します。この項では、これらのサーバーで消費される共有メモリーを管理するためのガイドラインについて説明します。

サーバーで使用される共有メモリーは、データベースのシステム・グローバル領域(SGA)のStreamsプール部分です。したがって、統合モードで実行されるExtractおよびReplicatプロセスで使用できるメモリーを十分に保持するには、データベース初期化パラメータのSTREAMS_POOL_SIZEを十分に高い値に設定する必要があります。Streamsプールは、データベースの他のコンポーネント(Oracle Streams、アドバンスト・キューイング、データポンプ・エクスポート/インポートなど)でも使用されるため、Oracle GoldenGateのStreamsプールのサイズを設定する際、このことを必ず考慮に入れてください。

デフォルトでは、1つの統合キャプチャExtractで、ログマイニング・サーバーが1GBのMAX_SGA_SIZEを使用して実行されるよう要求されます。したがって、3つのExtractを統合キャプチャ・モードで同一データベース・インスタンスで実行する場合、3GB以上のメモリーをStreamsプールに割り当てる必要があります。ベスト・プラクティスとしては、Streamsプールの25パーセントが使用可能であるようにします。たとえば、3つのExtractを統合キャプチャ・モードで実行する場合、データベースのSTREAMS_POOL_SIZEを次の値に設定します。

3 GB * 1.25 = 3.75 GB