日本語PDF

15 DBMS_ADVANCED_REWRITE

DBMS_ADVANCED_REWRITEには、上級のクエリー・リライト・ユーザー用のインタフェースが格納されます。このパッケージを使用すると、クエリー・リライトに機能上等しい宣言を作成、削除および保守できます。

参照:

クエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

この章のトピックは、次のとおりです:

15.1 DBMS_ADVANCED_REWRITEのセキュリティ・モデル

DBMS_ADVANCED_REWRITEのセキュリティ・モデルのプロシージャにアクセスするためのデフォルト権限はどのユーザーにも付与されていません。これらのプロシージャにアクセスするには、SYSDBAとして接続し、目的のデータベース管理者に実行アクセス許可を明示的に付与する必要があります。

選択したデータベース管理者またはロールにEXECUTE権限を付与することによって、このパッケージのセキュリティを制御できます。たとえば、SYSDBAとして実行される次の文で、ユーザーerにこのパッケージを使用するアクセス許可を付与することができます。

GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO er;

このパッケージの先頭部分に、使用するアラート名を制限する個別のカバー・パッケージを記述することもできます。DBMS_ADVANCED_REWRITEパッケージに直接EXECUTE権限を付与するかわりに、カバー・パッケージにその権限を付与することができます。

また、標準のマテリアライズド・ビューに必要な権限と同様に、等価宣言の作成権限をユーザーに付与する必要があります。たとえば、次の文をSYSDBAとして実行すると、この権限をユーザーerに付与できます。

GRANT CREATE MATERIALIZED VIEW TO er;

15.2 DBMS_ADVANCED_REWRITEサブプログラムの要約

この表は、DBMS_ADVANCED_REWRITEサブプログラムを示し、簡単に説明しています。

表15-1 DBMS_ADVANCED_REWRITEパッケージのサブプログラム

サブプログラム 説明

ALTER_REWRITE_EQUIVALENCEプロシージャ

リライト等価宣言のモードを指定したモードに変更します。

BUILD_SAFE_REWRITE_EQUIVALENCEプロシージャ

サブマテリアライズド・ビューを使用してトップレベルのマテリアライズド・ビューのリライトを有効にします。このプロシージャは、直接使用しないことをお薦めします。

DECLARE_REWRITE_EQUIVALENCEプロシージャ

等価宣言が有効であるかぎり、source_stmtdestination_stmtと機能上等しいこと、およびパフォーマンスの点から、destination_stmtが好ましいことを示す宣言を作成します。

DROP_REWRITE_EQUIVALENCEプロシージャ

指定したリライト等価宣言を削除します。

VALIDATE_REWRITE_EQUIVALENCEプロシージャ

validateパラメータで記述した検証方法と同じ方法を使用して、指定したリライト等価宣言を検証します。

15.2.1 ALTER_REWRITE_EQUIVALENCEプロシージャ

次の表に、このパッケージのすべてのサブプログラムをアルファベット順に示します。

構文

DBMS_ADVANCED_REWRITE.ALTER_REWRITE_EQUIVALENCE (
   name            VARCHAR2,
   rewrite_mode    VARCHAR2);

パラメータ

表15-2 ALTER_REWRITE_EQUIVALENCEプロシージャのパラメータ

パラメータ 説明

name

変更する等価宣言の名前。名前はowner.nameの形式で指定でき、ownerはスキーマ名のルールに従い、nameは表名のルールに従います。または、表名のルールに従った単一の名前を指定できます。この場合、リライト等価値は、現在のスキーマで変更します。実行者が自分のスキーマ外で等価宣言を変更するには、適切なマテリアライズド・ビューの変更権限を持つ必要があります。

rewrite_mode

以下のモードがサポートされます。強度順に並べています。

disabled: クエリー・リライトは等価宣言を使用しません。このモードは、リライト等価宣言の使用を一時的に無効にする場合に使用します。

text_match: クエリー・リライトはテキスト一致モードでのみ等価宣言を使用します。このモードは簡単な変換に役立ちます。

general: クエリー・リライトは受信リクエスト・クエリーに対して、すべての変換モードで等価宣言を使用します。ただし、クエリー・リライトは指定したdestination_queryのリライトは試みません。

recursive: クエリー・リライトは受信リクエスト・クエリーに対して、すべての変換モードで等価宣言を使用します。さらに、等価宣言を使用する場合に常にパフォーマンス向上のため、指定したdestination_queryのリライトを試みます。

パフォーマンス上の問題を起こさない最低限のモードを使用することをお薦めします。

15.2.2 BUILD_SAFE_REWRITE_EQUIVALENCEプロシージャ

このプロシージャは、サブマテリアライズド・ビューを使用して、トップレベルのマテリアライズド・ビューのリライトおよびリフレッシュを有効にします。このプロシージャは、DBMS_ADVISOR.TUNE_MVIEWプロシージャによって生成されたスクリプトでの排他使用のために提供されます。

DBMS_ADVISOR.TUNE_MVIEWによってマテリアライズド・ビューを1つのトップレベルのマテリアライズド・ビューと1つ以上のサブマテリアライズド・ビューに分解する際に、クエリー・リライトおよび高速リフレッシュを有効にする場合に必要です。

BUILD_SAFE_REWRITE_EQUIVALENCEプロシージャは、直接使用しないことをお薦めします。必要に応じて、DBMS_ADVISOR.TUNE_MVIEWプロシージャまたはDBMS_ADVANCED_REWRITE.CREATE_REWRITE_EQUIVALENCEプロシージャのいずれかを使用してください。

15.2.3 DECLARE_REWRITE_EQUIVALENCEプロシージャ

このプロシージャは、等価宣言が有効であるかぎり、source_stmtdestination_stmtと機能上等しいこと、およびパフォーマンスの点から、destination_stmtが好ましいことを示す宣言を作成します。

宣言の範囲はシステム全体です。クエリー・リライト・エンジンは、それらの宣言を使用して、QUERY_REWRITE_INTEGRITY = trustedモードおよびstale_toleratedモードで、リライト変換を実行します。

ソース文と宛先文の基礎となる等価宣言はクエリー・リライト・エンジンで施行できないため、問合せはtrustedおよびstale_toleratedのIntegrityモードでのみリライトされます。

構文

DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
   name                 VARCHAR2,
   source_stmt          VARCHAR2,
   destination_stmt     VARCHAR2,
   validate             BOOLEAN    := TRUE,
   rewrite_mode         VARCHAR2   := 'TEXT_MATCH');

DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE (
   name                 VARCHAR2,
   source_stmt          CLOB,
   destination_stmt     CLOB,
   validate             BOOLEAN   := TRUE,
   rewrite_mode         VARCHAR2  := 'TEXT_MATCH');

パラメータ

表15-3 DECLARE_REWRITE_EQUIVALENCEプロシージャのパラメータ

パラメータ 説明

name

等価宣言の名前。名前はowner.nameの形式で指定でき、ownerはスキーマ名のルールに従い、nameは表名のルールに従います。

または、表名のルールに従った単一の名前を指定できます。この場合、リライト等価宣言は、現在のスキーマに作成されます。等価宣言を変更するには、実行者が適切なCREATE MATERIALIZED VIEW権限を持つ必要があります。

source_stmt

VARCHAR2またはCLOB形式でのサブSELECT式。これは最適化の目的となる問合せ文です。

destination_stmt

VARCHAR2またはCLOB形式でのサブSELECT式。

validate

指定したsource_stmtが指定したdestination_stmtと機能上等しいことを検証するかどうかを示すブール値。validateTRUEを指定すると、DECLARE_REWRITE_EQUIVALENCEは2つのサブSELECTを評価し、それらの結果を比較します。結果が同じでない場合、DECLARE_REWRITE_EQUIVALENCEはリライト等価宣言を作成せず、エラー状況を戻します。FALSEの場合、DECLARE_REWRITE_EQUIVALENCEは等価宣言を検証しません。

rewrite_mode

以下のモードがサポートされます。強度順に並べています。

  • disabled: クエリー・リライトは等価宣言を使用しません。このモードは、リライト等価宣言の使用を一時的に無効にする場合に使用します。

  • text_match: クエリー・リライトはテキスト一致モードでのみ等価宣言を使用します。このモードは簡単な変換に役立ちます。

  • general: クエリー・リライトは受信リクエスト・クエリーに対して、すべての変換モードで等価宣言を使用します。ただし、クエリー・リライトは指定したdestination_queryのリライトは試みません。

  • recursive: クエリー・リライトは受信リクエスト・クエリーに対して、すべての変換モードで等価宣言を使用します。さらに、等価宣言を使用する場合に常にパフォーマンス向上のため、指定したdestination_queryのリライトを試みます。

パフォーマンス上の問題を起こさない最低限のモードを使用することをお薦めします。

例外

表15-4 DECLARE_REWRITE_EQUIVALENCEプロシージャの例外

例外 説明

ORA-30388

リライト同値化の名前が指定されていません。

ORA-30391

指定したリライト同値化が存在しません。

ORA-30392

リライト同値化のチェックサム分析に失敗しました。

ORA-30393

文内の問合せブロックはリライトされていません。

ORA-30396

リライト同値化プロシージャで、COMPATIBLEパラメータを10.1以上に設定する必要があります。

使用上のノート

等価宣言を使用したクエリー・リライトは、同時にマテリアライズド・ビューを使用したクエリー・リライトと一緒に行われます。どちらのリライトにも同じクエリー・リライト・エンジンが使用されます。クエリー・リライト・エンジンは、等価宣言とマテリアライズド・ビューを使用したクエリーのリライトに同じリライト・ルールを使用します。リライト等価宣言は上級ユーザーによって作成された特定のリライトを表すため、マテリアライズド・ビューによるリライトまたはリライト等価宣言によるリライトが実行可能な場合に、クエリー・リライト・エンジンは、マテリアライズド・ビューより、リライト等価宣言を優先します。このため、コストベースのオプティマイザ(特に、コストベースのリライト)は、リライトしないクエリー・プランのコストの方が好ましいと考えられる場合でも、リライトしないクエリー・プランを選択せず、リライトするクエリー・プランで、リライト等価宣言を使用します。クエリー・リライトは受信リクエスト・クエリーのプロパティを等価宣言のsource_stmtまたはマテリアライズド・ビューの定義文とそれぞれ照らし合わせて、等価宣言のdestination_stmtまたはマテリアライズド・ビューのコンテナ表それぞれに関する同等の関係式を取得します。

15.2.4 DROP_REWRITE_EQUIVALENCEプロシージャ

このプロシージャは指定したリライト等価宣言を削除します。

構文

DBMS_ADVANCED_REWRITE.DROP_REWRITE_EQUIVALENCE (
   name        VARCHAR2);

パラメータ

表15-5 DROP_REWRITE_EQUIVALENCEプロシージャのパラメータ

パラメータ 説明

name

削除する等価宣言の名前。名前はowner.nameの形式で指定でき、ownerはスキーマ名のルールに従い、nameは表名のルールに従います。または、表名のルールに従った単一の名前を指定できます。この場合、リライト等価値は、現在のスキーマで削除されます。実行者が自分のスキーマ外で等価宣言を削除するには、適切なマテリアライズド・ビューの削除権限を持つ必要があります。

15.2.5 VALIDATE_REWRITE_EQUIVALENCEプロシージャ

このプロシージャは指定したリライト等価宣言を検証します。

このプロシージャは、「VALIDATE_REWRITE_EQUIVALENCEプロシージャ」VALIDATEパラメータで説明した検証方法と同じ方法を使用します。

構文

DBMS_ADVANCED_REWRITE.VALIDATE_REWRITE_EQUIVALENCE (
   name         VARCHAR2);

パラメータ

表15-6 VALIDATE_REWRITE_EQUIVALENCEプロシージャのパラメータ

パラメータ 説明

name

検証する等価宣言の名前。名前はowner.nameの形式で指定でき、ownerはスキーマ名のルールに従い、nameは表名のルールに従います。または、表名のルールに従った単一の名前を指定できます。この場合、リライト等価値は、現在のスキーマで検証されます。実行者は、指定した等価宣言のsource_stmtdestination_stmtの両方を実行する十分な権限を持つ必要があります。