ヘッダーをスキップ
Oracle Databaseデータ・カートリッジ開発者ガイド
11gリリース1(11.1)
E05688-02
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

A ユーザー管理ドメイン索引

ドメイン索引のパーティション化のためのユーザー管理アプローチは、システム管理のパーティション化が導入されている場合にかぎり、Oracle Database 11gリリース1以前でのみ使用できる機能です。ユーザー管理アプローチには3つの重要な制限があります。

第8章「ドメイン索引の作成」で説明しているように、システム管理アプローチを使用することをお薦めします。

ユーザー管理アプローチは、将来のリリースで非推奨となる予定です。この付録では、ユーザー管理およびシステム管理の処理、およびAPIの違いについて説明しています。

ユーザー管理ドメイン索引とシステム管理ドメイン索引の比較

代替アプローチとして、システム管理のドメイン索引を使用します。これらの制限に対処し、次のようなメリットがあります。

ドメイン索引の切捨て

ドメイン索引を切り捨てるための明示的な文は存在しません。ただし、対応する表が切り捨てられるときには、索引タイプの切捨てメソッドがコールされます。次に例を示します。

TRUNCATE TABLE Employees;

この例は、ODCIIndexTruncate()メソッドをコールしてResumeTextIndexを切り捨てます。

索引タイプの作成

次の構文を使用して、ユーザー管理ドメイン索引に対する索引タイプを作成します。

CREATE INDEXTYPE TextIndexType
FOR Contains (VARCHAR2, VARCHAR2)
USING TextIndexMethods;

索引タイプに対するドメイン索引の使用

ローカルドメイン索引を使用できる索引タイプに関しては、メソッドは、索引タイプが作成されると宣言されます。

CREATE INDEXTYPE TextIndexType
  FOR Contains (VARCHAR2, VARCHAR2)
  USING TextIndexMethods
  WITH LOCAL RANGE PARTITION;

ドメイン索引のパーティション化

ユーザー管理アプローチでは、メソッドODCIIndexMergePartition()およびODCIIndexSplitPartition()を使用してローカル・ドメイン索引がサポートされます。

ユーザー管理ドメイン索引に対するAPI

次のメソッドは、ドメイン索引のユーザー管理実装のみで使用されます。

ODCIIndexTruncate()

これは索引定義メソッドです。索引タイプで索引付けされた列またはオブジェクト型の属性を含む表に対してユーザーがTRUNCATE文を発行すると、OracleはODCIIndexTruncate()メソッドをコールします。このメソッドでは、ドメイン索引を空にしておく必要があります。

構文

FUNCTION ODCIIndexTruncate(
   ia ODCIIndexInfo,
   env ODCIEnv)
RETURN NUMBER
パラメータ 説明
ia
索引付けされた列に関する情報を含みます。
env
ルーチンに渡される環境ハンドル

戻り値

正常終了した場合はODCIConst.Success、エラーの場合はODCIConst.Error、それ以外の場合はODCIConst.Warning

ローカル・ドメイン索引の切捨て中は、最初のN+1回のコールでODCIConst.ErrContinueも戻すことができます。

使用方法

  • このファンクションは、静的な型のメソッドとして実装する必要があります。

  • このファンクションの実行後、ドメイン索引は空になります(空の実表に対応します)。

  • ODCIIndexTruncate()ルーチンの実行中は、ドメイン索引にLOADINGマークが付けられます。ODCIIndexTruncate()ルーチンがODCIConst.Error(または例外)を戻す場合、ドメイン索引にはFAILEDマークが付けられます。FAILEDのドメイン索引に対して許可される操作は、DROP INDEXTRUNCATE TABLEまたはALTER INDEX REBUILDのみです。ODCIIndexTruncate()ODCIConst.Warningを戻す場合、操作は成功しますがユーザーに警告メッセージが戻されます。

  • ODCIIndexTruncate()により実行される各SQL文は、独立した操作として処理されます。ODCIIndexTruncate()による変更がアトミックであるという保証はありません。

  • このメソッドは、非パーティション索引の切捨て、ローカル・ドメイン索引の切捨ておよびALTER TABLE TRUNCATE PARTITION実行中の単一索引パーティションの切捨てのためにコールされます。

    非パーティション索引を切り捨てる場合、IndexPartitionTablePartitionおよびcallPropertyNULLに設定された状態でODCIIndexTruncate()が1度起動されます。

    ローカル・ドメイン索引を切り捨てる場合、このルーチンはN+2回起動されます。Nはパーティション数です。

    ALTER TABLE TRUNCATE PARTITIONの実行中に単一索引パーティションを切り捨てる場合、このルーチンはIndexPartitionおよびTablePartitionが入力され、callPropertyNULLに設定された状態で1度起動されます。

ODCIIndexMergePartition()

ドメイン索引が定義されているレンジ・パーティション表に対してALTER TABLE MERGE PARTITIONが発行されるときに起動されます。

構文

FUNCTION ODCIIndexMergePartition(
   ia ODCIIndexInfo,
   part_name1 ODCIPartInfo,
   part_name2 ODCIPartInfo,
   parms VARCHAR2,
   env ODCIEnv)
RETURN NUMBER
パラメータ 説明
ia
一方のマージ対象パーティションの索引および表パーティション名を含みます。
part_name1
第2のマージ対象パーティションの索引および表パーティション名を含みます。
part_name2
新たにマージされた後のパーティションの索引および表パーティション名を保持します。
parms
マージ後のパーティションのパラメータ文字列(実際には、索引に関連付けられているデフォルトのパラメータ文字列)を含みます。
env
ルーチンに渡される環境ハンドル

戻り値

正常終了した場合はODCIConst.Success、エラーの場合はODCIConst.Error、それ以外の場合はODCIConst.Warning

使用方法

  • ファンクションは、静的な型のメソッドとして実装する必要があります。

  • マージ結果のパーティションを表す新規の表を作成し、マージしたパーティションのデータを移入する必要があります。次に、マージした索引パーティションに対応する表を削除します。

  • 新規に作成されたパーティションでは、索引レベルに関連付けられているデフォルトのパラメータ文字列を選択する必要があります。作成された索引パーティションは、UNUSABLEのマークが付けられます。ALTER INDEX REBUILD PARTITIONがコールされるまで、新規のパーティションにデータを移入できません。

  • 古い表および古い索引パーティションのディクショナリ・エントリは、ODCIIndexMergePartition()ヘのコール前に削除されるため、このルーチンのカートリッジ・コードは、このデータがビューに存在するかどうかに依存しないようにする必要があります。

ODCIIndexSplitPartition()

ドメイン索引が定義されているパーティション表に対してALTER TABLE SPLIT PARTITIONが起動されるときに起動されます。

構文

FUNCTION ODCIIndexSplitPartition(
   ia ODCIIndexInfo,
   part_name1 ODCIPartInfo,
   part_name2 ODCIPartInfo,
   parms VARCHAR2,
   env ODCIEnv)
RETURN NUMBER
パラメータ 説明
ia
分割するパーティションに関する情報を含みます。
part_name1
一方の新規パーティションの索引および表パーティション名を保持します。
part_name2
他方の新規パーティションの索引および表パーティション名を保持します。
parms
新規パーティションのパラメータ文字列(分割される索引パーティションに関連した文字列)を含みます。
env
ルーチンに渡される環境ハンドル

戻り値

正常終了した場合はODCIConst.Success、エラーの場合はODCIConst.Error、それ以外の場合はODCIConst.Warning

使用方法

  • ファンクションは、静的な型のメソッドとして実装する必要があります。

  • 分割されたパーティションに対応するメタデータを削除して、新規に作成された2つのパーティションにメタデータを作成する必要があります。

  • 新規の表では、分割されるパーティションに関連付けられているデフォルトのパラメータ文字列を選択する必要があります。

  • 索引にはUNUSABLEマークが付けられるため、これらのパーティションに対応する索引データを計算する必要はありません。索引は、ALTER INDEX REBUILD PARTITIONコールが索引を再利用可能にした後で作成できます。

  • 古い表および古い索引パーティションのディクショナリ・エントリは、ODCIIndexSplitPartition()ヘのコール前に削除されるため、このルーチンのカートリッジ・コードは、このデータがビューに存在するかどうかに依存しないようにする必要があります。