Oracle DDLのオブジェクトと操作のサポートの詳細
DDL操作の取得とレプリケーションについてOracle GoldenGateでサポートされるOracleオブジェクトと操作について学習します。
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は、グローバル一時表(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 EXCLUDE
のSOURCECATALOG
および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を除外する前に、このパーティション名の変更をお薦めします。
-
サポートされていないOracle DDLのオブジェクトおよび操作
ここでは、Oracle DDLでサポートされていないオブジェクトと操作を示します。
除外されるオブジェクト
次の名前または名前の接頭辞はOracle予約済とみなされ、Oracle GoldenGate DDL構成から除外する必要があります。これらの名前を含むオブジェクトはOracle GoldenGateによって無視されます。
除外されるスキーマ:
"ANONYMOUS", // HTTP access to XDB "APPQOSSYS", // QOS system user "AUDSYS", // audit super user "BI", // Business Intelligence "CTXSYS", // Text "DBSNMP", // SNMP agent for OEM "DIP", // Directory Integration Platform "DMSYS", // Data Mining "DVF", // Database Vault "DVSYS", // Database Vault "EXDSYS", // External ODCI System User "EXFSYS", // Expression Filter "GSMADMIN_INTERNAL", // Global Service Manager "GSMCATUSER", // Global Service Manager "GSMUSER", // Global Service Manager "LBACSYS", // Label Security "MDSYS", // Spatial "MGMT_VIEW", // OEM Database Control "MDDATA", "MTSSYS", // MS Transaction Server "ODM", // Data Mining "ODM_MTR", // Data Mining Repository "OJVMSYS", // Java Policy SRO Schema "OLAPSYS", // OLAP catalogs "ORACLE_OCM", // Oracle Configuration Manager User "ORDDATA", // Intermedia "ORDPLUGINS", // Intermedia "ORDSYS", // Intermedia "OUTLN", // Outlines (Plan Stability) "SI_INFORMTN_SCHEMA", // SQL/MM Still Image "SPATIAL_CSW_ADMIN", // Spatial Catalog Services for Web "SPATIAL_CSW_ADMIN_USR", "SPATIAL_WFS_ADMIN", // Spatial Web Feature Service "SPATIAL_WFS_ADMIN_USR", "SYS", "SYSBACKUP", "SYSDG", "SYSKM", "SYSMAN", // Adminstrator OEM "SYSTEM", "TSMSYS", // Transparent Session Migration "WKPROXY", // Ultrasearch "WKSYS", // Ultrasearch "WK_TEST", "WMSYS", // Workspace Manager "XDB", // XML DB "XS$NULL", "XTISYS", // Time Index
特別なスキーマ:
"AURORA$JIS$UTILITY$", // JSERV "AURORA$ORB$UNAUTHENTICATED", // JSERV "DSSYS", // Dynamic Services Secured Web Service "OSE$HTTP$ADMIN", // JSERV "PERFSTAT", // STATSPACK "REPADMIN", "TRACESVR" // Trace server for OEM
除外される表は次のとおりです(*ワイルドカードは任意のスキーマまたは文字を示します)。
"*.AQ$*", // advanced queues "*.DR$*$*", // oracle text "*.M*_*$$", // Spatial index "*.MLOG$*", // materialized views "*.OGGQT$*", "*.OGG$*", // AQ OGG queue table "*.ET$*", // Data Pump external tables "*.RUPD$*", // materialized views "*.SYS_C*", // constraints "*.MDR*_*$", // Spatial Sequence and Table "*.SYS_IMPORT_TABLE*", "*.SYS_EXPORT_TABLE*", "*.CMP*$*", // space management, rdbms >= 12.1 "*.DBMS_TABCOMP_TEMP_*", // space management, rdbms < 12.1 "*.MDXT_*$*" // Spatial extended statistics tables
サポートされていないその他のDDL
Oracle GoldenGateでは次のものはサポートされていません。
-
ネストされた表に対するDDL。
-
IDENTITY列に対するDDL。
-
ALTER DATABASE
およびALTER SYSTEM
(これらはDDLとはみなされません)。ディクショナリを使用している場合は、ALTER DATABASE DEFAULT EDITION
およびALTER PLUGGABLE DATABASE DEFAULT EDITION
をレプリケートできます。その他のALTER [PLUGABLE] DATABASE
コマンドはすべて無視されます。 -
スタンバイ・データベースに対するDDL。
-
データベース・リンクDDL。
-
FLASHBACK ARCHIVE
句を含む表を作成するDDL、またはフラッシュバック・データ・アーカイブ自身を作成、変更または削除するDDL。FLASHBACK ARCHIVE
を含む表に対するDMLはサポートされません。 -
一部のDDLは、システム生成のオブジェクト名を生成します。システム生成オブジェクトの名前は、異なる2つのデータベース間で常に同じであるとはかぎりません。そのため、システム生成名を持つオブジェクトに対するDDL操作は、その名前がターゲットで完全に同じ場合にのみ実行する必要があります。