ヘッダーをスキップ
Oracle® Databaseデータ・ウェアハウス・ガイド
11gリリース2 (11.2)
B56309-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

14 データ・ウェアハウスにおける転送

この章では、データ・ウェアハウスへのデータの転送について説明します。

データ・ウェアハウスにおける転送の概要

転送とは、データをあるシステムから別のシステムへ移動させる操作です。データ・ウェアハウス環境では、最も一般的な転送要件は、次のデータ移動です。

転送は、ETLプロセスの中でも単純な部分であることが多く、一般的にプロセスの他の部分と統合できます。たとえば、第13章「データ・ウェアハウスにおける抽出」に示すように、分散問合せテクノロジにはデータ抽出と転送の両方のメカニズムが備わっています。

データ・ウェアハウスにおける転送メカニズムの概要

ウェアハウスにおけるデータ転送には、次の3つの基本的な方法があります。

フラット・ファイルを使用した転送

データ転送の最も一般的な方法は、FTPや他のリモート・ファイル・システム・アクセス・プロトコルなどのメカニズムを使用して、フラット・ファイルを転送する方法です。データは、第13章「データ・ウェアハウスにおける抽出」で説明したテクニックで、ソース・システムからフラット・ファイルにアンロードまたはエクスポートされ、FTPまたは同等のメカニズムによってターゲット・プラットフォームに転送されます。

ソース・システムとデータ・ウェアハウスでは、異なるオペレーティング・システムとデータベース・システムを使用していることが多いため、データ変換を最小限に抑えて異機種システム間でデータを交換するには、フラット・ファイルを使用するのが最も単純な方法です。ただし、同機種システム間でのデータ転送でも、フラット・ファイルは最も効率的で扱いやすいデータ転送メカニズムです。

分散処理による転送

分散問合せは、ゲートウェイを使用するかどうかを問わずデータ抽出の効果的なメカニズムです。これらのメカニズムでは、ターゲット・システムに直接データを転送するため、抽出と変換を1ステップで処理します。時間とシステム・リソースに許される影響度によっては、これらのメカニズムは抽出と変換の両方に適しています。

フラット・ファイルの転送とは異なり、転送の成否は分散問合せまたはトランザクションの結果とともに即時に認識されます。詳細は、第13章「データ・ウェアハウスにおける抽出」を参照してください。

トランスポータブル表領域を使用した転送

Oracleトランスポータブル表領域により、大量のデータを2つのOracleデータベース間で最も高速に移動させることができます。トランスポータブル表領域の導入以前は、最もスケーラブルなデータ転送メカニズムは、生データを含むフラット・ファイルの移動によるものでした。このようなメカニズムでは、データをまずソース・データベースからアンロードまたはエクスポートし、転送後に、ターゲット・データベースにロードまたはインポートする必要がありました。トランスポータブル表領域ではこのアンロードと再ロードのステップは不要です。

トランスポータブル表領域を使用することによって、Oracleデータファイル(表データ、索引およびその他のOracleデータベース・オブジェクトのほぼすべてを含む)を、あるデータベースから他のデータベースへ直接転送できます。さらに、トランスポータブル表領域は、インポートおよびエクスポートと同様に、データのみでなくメタデータを転送するメカニズムも提供します。

トランスポータブル表領域には、いくつかの制限があり、ソース・システムおよびターゲット・システムでは、Oracle8i(またはそれ以上)が稼働していること、互換性のあるキャラクタ・セットを使用すること、Oracle Database 10gより前では同一のオペレーティング・システムで稼働することが必要です。オペレーティング・システム間で表領域を転送する方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

データ・ウェアハウスにおけるトランスポータブル表領域の最も一般的な用途は、ステージング・データベースからデータ・ウェアハウスへのデータ移動、またはデータ・ウェアハウスからデータ・マートへのデータ移動です。

トランスポータブル表領域の例

売上データを含む1つのデータ・ウェアハウス、および毎月リフレッシュされる複数のデータ・マートがあるとします。また、1か月分の売上データをデータ・ウェアハウスからデータ・マートに移動するとします。

手順1   転送するデータを専用の表領域に配置する

現在の月のデータを転送するには、まず、別々に用意した表領域にそのデータを配置する必要があります。この例では、ts_temp_sales表領域に今月のデータをコピーするとします。CREATE TABLE ... AS SELECT文を使用すると、当月のデータを効率的にこの表領域にコピーできます。

CREATE TABLE temp_jan_sales NOLOGGING TABLESPACE ts_temp_sales
AS SELECT * FROM sales 
WHERE time_id BETWEEN '31-DEC-1999' AND '01-FEB-2000';

この操作の完了後に、表領域ts_temp_salesを読取り専用に設定します。

ALTER TABLESPACE ts_temp_sales READ ONLY;

表領域は、その表領域を変更するアクティブなトランザクションがなくなるまで転送できません。表領域を読取り専用に設定することによって、転送が可能になります。

ts_temp_sales表領域は、トランスポータブル表領域機能が使用する一時的なデータ格納領域として、特別に作成したものの場合もあります。「データファイルおよびエクスポート・ファイルをターゲット・システムにコピーする」の後、この表領域を読取り/書込みに設定できます。必要に応じて、temp_jan_sales表を削除したり、その表領域を他のデータ転送やそれ以外の目的で再使用できます。

トランスポータブル表領域操作では、任意の表領域にあるすべてのオブジェクトが転送されます。この例では1つの表のみが転送されていますが、ts_temp_sales表領域には複数の表が含まれることもあります。たとえば、データ・マートのリフレッシュは、最新の月の売上トランザクションによってのみでなく、CUSTOMER表の新規コピーによって行われることもあります。これらの2つの表は、どちらも同じ表領域に転送できます。また、この表領域には、索引など他のデータベース・オブジェクトも含めることができ、それらも同様に転送されます。

また、トランスポータブル表領域操作では、複数の表領域を同時に転送できます。これによって、非常に大量のデータも簡単にデータベース間で移動できます。ただし、トランスポータブル表領域機能で転送できるのは、他の表領域に依存性を持たないデータベース・オブジェクトの完全な集合を含む表領域の集合のみであることに注意してください。たとえば、索引は、元となる表がなければ転送できません。また、パーティションも表の残りの部分がないと転送できません。DBMS_TTSパッケージを使用すると、表領域がトランスポータブルであるかどうかをチェックできます。


参照:

DBMS_TTSパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

手順1では、1月の売上データを別々の表領域にコピーしました。ただし、別々の表領域にデータを移動しなくても、トランスポータブル表領域を利用できる場合もあります。SALES表がデータ・ウェアハウス内で月別にパーティション化されており、各パーティションが専用の表領域にある場合、1月のデータを含む表領域を直接転送できることがあります。たとえば、表領域ts_sales_jan2000に、1月のパーティションsales_jan2000が配置されているとします。この場合、1月の売上データを一時的にts_temp_salesにコピーするのではなく、ts_sales_jan2000表領域を転送できることがあります。

ただし、表領域ts_sales_jan2000を転送するには、特別に作成された表領域の場合と同じ条件を満たす必要があります。第1に、この表領域をREAD ONLYに設定する必要があります。第2に、パーティション表のパーティション1つのみを転送することはできない(パーティション表の残りの部分も転送する必要がある)ため、1月のデータのみを転送するには、(ALTER TABLE文を使用して)1月のパーティションを別の表に変換する必要があります。EXCHANGE操作は非常に高速です。ただし、1月のデータは基礎となるsales表の一部ではなくなるため、メタデータのエクスポート後に変換してsales表に戻さないかぎり、ユーザーからはアクセスできなくなります。1月のデータは、手順3の完了後に変換してsales表に戻すことができます。

手順2   メタデータをエクスポートする

転送した表領域に含まれるオブジェクトを記述するメタデータをエクスポートするには、エクスポート・ユーティリティを使用します。これまでの例に合せてエクスポート・コマンドを記述すると、次のようになります。

EXP TRANSPORT_TABLESPACE=y TABLESPACES=ts_temp_sales FILE=jan_sales.dmp

この操作では、エクスポート・ファイルjan_sales.dmpが生成されます。このエクスポート・ファイルは、含まれているのがメタデータのみのためサイズは小さくなっています。この場合、エクスポート・ファイルには、列名、列のデータ型などの表temp_jan_salesを説明する情報、およびターゲットOracleデータベースがts_temp_sales内のオブジェクトへのアクセスに必要とするその他の情報すべてが含まれます。

手順3   データファイルおよびエクスポート・ファイルをターゲット・システムにコピーする

ts_temp_salesを構成するデータファイル、およびエクスポート・ファイルjan_sales.dmpを、いずれかのフラット・ファイル転送メカニズムを使用してデータ・マート・プラットフォームにコピーします。データファイルのコピーが終わると、必要に応じて表領域ts_temp_salesREAD WRITEモードに設定できます。

手順4   メタデータをインポートする

ファイルをデータ・マートにコピーした後に、メタデータをデータ・マートにインポートします。

IMP TRANSPORT_TABLESPACE=y DATAFILES='/db/tempjan.f' 
    TABLESPACES=ts_temp_sales FILE=jan_sales.dmp

この時点で、表領域ts_temp_salesおよび表temp_sales_janが、データ・マート内でアクセス可能になります。この新しいデータをデータ・マートの表に取込むことができます。

temp_sales_jan表からデータ・マートのsales表にデータを挿入するには、2通りの方法があります。

INSERT /*+ APPEND */ INTO sales SELECT * FROM temp_sales_jan;

この操作の後に、temp_sales_jan表(およびts_temp_sales表領域全体)を削除できます。

または、データ・マートのsales表が月別にパーティション化されている場合に、新しく転送した表領域およびtemp_sales_jan表をそのデータ・マートの永続部分にすることが可能です。temp_sales_jan表は、データ・マートのsales表のパーティションになることができます。

ALTER TABLE sales ADD PARTITION sales_00jan VALUES
  LESS THAN (TO_DATE('01-feb-2000','dd-mon-yyyy'));
ALTER TABLE sales EXCHANGE PARTITION sales_00jan 
  WITH TABLE temp_sales_jan INCLUDING INDEXES WITH VALIDATION;

トランスポータブル表領域の他の用途

前述の例では、データ・ウェアハウスにデータを転送する代表的な例を示しました。トランスポータブル表領域は、この他にも様々な目的に使用できます。データ・ウェアハウス環境では、トランスポータブル表領域は、Oracleデータベース間で大量のデータを移動する(インポート/エクスポート、またはSQL*Loaderのような)ユーティリティとみなすことができます。CREATE TABLE ... AS SELECT文やINSERT ... AS SELECT文などのパラレル・データ移動操作とともに使用すると、トランスポータブル表領域は、様々な目的でのデータの高速転送用の重要なメカニズムを提供します。