Oracle DDLでサポートされているオブジェクトおよび操作

DDLキャプチャのサポートは、データベース・ログマイニング・サーバーに統合されています。データベース・パラメータの互換性を11.2.0.4.0以降に設定する必要があります。Extractは次のようなパスワード・ベースの列の暗号化を含むDDLをサポートします。

  • CREATE TABLE t1 (a number, b varchar2(32) ENCRYPT IDENTIFIED BY my_password);

  • ALTER TABLE t1 ADD COLUMN c varchar2(64) ENCRYPT IDENTIFIED BY my_password;

DDLサポートに関して、Extractに次の追加の文が適用されます。

  • Oracle GoldenGateのすべてのトポロジ構成は、Oracle DDLレプリケーションでサポートされています。

  • Oracle DDLのアクティブ/アクティブ(双方向)レプリケーションは、同一のメタデータが含まれている2つ(および2つだけ)のデータベース間でサポートされています。

  • Oracle GoldenGateでは、次のオブジェクトでDDLはサポートされます。

    • クラスタ

    • ディレクトリ

    • ファンクション

    • 索引

    • パッケージ

    • プロシージャ

    • 表領域

    • ロール

    • 順序

    • シノニム

    • トリガー

    • ビュー

    • マテリアライズド・ビュー

    • ユーザー

    • 非表示列

  • Oracle DDLのOracleエディション・ベース再定義(EBR)のデータベース・レプリケーションは、次のOracle Databaseオブジェクトに対するExtractでサポートされています。

    • ファンクション

    • ライブラリ

    • パッケージ(仕様と本体)

    • プロシージャ

    • シノニム

    • 型(仕様と本体)

    • ビュー

  • Oracle GoldenGate 21c以降、サイズが4MBを超えるDDLにレプリケーション・サポートが提供されます。

  • Oracle GoldenGate 23ai以降では、SQLドメインがサポートされています。

  • Oracle GoldenGateでは、行サイズが4MB未満の場合に4000列の表を管理できます。

  • Oracle GoldenGateは、グローバル一時表(GTT) DDL操作をレプリケートできるように、Extractへのこの操作の表示をサポートしています。この操作はデフォルトでは設定されていないため、有効にするにはDDLOPTIONSパラメータを設定する必要があります。

  • Oracle GoldenGateは、NOUSERIDおよびTRANLOGOPTIONS GETCTASDMLとともに使用するディクショナリをサポートしています。これは、Extractは、ディクショナリ・オブジェクトを問い合せることなく、LogMinerディクショナリからオブジェクト・メタデータを受信することを意味します。Oracle GoldenGateは、ソース・データベースの互換性パラメータが11.2.0.4以降のときに自動的にディクショナリを使用します。

    Oracle GoldenGate release 12.2.xでディクショナリと証跡フォーマットを使用するときには、Extractはマイニング・データベースにLogminerパッチが適用されることを必要とします(Oracle Databaseのリリースが12.1.0.2よりも前の場合)。

  • Oracle GoldenGateは、Extractでの非表示列のレプリケーションをサポートしています。証跡フォーマット・リリース12.2が必要です。ReplicatではMAPINVISIBLECOLUMNSパラメータを指定するか、MAPパラメータのCOLMAP句で非表示列に明示的にマップする必要があります。

    SOURCEDEFSまたはTARGETDEFSを使用する場合、Oracle表の定義ファイルのメタデータ・フォーマットは証跡フォーマットと互換性があることが必要です。メタデータ・フォーマット12.2は証跡フォーマット12.2と互換性があり、12.2より前のメタデータ・フォーマットは12.2より前の証跡フォーマットと互換性があります。定義ファイルのメタデータ・フォーマットを指定するには、DEFGENで定義ファイルを生成するときに、DEFSFILEパラメータのFORMAT RELEASEオプションを使用します。

  • ネームスペース・コンテキストを作成するDDL文(CREATE CONTEXT)は、Extractによってキャプチャされ、Replicatによって適用されます。

  • ポンプ・モードのExtractは、次のDDLオプションをサポートしています。

    • DDL INCLUDE ALL

    • DDL EXCLUDE ALL

    • DDL EXCLUDE OBJNAME

    DDL EXCLUDESOURCECATALOGおよびALLCATALOGオプションもサポートされています。

    DDLパラメータが指定されていない場合、すべてのDDLが証跡に書き込まれます。DDL EXCLUDE OBJNAMEが指定されている場合は、オブジェクト所有者が除外ルールに一致しないと証跡に書き込まれます。

  • Oracleデータベース21c以降では、Oracle GoldenGateによってレプリケートされないDML/DDLの変更のブロックをサポートするために、次のDDLを使用できます。

    ALTER DATABASE [ENABLE | DISABLE] goldengate blocking mode;
    Oracle GoldenGateのブロック・モードが有効な場合、表でsupport_mode NONEを使用して、サポートされていないOracle PL/SQL文を実行するDMLは、次のエラーで失敗します。
    ORA-26981: "operation was unsupported during Oracle GoldenGate blocking mode"
    Oracleデータベース21cの場合は、次の機能により、Oracle GoldenGateで表にsupport_mode NONEが設定されます。
    • ADT列または型指定表の属性としてのBFILE

    • スカラーのない表

    • OLAP AW$表

    • シャード・キュー表

    • ソートされたハッシュ・クラスタ表

    • リレーショナル表のADT属性に対する主キー制約

    • 長い(4000バイトを超える) raw/varcharに対する主キー/一意キー制約

    • V$DATABASE列、Goldengate_Blocking_Modeを問い合せると、現在のブロック・モードのステータスを確認できます。

  • DDL自動取得モードの場合:
    • ExtractはTABLEおよびTABLEEXCLUDEパラメータに基づいてDDLを取得するため、DDL INCLUDE MAPPEDにのみ関連します。

    • 自動取得できるのは、表関連のDDLのみです。

    • 表レベルで自動取得を有効にするDDL:
      CREATE/ALTER TABLE … ENABLE LOGICAL REPLICATION ALLKEYS;
      または
      CREATE/ALTER TABLE … ENABLE LOGICAL REPLICATION ALLOW NOVALIDATE KEYS;

    Oracle DatabaseユーティリティガイドのOracle GoldenGateのサプリメンタル・ロギングの取得方法を参照してください。

  • 次の操作は、パーティション関連のDDLとパーティション・メンテナンス操作でサポートされます。

    • パーティションの削除:

      同じ名前でパーティションが再作成されると、新しいオブジェクト番号が付与されます。内部キャッシュは、パーティション削除DDLの処理時に、領域の消費量が最小限になるようにクリアされます。

    • パーティションの切捨て:

      パーティション名とオブジェクト番号は同じままです。元表のオブジェクト・バージョンは同じままです。

    • パーティション名の変更:

      パーティション・オブジェクト番号は同じままですが、新しい名前が付与されます。元表のオブジェクト・バージョンがバンプされます。メモリー内の名前キャッシュは、このDDLが確認されると無効になり、次のDML時に再移入されます。特定のパーティション・オブジェクト番号が重要かどうかを格納するキャッシュは、新しいパーティション名がフィルタ処理済からフィルタ処理なしに切り替わる可能性があるため、再評価する必要もあります。

    • パーティションの交換:

      パーティション内のデータを表内のデータと交換します(またはその逆に交換します)。交換されるパーティションのオブジェクト番号は変更されません。データ・オブジェクト番号は変更されますが、Extractでは使用しません。パーティション自体は引き続き同じ表に属します。

    • パーティションのマージ:

      1つ以上のパーティションを新しいパーティションにマージします。DDLによって新しいパーティションが作成され、マージ元のパーティションが削除されます。メモリー内のキャッシュは領域を節約するためにクリアする必要があり、ユーザーはフィルタ・ルールが新しく作成されたパーティションに対して適切なことを確認する必要があります。

    • パーティションの分割:

      分割されるパーティションには元の名前とオブジェクト番号が保持され、分割されたデータのための新しいパーティションが作成されます。ユーザーは、パーティションのフィルタ・ルールが新しく作成されたパーティションに適していることを確認する必要があります。

    • パーティションの結合:

      ハッシュ・パーティション表のパーティション数を減らします。結合される特定のパーティションはデータベースにより選択され、コンテンツの再配布後に削除されます。残存するパーティションでは、同じ名前とオブジェクト番号が維持されます。内部キャッシュは、領域の消費量が最小限になるようにクリアする必要があります。

    • パーティションの変更:

      リスト・パーティションの値の追加または削除とは別に、パーティションのデフォルトの属性と実際の属性を変更します。すべての変更で、パーティション名とオブジェクト番号は維持されます。

    • パーティションの移動:

      パーティション・データが新しい表領域に移動されます。パーティション名と番号は同じままです。

    • 表の再定義:

      dbms_redefinitionは、暫定表を使用して表をパーティション化するために使用できます。パーティションは暫定表に作成され、finish_redef操作後に表の名前がスワップされます。暫定表に作成されたパーティションでは、表のスワップ時に名前とオブジェクト番号が保持されます。パーティションは元表に属するようになっているため、Extractフィルタ・キャッシュはfinish_redef時に再評価する必要があります。ユーザーはフィルタ・ルールが適切なことを確認する必要があります。

    • パーティションの再定義:

      表を再定義する場合、パーティションは元の表から暫定表に引き継がれます。たとえば、元の表にはUSER表領域に存在するパーティションがあり、暫定表がパーティションなしで作成され、その表がNEW表領域に存在する場合について考えてみます。この場合、finish_redef操作後に、表がスワップされたときにもパーティションは引き続きUSER表領域に存在します。再定義パーティションによって、パーティションは暫定表のNEW表領域に移動できるようになります。パーティションの名前とオブジェクト番号は維持されます。

    • システム生成のパーティション名:

      ハッシュ・パーティションや分割パーティションなどの操作に対してパーティションが自動的に作成される場合、パーティション名の形式はSYS_P sequence valueになります。同様に、サブパーティションの形式はSYS_SUBP sequence valueになります。フィルタ・ルールに準拠するDMLを除外する前に、このパーティション名の変更をお薦めします。