タスク1: 自己完結型の表領域セットの選択
使用する表領域が自己完結型かどうか、または依存性があるかどうかを判断する方法を説明します。
トランスポータブル・セット内のデータベース・オブジェクトとトランスポータブル・セット外のデータベース・オブジェクトの間に、論理的または物理的な依存性がある場合があります。トランスポートできるのは、自己完結型である表領域セットのみです。つまり、表領域セット内のデータベース・オブジェクトが、その表領域セット外のどのデータベース・オブジェクトにも依存していないということです。
次に、自己完結した表領域に違反する例を示します。
-
表領域セット内に、そのセットに含まれない表に関する索引が含まれている場合。
ノート:
表に対応する索引が表領域セットの外部にある場合は、違反になりません。
-
パーティション表の一部が表領域セットに含まれている場合。
コピーする表領域セットは、パーティション化した表のすべてのパーティションが含まれている状態、またはまったく含まれていない状態にしてください。パーティション表のサブセットをトランスポートするには、パーティションを表に変換する必要があります。
パーティションの変換については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
-
参照整合性制約がセット境界を越えて別の表を指している場合。
表領域セットをトランスポートするときには、参照整合性制約を含めるかどうかを選択できます。ただし、そうすることによって、表領域セットの自己完結性に影響を与える場合があります。制約をトランスポートしなければ、その制約はポインタとはみなされません。
-
表領域セット内の表に、そのセットに含まれない
LOBを指すLOB列が含まれている場合 -
ユーザーAによって登録されたXML DBスキーマ(
*.xsd)で、ユーザーBによって登録されたグローバル・スキーマをインポートする際に、ユーザーAのデフォルト表領域が表領域A、ユーザーBのデフォルト表領域が表領域Bであり、表領域Aのみが表領域セットに含まれている場合。
表領域セットが自己完結型かどうかを判別するには、オラクル社が提供するDBMS_TTSパッケージにあるTRANSPORT_SET_CHECKプロシージャを実行します。このプロシージャを実行するには、EXECUTE_CATALOG_ROLEロール(最初にSYSに付与されている)を付与されている必要があります。
DBMS_TTS.TRANSPORT_SET_CHECKプロシージャを実行するときは、自己完結かどうかを調べるトランスポータブル・セットの表領域のリストを指定します。制約を含むかどうかを指定することもできます。厳密または完全な完結であるかを調べる場合は、TTS_FULL_CHECKパラメータをTRUEに設定する必要があります。
厳密または完全な完結のチェックは、トランスポータブル・セットから外部への参照のみではなく、外部からトランスポータブル・セットへの参照も捕捉する必要がある場合に実行します。依存オブジェクトがトランスポータブル・セットに完全に含まれているか、またはトランスポータブル・セットの外部にのみ存在することが必要な場合は、表領域のPoint-in-Timeリカバリ(TSPITR)を実行します。
たとえば、表t,を含んでいるが、その索引i,を含んでいない表領域に対してTSPITRを実行すると、トランスポート後に索引とデータの整合性がなくなるため、これは違反になります。完全完結チェックを実行することにより、トランスポータブル・セットからの依存関係またはトランスポータブル・セットへの依存関係がないことが保証されます。『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』でTSPITRの例を参照してください。
ノート:
デフォルトでは、トランスポータブル表領域は、完全完結しているかどうかではなく自己完結しているかどうかがチェックされます。
例5-2 表領域が自己完結型かどうかの確認
次の文を使用して、表領域sales_1およびsales_2が自己完結しているかどうかを、参照整合性制約を考慮して(TRUEを指定して)調べます。
EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('sales_1,sales_2', TRUE);
DBMS_TTS.TRANSPORT_SET_CHECKプロシージャを実行した後に、TRANSPORT_SET_VIOLATIONSビューからすべての違反を選択して表示できます。表領域セットが自己完結している場合、このビューは空になります。次の例は、表領域セットの境界を超えている外部キー定数dept_fkと、表領域セットに部分的に含まれているパーティション表jim.salesという、2つの違反がある場合を示しています。
SELECT * FROM TRANSPORT_SET_VIOLATIONS; VIOLATIONS --------------------------------------------------------------------------- Constraint DEPT_FK between table JIM.EMP in tablespace SALES_1 and table JIM.DEPT in tablespace OTHER Partitioned table JIM.SALES is partially contained in the transportable set
sales_1およびsales_2をトランスポータブルにする前に、これらの違反を解決する必要があります。整合性制約違反を回避するための選択肢の1つとして、整合性制約をエクスポートしないという方法があります。