D.5 依存オブジェクトの処理
元のテキストJSON
データを置き換えるJSON型データの場合、その元のデータに依存するデータベース・オブジェクトを再作成する必要があります。
一般に、テキスト・データに対して定義されたものと同様に、索引、マテリアライズド・ビュー、仮想列(およびそのすべての索引)、仮想プライベート・データベース・ポリシーおよびトリガーのすべてを再作成する必要があります。
ただし、仮想列および索引の定義は、オンライン再定義を使用してデータを移行することの一部であり、仮表で実行する必要があります。「オンライン再定義を使用したJSONデータ型への移行」を参照してください。
元の(テキスト)データに依存するデータベース・オブジェクトを確認するには、関連する静的ディクショナリ・ビュー(USER_INDEXES
、USER_TRIGGERS
、USER_VIEWS
など)を問い合せます。その後、PL/SQLファンクションDBMS_METADATA.get_ddl
を使用して、このようなオブジェクトの再作成に使用されたDDLコードを取得できます。例D-5に、索引に対してこれを行う方法を示します。
通常、マテリアライズド・ビューの基礎となるベース・オブジェクトを変更する場合は、マテリアライズド・ビューを再コンパイルする必要があります。それが不可能な場合は、再作成する必要があります。
マテリアライズド・ビューを再コンパイルする必要があるかどうかを確認するには、次のように静的ディクショナリ・ビューUSER_MVIEWS
を問い合せることができます。
SELECT MVIEW_NAME, COMPILE_STATE FROM USER_MVIEWS;
COMPILE_STATE
値がNEEDS_COMPILE
の場合、ALTER MATERIALIZED VIEW
… COMPILE
を使用してビューを再コンパイルできます。
例D-5 索引の再作成に必要な情報の取得
この例では、まず静的ディクショナリ・ビューUSER_INDEXES
を問い合せて、表j_purchaseorder
のテキストJSONデータの索引を検索します。
SELECT INDEX_NAME FROM USER_INDEXES
WHERE TABLE_NAME = 'J_PURCHASEORDER';
問合せ結果にpo_num_idx1
という索引が示されているとすると、DBMS_METADATA.get_ddl
を使用して、その索引の作成に使用されたDDLコードを取得できます。その後、同様のDDLを使用して、JSON
データ型に移行する同等のデータの索引を作成できます。
SELECT DBMS_METADATA.get_ddl('INDEX', po_num_idx1) FROM DUAL;
関連項目:
-
『Oracle Databaseリファレンス』の静的ディクショナリ・ビューUSER_INDEXES、USER_TRIGGERSおよびUSER_VIEWS
-
PL/SQLファンクション
DBMS_METADATA.get_ddl
の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のGET_xxxファンクションに関する項を参照してください。 -
『Oracle Databaseデータ・ウェアハウス・ガイド』の「高度なマテリアライズド・ビュー」
親トピック: テキストJSONデータからJSONデータ型への移行