プライマリ・コンテンツに移動
Oracle® GoldenGate Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成
12c (12.1.2)
E49844-07
  目次へ移動
目次

前
 
次
 

16 DDLレプリケーション環境の管理

この章では、DDLレプリケーションをサポートするためにOracle GoldenGate DDLトリガーが使用されている場合に、データベース環境またはOracle GoldenGate環境を変更する手順について説明します。DDLオブジェクトの詳細は、付録D「トリガーベースのDDLキャプチャのインストール」を参照してください。

この章の内容は次のとおりです。

Oracle GoldenGateのDDLサポートを構成する手順については、第13章「DDLサポートの構成」を参照してください。


注意:

この章は、トリガーベースのDDLキャプチャが使用されているクラシック・キャプチャ・モードまたは統合キャプチャ・モードにのみ関係があります。

16.1 DDL処理の一時的な無効化

指定されている場合、インスタンス化タスクまたはその他のタスクを実行する前に、DDLアクティビティを無効化する必要があります。タスクの終了後、DDL処理を再開できます。

  1. ソース・データベースでユーザーのDDL操作を無効化します。

  2. 以前のDDLレプリケーション・プロセスがまだアクティブな場合は、これらのプロセスを停止する前に、最後に実行したDDL操作がターゲットに適用されたことを確認して、ロード・データが正しいメタデータを持つオブジェクトに適用されるようにします。

  3. 新しいOracle GoldenGate環境用に構成したExtractおよびReplicatパラメータ・ファイルで、DDLパラメータをコメント・アウトします。DDLをサポートするその他のパラメータをすべて、コメント・アウトします。

  4. Oracle GoldenGate DDLトリガーが使用されている場合、無効化します。16.2項「DDLトリガーの有効化と無効化」を参照してください。

16.2 DDLトリガーの有効化と無効化

Oracle GoldenGate内で構成を変更せずにDDL操作をキャプチャするトリガーを有効および無効にすることができます。次のスクリプトによって、DDLトリガーが制御されます。

  • ddl_disable: トリガーを無効にします。トリガーを無効にした後、DDL操作はこれ以上キャプチャまたはレプリケートされません。

  • ddl_enable: トリガーを有効にします。トリガーを有効にすると、Oracle GoldenGateによって現在のDDL変更がキャプチャされますが、トリガーを無効にしている間に生成されたDDLはキャプチャされません。

これらのスクリプトを実行する前に、Oracle GoldenGateのプロセス、SQL*Plus、ビジネス・アプリケーションおよびOracleを使用するその他のソフトウェアのセッションなど、これまでDDLを発行したすべてのセッションを無効にします。それを行わない場合、データベースでORA-04021エラーが生成される可能性があります。ソース・システムおよびターゲット・システムでDDLの一貫性を維持する場合には、これらのスクリプトを使用しないでください。

16.3 DDLマーカー表の保持

マーカー表から行をいつでもパージできます。DDL履歴は保持されません。マーカー表をパージするには、ManagerパラメータPURGEMARKERHISTORYを使用します。Managerによって、次のいずれかからマーカー表の名前が取得されます。

  1. GLOBALSファイルのMARKERTABLEパラメータで指定した名前(指定した場合)

  2. デフォルト名であるGGS_MARKER

PURGEMARKERHISTORYによって、最終変更日に基づいて行を保持する時間の最大時間と最小時間を指定するオプションが提供されます。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。

16.4 DDLマーカー表の削除

DDLの同期を中止する場合を除き、DDLマーカー表を削除しないでください。マーカー表とDDLトリガーは互いに依存します。DDLトリガーが有効である場合にマーカー表をドロップすると失敗します。これは、トリガーが無効になり、DDL操作が見つからないことを回避するための安全対策です。マーカー表を削除すると、次のエラーが生成されます。

ORA-04098: trigger 'SYS.GGS_DDL_TRIGGER_BEFORE' is invalid and failed re-validation

Oracle GoldenGateのDDLオブジェクトを削除する正しい方法は、残りのDDL環境をどうするかによって異なります。正しい手順を選択するには、次のいずれかを参照してください。

16.5 DDL履歴表の保持

DDL履歴表をパージしてそのサイズを制御できますが、これは慎重に実行してください。DDL履歴表によって、DDL同期環境の整合性が維持されます。この表へのパージは、Oracle GoldenGateのインタフェースを介してリカバリすることはできません。

  1. DDLの履歴を損失するあらゆる可能性を回避するには、定期的に履歴表の完全バックアップを作成します。

  2. パージされたDDLを確実にリカバリできるようにするには、履歴テーブルに対してOracle Flashbackを有効にします。フラッシュバック保存時間は、それが必要になる可能性がある時点を大幅にさかのぼって設定します。たとえば、完全バックアップが最大1週間分である場合は、2週間分のフラッシュバックを保持します。Oracle GoldenGateを過去にさかのぼってフラッシュバックに配置し、再処理することが可能です。

  3. 可能な場合、DDL履歴表を手動でパージして、必須の行が誤ってパージされることがないようにします。自動パージ・メカニズムが必要な場合、Managerパラメータ・ファイルでPURGEDDLHISTORYパラメータを使用します。行を保持する最大時間および最小時間を指定できます。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。


注意:

パフォーマンスを向上させるためにOracle GoldenGateによって作成される一時表は、同じルールに従ってDDL履歴表と同時にパージされる場合があります。これらの表の名前は履歴表の名前から取得され、それらのパージがManagerレポート・ファイルで報告されます。これは正常な動作です。

16.6 DDL履歴表の削除

DDLの同期を中止する場合を除き、DDL履歴表を削除しないでください。履歴表には、発行されたDDL操作のレコードが含まれています。ソース・データベースのREDO互換性が11.2.0.4以上になる場合と同様に、ExtractがDDLトリガーを使用するから、トリガーを使用しないに切り替えると、ただちにではありませんが、これらのデータベースを削除できます。互換性変更の前に生成されたREDOのすべてのマイニングを完了し、このREDOの再マイニングが不要になるようにする必要があります。

履歴表とDDLトリガーは互いに依存します。DDLトリガーが有効である場合に履歴表をドロップすると失敗します。これは、トリガーが無効になり、DDL操作が見つからないことを回避するための安全対策です。履歴表を削除すると、次のエラーが生成されます。

ORA-04098: trigger 'SYS.GGS_DDL_TRIGGER_BEFORE' is invalid and failed re-validation

Oracle GoldenGateのDDLオブジェクトを削除する正しい方法は、残りのDDL環境をどうするかによって異なります。正しい手順を選択するには、次のいずれかを参照してください。

16.7 DDLトレース・ファイルのパージ

DDLトレース・ファイルでディスクの空き容量を必要以上に消費しないようにするには、定期的にddl_cleartraceスクリプトを実行します。このスクリプトによってトレース・ファイルが削除されますが、Oracle GoldenGateによってそれが再作成されます。

DDLトレース・ファイルのデフォルト名はggs_ddl_trace.logです。それはOracleのUSER_DUMP_DESTディレクトリにあります。ddl_cleartraceスクリプトは、Oracle GoldenGateディレクトリにあります。

16.8 DDLサポートが有効である場合のデータベースのパッチおよびアップグレードの適用

通常、データベースのパッチおよびアップグレードによってOracle GoldenGateのDDLトリガーとOracle GoldenGateのその他のDDLオブジェクトが無効化されます。データベースのパッチを適用する前に、次の手順を実行します。

  1. SYSDBA権限を持つユーザーとしてSQL*Plusにログインします。

  2. SQL*Plusでddl_disableスクリプトを実行して、Oracle GoldenGateのDDLトリガーを無効にします。

  3. パッチを適用します。

  4. SQL*Plusでddl_enableスクリプトを実行して、DDLトリガーを有効にします。


注意:

通常、データベースのアップグレードおよびパッチはOracleのオブジェクトに対して動作します。Oracle GoldenGateによってそれらのオブジェクトが自動的にフィルタ処理で除外されるため、それらの手順のDDLはレプリケーションの再開時にレプリケートされません。

パッチまたはアップグレード後の再コンパイル・エラー(処理の前にトリガーを無効にしていない場合に発生)を回避するには、スクリプト内の適切な場所に@ddl_disableおよび@ddl_enableのコールを追加することを検討してください。

16.9 DDLサポートが有効である場合のOracle GoldenGateのパッチおよびアップグレードの適用

この項では、DDLサポートが有効である場合に、Oracle GoldenGateのパッチおよびアップグレードを適用する方法について説明します。


注意:

ご使用のOracle GoldenGateリリースのリリース・ノートまたはアップグレード・ドキュメントにこの項に示す手順と同様の手順が記載されている場合は、この項の手順ではなくそれらの手順に従ってください。30Kよりも大きいDDL文をサポートしていないOracle GoldenGateのバージョン(バージョン10.4以前)からのアップグレードにこの手順を使用しないでください。その場合にアップグレードするには、16.10項「既存のDDL環境のクリーン状態への復元」の手順を実行します。

パッチまたはアップグレードをDDLオブジェクトに適用するには、次の手順を実行します。この手順では、新しいビルドにクリーン・インストールが必要であるかどうかに応じて、現在のDDL同期構成が保持される、あるいは保持されない場合があります。

  1. GGSCIを実行します。この手順の間、セッションを開いたままにしてください。

  2. DDLキャプチャを停止するためにExtractを停止します。

    STOP EXTRACT group
    
  3. DDLレプリケーションを停止するためにReplicatを停止します。

    STOP REPLICAT group
    
  4. Oracle GoldenGateによって提供される指示に従って、パッチまたはアップグレードのファイルをダウンロードあるいは抽出します。

  5. ディレクトリをOracle GoldenGateインストール・ディレクトリに変更します。

  6. SYSDBA権限を持つユーザーとしてSQL*Plusにログインします。

  7. Oracle GoldenGateのプロセス、SQL*Plus、ビジネス・アプリケーションおよびOracleを使用するその他のソフトウェアのセッションなど、これまでDDLを発行したすべてのセッションを切断します。それを行わない場合、データベースでORA-04021エラーが生成される可能性があります。

  8. ddl_disableスクリプトを実行してDDLトリガーを無効にします。

  9. ddl_setupスクリプトを実行します。Oracle GoldenGate DDLのスキーマ名の入力が求められます。スキーマ名を変更した場合、新しい名前を使用してください。

  10. ddl_enable.sqlスクリプトを実行してDDLトリガーを有効にします。

  11. GGSCIでExtractを開始してDDLキャプチャを再開します。

    START EXTRACT group
    
  12. DDLレプリケーションを開始するためにReplicatを開始します。

    START REPLICAT group
    

16.10 既存のDDL環境のクリーン状態への復元

Oracle GoldenGateのDDLオブジェクトを完全に削除してから再インストールするには、次の手順を実行します。この手順によって新しいDDL環境が作成されますが、現在のDDL履歴は削除されます。


注意:

この手順では、オブジェクトの相互依存性のため、すべてのオブジェクトを削除して再インストールする必要があります。

  1. Oracle GoldenGateの新しいバージョンのインストールと同時にこの手順を実行する場合、Oracle GoldenGateのファイルをダウンロードしてインストールし、必要に応じてプロセス・グループとパラメータ・ファイルを作成または更新します。

  2. (オプション)ソースおよびターゲットの構造の連続性を維持するには、DDLアクティビティを停止してからReplicatによって証跡内のDDLとDMLデータの処理が完了されていることを確認します。Replicatの終了時間を判断するには、処理するデータがこれ以上存在しないことを示すメッセージが表示されるまで次のコマンドを発行します。

    INFO REPLICAT group
    

    注意:

    INFO REPLICATを使用するかわりに、TABLEおよびMAPEVENTACTIONSオプションを使用して、DDLとDMLの処理後にExtractおよびReplicatのプロセスを停止できます。

  3. GGSCIを実行します。

  4. DDLキャプチャを停止するためにExtractを停止します。

    STOP EXTRACT group
    
  5. DDLレプリケーションを停止するためにReplicatを停止します。

    STOP REPLICAT group
    
  6. ディレクトリをOracle GoldenGateインストール・ディレクトリに変更します。

  7. SYSDBA権限を持つユーザーとしてSQL*Plusにログインします。

  8. Oracle GoldenGateのプロセス、SQL*Plus、ビジネス・アプリケーションおよびOracleを使用するその他のソフトウェアのセッションなど、これまでDDLを発行したすべてのセッションを切断します。それを行わない場合、データベースでORA-04021エラーが生成される可能性があります。

  9. ddl_disableスクリプトを実行してDDLトリガーを無効にします。

  10. ddl_removeスクリプトを実行して、Oracle GoldenGate DDLトリガー、DDL履歴とマーカー表、およびその他の関連オブジェクトを削除します。デバッグで必要となる場合に備え、このスクリプトにより、スクリプト出力を記録するddl_remove_spool.txtファイルと、環境設定を記録するddl_remove_set.txtファイルが作成されます。

  11. marker_removeスクリプトを実行して、Oracle GoldenGateマーカー・サポート・システムを削除します。デバッグで必要となる場合に備え、このスクリプトにより、スクリプト出力を記録するmarker_remove_spool.txtファイルと、環境設定を記録するmarker_remove_set.txtファイルが作成されます。

  12. このインストール用のDDLスキーマを変更する場合、次の権限をOracle GoldenGateスキーマに付与します。

    GRANT EXECUTE ON utl_file TO schema;
    
  13. このインストール用のDDLスキーマを変更する場合、スキーマのデフォルト表領域をそのスキーマ専用にする必要があります。他のスキーマと共有することはできません。この表領域に対してAUTOEXTENDONに設定し、表領域のサイズをGGS_DDL_HIST表およびGGS_MARKER表の拡張に対応できるサイズに設定する必要があります。特に、GGS_DDL_HIST表はDDLアクティビティ全体に比例して増加します。


    注意:

    DDL表領域が一杯になると、ExtractはDDLのキャプチャを停止します。その場合にユーザーDDLアクティビティが失敗するようにするには、params.sqlスクリプトを編集してddl_fire_error_in_triggerパラメータをTRUEに設定します。ユーザーDDLを停止することで表領域のサイズを拡張する時間ができ、DDLキャプチャが失われることを防ぎます。ただし、表領域のサイズをこのように管理する場合、ビジネスの混乱を防ぐためにビジネス・アプリケーションとExtractを絶えず監視する必要があります。かわりに、表領域を適切なサイズに設定し、表領域が一杯にならないようにAUTOEXTENDONに設定することをお薦めします。


    警告:

    記載された手順に従ってオブジェクト名を変更する必要がある場合以外、params.sqlの他のパラメータを編集しないでください。


  14. このインストール用のDDLスキーマを変更する場合、GLOBALSファイルを編集し、次のパラメータに新規スキーマ名を指定します。

    GGSCHEMA schema_name
    
  15. marker_setupスクリプトを実行して、Oracle GoldenGateマーカー・サポート・システムを再インストールします。Oracle GoldenGateスキーマの名前を入力するよう求められます。

  16. ddl_setupスクリプトを実行します。Oracle GoldenGate DDLのスキーマ名の入力が求められます。

  17. role_setupスクリプトを実行して、Oracle GoldenGate DDLロールを再作成します。

  18. ロールを、Oracle GoldenGateプロセス(Extract、Replicat、GGSCIおよびManager)を実行するすべてのOracle GoldenGateユーザーに付与します。プロセスに異なるユーザー名がある場合、複数の付与が必要になることがあります。

  19. ddl_enable.sqlスクリプトを実行してDDLトリガーを有効にします。

16.11 システムからのDDLオブジェクトの削除

この手順によって、DDL環境が削除され、ソースとターゲットのDDL操作間で連続性を維持する履歴が削除されます。


注意:

オブジェクトの相互依存性のため、すべてのオブジェクトを削除する必要があります。

  1. GGSCIを実行します。

  2. DDLキャプチャを停止するためにExtractを停止します。

    STOP EXTRACT group
    
  3. DDLレプリケーションを停止するためにReplicatを停止します。

    STOP REPLICAT group
    
  4. ディレクトリをOracle GoldenGateインストール・ディレクトリに変更します。

  5. SQL*Plusを実行し、SYSDBA権限を持つユーザーでログインします。

  6. Oracle GoldenGateのプロセス、SQL*Plus、ビジネス・アプリケーションおよびOracleを使用するその他のソフトウェアのセッションなど、これまでDDLを発行したすべてのセッションを切断します。それを行わない場合、データベースでORA-04021エラーが生成される可能性があります。

  7. ddl_disableスクリプトを実行してDDLトリガーを無効にします。

  8. ddl_removeスクリプトを実行して、Oracle GoldenGate DDLトリガー、DDL履歴とマーカー表、および関連オブジェクトを削除します。デバッグで必要となる場合に備え、このスクリプトにより、スクリプト出力を記録するddl_remove_spool.txtファイルと、現在のユーザー環境設定を記録するddl_remove_set.txtファイルが作成されます。

  9. marker_removeスクリプトを実行して、Oracle GoldenGateマーカー・サポート・システムを削除します。デバッグで必要となる場合に備え、このスクリプトにより、スクリプト出力を記録するmarker_remove_spool.txtファイルと、環境設定を記録するmarker_remove_set.txtファイルが作成されます。