Oracle Database のクロス・プラットフォームでの
トランスポータブル表領域機能


Oracle Databaseのトランスポータブル表領域機能は、Oracle Database間でユーザーの表領域を迅速に移動させることができます。 これは、データベース間で大量のデータを移動する上でもっとも効率的な方法です。

トランスポータブル表領域でデータを移動することは、同じデータに対してエクスポートおよびインポート、またはアンロードおよびロードすることよりもはるかに高速です。これは、表領域のトランスポートでは、データ・ファイルをコピーして、表領域の構造情報を統合するだけで十分であるためです。その他に、トランスポータブル表領域を使用すると、表と索引データの両方を移動できます。これにより、表データをインポートまたはロードする際、索引を再作成する必要がありません。

トランスポータブル表領域機能は、次のような場合などに使用すると便利です。

  • データ・ウェアハウスの表にパーティションをエクスポートおよびインポートする。
  • CDの構造化データを公開する。
  • 複数のデータベース上にある読取り専用の複数の表領域をコピーする。
  • 履歴データをアーカイブする。
  • 表領域のポイント・イン・タイム・リカバリ(TSPITR)を実行する。

Oracle Database 10gより前は、表領域をトランスポートする際に、ソース・データベースとターゲット・データベースの両方を同じプラットフォーム上に配置する必要がありましたが、Oracle Database 10g から、トランスポータブル表領域に対してクロス・プラットフォームのサポートが追加されました。

クロス・プラットフォームでトランスポータブル表領域を使用することにより、さまざまなプラットフォーム間で表領域をトランスポートできます。 この機能には、次のような活用方法があります。

  • 構造化データを公開し、異なるプラットフォーム上でOracleを使用する顧客に構造化データを配布するため、より簡単で効率的な手段をコンテンツ・プロバイダに提供する。
  • データ・ウェアハウス環境から、異なるプラットフォーム上で小規模なシステムを運用することが多いデータ・マートへのデータ配布を簡素化する。
  • 異機種クラスタ間で読取り専用の表領域を共有できるようにする(ノードは同じエンディアンネスを持っている必要がある)。
  • あるプラットフォームから他のプラットフォームへのデータベース移行を支援する(Data PumpまたはImport/Exportを使用)。

図1は、クロス・プラットフォームの表領域トランスポートでサポートされるプラットフォームを示したものです。 この他、V$TRANSPORTABLE_PLATFORMビューに対して問合せを実行し、プラットフォームがサポートされているかを確認したり、プラットフォームIDやエンディアン形式(バイト・オーダー)を判断したりできます。

ソース・プラットフォームとターゲット・プラットフォームのエンディアンネスが異なる場合は、ソース・プラットフォームまたはターゲット・プラットフォームのいずれかで追加の変換手順を実行し、トランスポートされる表領域をターゲットの形式に変換する必要があります。両プラットフォームのエンディアンネスが同じであれば変換は必要なく、同一プラットフォームの場合と同様にトランスポートできます。

ある表領域を別のプラットフォームへトランスポートするには、互換性が10.0.0以上に設定されているOracle Database 内で、少なくとも1回この表領域で読取り/書込みが行われていることが必要です。これは、読取り/書込みによって表領域内のデータ/ファイルにプラットフォームを認識させるためです。つまり、各ファイルに自身が定義されているプラットフォームを識別させるのです。

トランスポータブル表領域の仕組み


図2は、あるデータベースから別のデータベースへ表領域をトランスポートする一般的な手順を示したものです。 詳しい手順や例については、『Oracle Database 管理者ガイド』のデータベース間での表領域のトランスポートの項を参照してください。

クロス・プラットフォームのトランスポータブル表領域の仕組み


図3は、あるプラットフォームから他のプラットフォームへ表領域をトランスポートする手順を示したものです。 詳しい手順や例は、『Oracle Database 管理者ガイド 』のデータベース間での表領域のトランスポートの項を参照してください。

トランスポータブル表領域の考慮事項


原則として、ユーザー表領域内のオブジェクトまたはデータ型はすべてトランスポートできますが、次に示すいくつかの制約や制限があります。

  • ソース・データベースおよびターゲット・データベースでは、同じ文字セットおよび各国語の文字セットを使用する必要があります。
  • 同じ名前の表領域がすでに存在するターゲット・データベースに、表領域をトランスポートすることはできません。 ただし、トランスポートする前に、トランスポートする表領域名または宛先の表領域名を変更することは可能です。
  • 新しいデータ型 - Binary_FloatおよびBinary_Double。 これらのOracle Database 10gの新しいデータ・タイプは、Data Pumpでのみサポートされます。 既存のExportでは、これらのデータ型は処理できません。
  • Oracleにとっての不明瞭な型。 RAW、BLOB、SYS.ANYTYPE、SYS.ANYDATAなど。これらのデータの解釈はアプリケーション特有のものであるため、クロス・プラットフォームのトランスポート性に影響を与える可能性があります。同じエンディアンネスを持ったプラットフォーム間でトランスポートする際も、互換性がない場合があるので注意してください。これらの型、またはこれらの型を使用するオブジェクトは、直接または間接的に制約を受けています。たとえば、AQペイロードはRAW型を使用できますが、トランスポート可能であることが前提になっていない場合は確認する必要があります。
  • ユーザー定義の機能やオペレータなど。 Oracleは、こうした定義をSQL、PL/SQL、パッケージ、Cコールアウトの形式で表示できます。 SQLで定義すると常にトランスポートできます。 PL/SQL、パッケージ、およびCコールアウトは表領域の外部にあります。 Cコールアウトの場合は、表領域のトランスポートに加えて、これらを移行または移植する必要があります。
  • SYSTEM、UNDO、SYSAUX、および一時表はトランスポートできません。
  • ソース・データベースまたは宛先データベースでOracle Automatic Storage Management(Oracle ASM)を使用している場合、表領域のトランスポートおよび変換にはOracle Recovery Manager (RMAN)を使用する必要があります。

格納違反


参照されるオブジェクトがトランスポータブル・セットに格納されていない場合、格納違反が発生します。 通常、この違反は異なる領域内に存在する依存オブジェクトまたは相互依存オブジェクトによって引き起こされます。格納違反の原因となる可能性のあるオブジェクトの関係は、次のとおりです。

  • 表およびその索引
  • IOTおよびそのオーバーフロー・セグメント
  • 表のパーティションおよびサブパーティション
  • 結合索引
  • 有効範囲付REF
  • 参照整合性
  • マテリアライズド・ビュー

これらの違反は、次のいずれかの方法で解決できます。

  • トランスポータブル・セットに必要な表領域を含める (SYSTEM表領域は、トランスポータブル・セットに含めることはできない)。
  • トランスポータブル・セットに含まれていないオブジェクトを移動する。
  • トランスポータブル・セットから違反したオブジェクトを取り出す。
  • 違反したオブジェクトや関係を削除する。

ユーザー表領域外のオブジェクト


ユーザーまたはアプリケーションで、ユーザー表領域の外にあるトランスポート中のオブジェクトが必要な場合は、追加の処理が必要です。

SYSTEM表領域オブジェクト。トランスポータブル表領域機能では、SYSTEM表領域をトランスポートできません。 SYSTEM表領域内にトランスポートするユーザー・オブジェクトがある場合、(推奨される方法ではありませんが)エクスポート/インポートを使用して、それらのオブジェクトをユーザー表領域に移動するか、トランスポートしてください。

一方で、SYSTEM表領域には特定のデータベース・オブジェクトが格納されています。 たとえば、データベース・リンク、シノニム、ロール、権限、ディメンションです。この情報は、ユーザー表領域を正しくインポートするために必要となることがあります。ユーザーは、再作成スクリプトを手動で用意するか、SYSTEMスキーマをエクスポートする必要があります。

SYSが所有するオブジェクトは、ユーザー表領域に配置してはいけません。 これらのオブジェクトは、ユーザー表領域をトランスポートする前に、領域外へ配置する必要があります。

SYSが所有するオブジェクト(パッケージ、ビュー、Javaクラス、シーケンスなど)は、トランスポータブル表領域によってトランスポートされません。 ユーザーは、次のいずれかの処理が実行されていることを確認する必要があります。

  • ターゲット・データベースのインストールおよび作成により、SYSが所有するオブジェクトが正しく準備されている。
  • SYSが所有するこれらのオブジェクトがソース・データベースからエクスポートされている。

外部オブジェクト(パラメータ・ファイル、外部表、BFILEなど)は、表領域の外部にあります。 表領域のトランスポートに加えて、これらのオブジェクトを準備して移行する必要があります。