D.5 依存オブジェクトの処理

元のテキストJSONデータを置き換えるJSON型データの場合、その元のデータに依存するデータベース・オブジェクトを再作成する必要があります。

一般に、テキスト・データに対して定義されたものと同様に、索引、マテリアライズド・ビュー、仮想列(およびそのすべての索引)、仮想プライベート・データベース・ポリシーおよびトリガーのすべてを再作成する必要があります。

ただし、仮想列および索引の定義は、オンライン再定義を使用してデータを移行することの一部であり、表で実行する必要があります。「オンライン再定義を使用したJSONデータ型への移行」を参照してください。

元の(テキスト)データに依存するデータベース・オブジェクトを確認するには、関連する静的ディクショナリ・ビュー(USER_INDEXESUSER_TRIGGERSUSER_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 VIEWCOMPILEを使用してビューを再コンパイルできます。

例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;

関連項目: