ヘッダーをスキップ
Oracle Databaseルール・マネージャおよび式フィルタ開発者ガイド
11gリリース1(11.1)
E05697-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

15 式フィルタとユーティリティの併用

この章では、1つ以上のExpression列が存在する場合にSQL*Loaderおよびデータ・ポンプ・エクスポート・ユーティリティとデータ・ポンプ・インポート・ユーティリティを使用する方法について説明します。

15.1 式データのバルク・ロード

バルク・ロードにより、大量のASCIIデータをOracleデータベースにインポートできます。データのバルク・ロードにはSQL*Loaderユーティリティを使用します。

SQL*Loader操作では、式データはデータベース表のVARCHAR2列にロードされる文字列として扱われます。データファイルにはVARCHAR2データに許可される任意の書式で式データを保持でき、制御ファイルでは式を格納する列をVARCHAR2データ型の列として参照できます。

次の例に、Consumer表に数行をロードするためのサンプル制御ファイルを示します。

LOAD DATA
INFILE *
INTO TABLE Consumer
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(CId, Zipcode, Phone, Interest)
BEGINDATA
1,32611,"917 768 4633","Model='Taurus' and Price < 15000 and Mileage < 25000"
2,03060,"603 983 3464","Model='Mustang' and Year > 1999 and Price < 20000"
3,03060,"603 484 7013","HorsePower(Model, Year) > 200 and Price < 20000"

Expression列にロードされたデータは、その列に関連付けられた属性セットを使用して自動的に検証されます。この検証は、式を格納する列に定義されているBEFORE ROWトリガーにより実行されます。したがって、表に1つ以上のExpression列がある場合はダイレクト・ロードを使用できません。

式を格納する列に式フィルタ索引が定義されている場合は、SQL*Loader操作中に自動的に維持されます。バルク・ロードを高速化するために、次の手順で式の検証を迂回できます。

  1. 表のExpression列に定義されている式フィルタ索引を削除します。

    DROP INDEX InterestIndex;
    
    
  2. UNASSIGN_ATTRIBUTE_SETプロシージャを使用して属性セットの割当てを解除し、Expression列を元のVARCHAR2列に変換します。

    BEGIN
      DBMS_EXPFIL.UNASSIGN_ATTRIBUTE_SET (expr_tab => 'Consumer',
                                          expr_col => 'Interest');
    END;
    /
    
    
  3. バルク・ロード操作を実行します。Expression列は前述の手順でVARCHAR2列に変換されているため、この手順でダイレクト・ロードを実行できます。

  4. ASSIGN_ATTRIBUTE_SETプロシージャのforce引数に値TRUEを割り当てて、式データを含むVARCHAR2列をExpression列に変換します。

    BEGIN
      DBMS_EXPFIL.ASSIGN_ATTRIBUTE_SET (
                                        attr_set => 'Car4Sale',
                                        expr_tab => 'Consumer',
                                        expr_col => 'Interest',
                                        force    => 'TRUE');
    END;
    /
    
    
  5. 実行時検証エラーを回避するために、DBMS_EXPFIL.VALIDATE_EXPRESSIONSプロシージャを使用して表内の式を検証できます。

    BEGIN
      DBMS_EXPFIL.VALIDATE_EXPRESSIONS (expr_tab => 'Consumer',
                                         expr_col => 'Interest');
    END;
    /
    
    
  6. Expression列の索引を再作成します。

15.2 表、ユーザーおよびデータベースのエクスポートとインポート

1つ以上のExpression列を含む表をエクスポートし、同じデータベースまたは異なるOracleデータベースにインポートできます。Expression列を含む表をOracleデータベースにインポートする場合は、式フィルタがインストールされていることを確認してください。

15.2.1 Expression列を含む表のエクスポートとインポート

次のガイドラインおよびExpression列を含む表のエクスポートとインポートに関連した既知の動作は、この操作に役立ちます。

  • 1つ以上のExpression列を含む表をエクスポートすると、対応する属性セット定義がオブジェクト型定義とともにエクスポート・ダンプ・ファイルに置かれます。ダンプ・ファイルに置かれた属性セット定義には、デフォルトの索引パラメータと、承認済ユーザー定義関数のリストが含まれています。ただし、ユーザー定義関数の定義は、エクスポート・ダンプ・ファイルに置かれません。

  • 1つ以上のExpression列を含む表をエクスポート・ダンプ・ファイルからインポートする間に、それと一致する属性セットがインポート先スキーマに存在すると、属性セットの作成に失敗します。属性セットがオブジェクト型の1つ以上の(埋込み)属性で定義されている場合は、その属性セットをインポートするデータベースにも、これらの型が存在する必要があります。

  • デフォルトの索引パラメータとユーザー定義関数のリストのインポート中は、欠落している依存オブジェクトが検出されても、インポート・ドライバはインポート処理を続行します。たとえば、Consumer表をインポートするスキーマにHorsePower関数が存在しない場合も、表と属性セットのインポートはエラーなしで進行します。ただし、式フィルタ・ディクショナリ内の対応するエントリでは、オブジェクト型フィールドまたは出力データ型フィールドにNULL値が表示されます。これは、インポート処理が完了しなかったことを示します。

  • Expression列に定義されている式フィルタ索引をエクスポートすると、すべてのメタデータがエクスポート・ダンプ・ファイルに置かれます。このメタデータには、索引用に構成済のストアド属性と索引付き属性すべてのリストが含まれています。このリストはインポート時に使用されます。デフォルトの索引パラメータからは属性は導出されません。索引をインポートするスキーマ内で有効でないオブジェクト参照(関数)が1つ以上のストアド属性で使用されている場合は、エラーになり索引を作成できません。ただし、索引のメタデータは式フィルタ・ディクショナリに保持されます。

  • 依存スキーマ・オブジェクト(関数リスト内、デフォルトの索引パラメータ・リスト内および完全索引パラメータ・リスト内)への参照の破損が原因で表が不完全にインポートされると、以降の式の評価時や式の変更時(DMLを使用)に実行時エラーが発生する可能性があります。この種の表のインポートは、破損した参照をすべて解決すればSQL*Plusセッションから完了できます。Expression Validationユーティリティ(DBMS_EXPFIL.VALIDATE_EXPRESSIONSプロシージャ)を実行すると、式のメタデータと式自体のエラーを識別できます。このユーティリティで識別された欠落オブジェクトを作成し、式セット内のエラーがすべて解決されるまでプロセスを繰り返すことができます。すべてのエラーを解決した後に、SQLのALTER INDEX ... REBUILD文を使用して式フィルタ索引をリカバリできます。

15.2.2 属性セットの所有者ユーザーのエクスポート

スキーマに定義されている表と索引をエクスポートするのみでなく、ユーザーをエクスポートすると、どのExpression列にも関連付けられていない属性セットの定義がエクスポート・ダンプ・ファイルに置かれます。表のエクスポートに適用される制限は、すべてユーザーのエクスポートにも適用されます。

15.2.3 属性セットを含むデータベースのエクスポート

データベースのエクスポート時には、属性セット定義が他のすべてのオブジェクトとともにエクスポート・ファイルに置かれます。EXFSYSスキーマの内容は、データベースのエクスポートから除外されます。