141 DBMS_REFRESH

DBMS_REFRESHパッケージによって、トランザクションの一貫性を維持できる時点にまとめてリフレッシュできるマテリアライズド・ビューのグループを作成できます。これらのグループをリフレッシュ・グループと呼びます。

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

141.1 DBMS_REFRESHの概要

マテリアライズド・ビュー間のトランザクションの一貫性を保つことが重要なときは、マテリアライズド・ビューをリフレッシュ・グループに編成できます。

リフレッシュ・グループをリフレッシュすることで、リフレッシュ・グループ内のすべてのマテリアライズド・ビューのデータが、トランザクションの一貫性を保つ特定の時点のデータと確実に一致します。リフレッシュ・グループ内のマテリアライズド・ビューを個別にリフレッシュすることも可能ですが、リフレッシュ・グループ内のその他のマテリアライズド・ビューはリフレッシュされないため、リフレッシュ・グループを編成する意味がなくなります

141.2 DBMS_REFRESHのセキュリティ・モデル

ユーザーがDBMS_REFRESHパッケージのプロシージャを実行するには、EXECUTE権限が必要です。

141.3 DBMS_REFRESHサブプログラムの要約

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

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

サブプログラム 説明

ADDプロシージャ

マテリアライズド・ビューをリフレッシュ・グループに追加します

CHANGEプロシージャ

リフレッシュ・グループのリフレッシュ間隔を変更します

DESTROYプロシージャ

リフレッシュ・グループからすべてのマテリアライズド・ビューを削除し、リフレッシュ・グループを削除します

MAKEプロシージャ

リフレッシュ・グループ・メンバー、およびこのグループ・メンバーをリフレッシュする間隔を指定します

REFRESHプロシージャ

リフレッシュ・グループを手動でリフレッシュします

SUBTRACTプロシージャ

マテリアライズド・ビューをリフレッシュ・グループから削除します

141.3.1 ADDプロシージャ

このプロシージャは、マテリアライズド・ビューをリフレッシュ・グループに追加します。

構文

DBMS_REFRESH.ADD (
   name     IN VARCHAR2,
   { list   IN VARCHAR2, 
   | tab    IN DBMS_UTILITY.UNCL_ARRAY, }
   lax      IN BOOLEAN := FALSE);

ノート:

このプロシージャはオーバーロードされています。listパラメータとtabパラメータは、同時には指定できません。

パラメータ

表141-2 ADDプロシージャのパラメータ

パラメータ 説明

name

[schema_name.]refresh_group_nameと指定された、メンバーを追加するリフレッシュ・グループの名前です。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

list

リフレッシュ・グループに追加するマテリアライズド・ビューの、カンマ区切りのリストです。シノニムはサポートされていません。

各マテリアライズド・ビューは、[schema_name.]materialized_view_nameと指定されています。スキーマを指定しない場合は、リフレッシュ・グループの所有者がデフォルトで使用されます。

tab

カンマ区切りのリストのかわりに、DBMS_UTILITY.UNCL_ARRAYタイプのPL/SQL連想配列を使用でき、この表の各要素は、マテリアライズド・ビューの名前になります。最初のマテリアライズド・ビューは1の位置に置かれます。最後の位置はNULLになります。

各マテリアライズド・ビューは、[schema_name.]materialized_view_nameと指定されています。スキーマを指定しない場合は、リフレッシュ・グループの所有者がデフォルトで使用されます。

lax

マテリアライズド・ビューは、一度に1つのリフレッシュ・グループのみに所属できます。マテリアライズド・ビューを他のグループに移動する場合は、laxフラグをTRUEに設定する必要があります。マテリアライズド・ビューは自動的に移動され、移動先のグループのリフレッシュ間隔が適用されます。そうでない場合は、ADDのコールでエラー・メッセージが生成されます。

141.3.2 CHANGEプロシージャ

このプロシージャは、リフレッシュ・グループのリフレッシュ間隔を変更します。

構文

DBMS_REFRESH.CHANGE (
   name                  IN VARCHAR2,
   next_date             IN DATE           := NULL,
   interval              IN VARCHAR2       := NULL,
   implicit_destroy      IN BOOLEAN        := NULL,
   rollback_seg          IN VARCHAR2       := NULL,
   push_deferred_rpc     IN BOOLEAN        := NULL,
   refresh_after_errors  IN BOOLEAN        := NULL,
   purge_option          IN BINARY_INTEGER := NULL,
   parallelism           IN BINARY_INTEGER := NULL,
   heap_size             IN BINARY_INTEGER := NULL);

パラメータ

表141-3 CHANGEプロシージャのパラメータ

パラメータ 説明

name

リフレッシュ間隔を変更するリフレッシュ・グループの名前です。

next_date

次にリフレッシュを行う日付です。デフォルトでは、この日付は変更されません。

interval

このファンクションを使用して、リフレッシュ・グループ内のマテリアライズド・ビューを次にリフレッシュするタイミングが計算されます。intervalは、リフレッシュの直前に評価されます。したがって、リフレッシュにかかる時間より長い間隔を選択します。デフォルトでは、intervalは変更されません。

implicit_destroy

implicit_destroyフラグの値をリセットできます。このフラグが設定されている場合、グループにメンバーが存在しなくなると、そのグループが自動的に削除されます。デフォルトでは、このフラグは変更されません。

rollback_seg

使用するロールバック・セグメントを変更できます。デフォルトでは、ロールバック・セグメントは変更されません。このパラメータをリセットしてデフォルトのロールバック・セグメントを使用するには、引用符を含めてNULLを指定します。引用符を含めずにNULLを指定すると、現在使用しているロールバック・セグメントが変更されません。

push_deferred_rpc

Oracle Database 12cリリース2 (12.2)以上では、このパラメータは無視されます。

refresh_after_errors

Oracle Database 12cリリース2 (12.2)以上では、このパラメータは無視されます。

purge_option

Oracle Database 12cリリース2 (12.2)以上では、このパラメータは無視されます。

parallelism

  • 0 (ゼロ)はシリアル伝播を指定します。

  • n > 1は、n個のパラレル処理のパラレル伝播を指定します。

  • 1は、パラレル処理を1つのみ使用するパラレル伝播を指定します。

heap_size

パラレル伝播スケジュールのために同時に検査されるトランザクションの最大数です。最適なパフォーマンスを実現するデフォルト値が、自動的に計算されます。

ノート:

Oracleサポート・サービスから指示された場合を除き、このパラメータを設定しないでください。

141.3.3 DESTROYプロシージャ

このプロシージャは、リフレッシュ・グループからすべてのマテリアライズド・ビューを削除して、リフレッシュ・グループを削除します。

構文

DBMS_REFRESH.DESTROY (
   name   IN   VARCHAR2);

パラメータ

表141-4 DESTROYプロシージャのパラメータ

パラメータ 説明

name

破棄するリフレッシュ・グループの名前です。

141.3.4 MAKEプロシージャ

このプロシージャは、リフレッシュ・グループ・メンバー、およびこのグループ・メンバーをリフレッシュする間隔を指定します。

構文

DBMS_REFRESH.MAKE (
   name                  IN    VARCHAR2
   { list                IN    VARCHAR2,
   | tab                 IN    DBMS_UTILITY.UNCL_ARRAY,}
   next_date             IN    DATE,
   interval              IN    VARCHAR2,
   implicit_destroy      IN    BOOLEAN         := FALSE,
   lax                   IN    BOOLEAN         := FALSE,
   job                   IN    BINARY_INTEGER  := 0,
   rollback_seg          IN    VARCHAR2        := NULL,
   push_deferred_rpc     IN    BOOLEAN         := TRUE,
   refresh_after_errors  IN    BOOLEAN         := FALSE
   purge_option          IN    BINARY_INTEGER  := NULL,
   parallelism           IN    BINARY_INTEGER  := NULL,
   heap_size             IN    BINARY_INTEGER  := NULL
   job_name              IN    VARCHAR2        := NULL,
   auto_commit           IN    BOOLEAN         := NULL);

ノート:

このプロシージャはオーバーロードされています。listパラメータとtabパラメータは、同時には指定できません。

パラメータ

表141-5 MAKEプロシージャのパラメータ

パラメータ 説明

name

[schema_name.]refresh_group_nameと指定された、リフレッシュ・グループの識別に使用される一意の名前です。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。リフレッシュ・グループは、表と同じ命名規則に従って名前付けをします。

list

リフレッシュするマテリアライズド・ビューの、カンマ区切りのリストです。シノニムはサポートされていません。これらのマテリアライズド・ビューは、異なるスキーマに置くことができ、また異なるマスター表またはマスター・マテリアライズド・ビューを持つことができます。ただし、すべてのマテリアライズド・ビューが、カレント・データベース内に存在する必要があります。

各マテリアライズド・ビューは、[schema_name.]materialized_view_nameと指定されています。スキーマを指定しない場合は、リフレッシュ・グループの所有者がデフォルトで使用されます。

tab

カンマ区切りのリストのかわりに、DBMS_UTILITY.UNCL_ARRAYデータ・タイプを使用したPL/SQL連想配列で、リフレッシュするマテリアライズド・ビューの名前を指定できます。表にマテリアライズド・ビュー名がn個ある場合、最初のマテリアライズド・ビューは1の位置に置かれ、n + 1の位置はNULLに設定されます。

各マテリアライズド・ビューは、[schema_name.]materialized_view_nameと指定されています。スキーマを指定しない場合は、リフレッシュ・グループの所有者がデフォルトで使用されます。

next_date

次にリフレッシュを行う日付です。

interval

このファンクションを使用して、グループ内のマテリアライズド・ビューを次にリフレッシュするタイミングが計算されます。このフィールドは、next_date値とともに使用します。

たとえば、intervalにNEXT_DAY(SYSDATE+1, "MONDAY")を指定した場合、next_dateが月曜と評価されると、毎週月曜日にマテリアライズド・ビューがリフレッシュされます。intervalは、リフレッシュの直前に評価されます。したがって、リフレッシュにかかる時間より長い間隔を選択します。

implicit_destroy

リフレッシュ・グループにメンバーが存在しなくなったとき、リフレッシュ・グループを自動的に削除するには、このパラメータをTRUEに設定します。このフラグは、SUBTRACTプロシージャがコールされたときのみにチェックされます。つまり、このフラグが設定されていても、空のリフレッシュ・グループを作成できます。

lax

マテリアライズド・ビューは、一度に1つのリフレッシュ・グループのみに所属できます。マテリアライズド・ビューを既存のグループから新しいリフレッシュ・グループに移動する場合は、このパラメータをTRUEに設定する必要があります。マテリアライズド・ビューは自動的に移動され、移動先のグループのリフレッシュ間隔が適用されます。そうでない場合は、MAKEのコールでエラー・メッセージが生成されます。

job

インポート・ユーティリティで必要です。デフォルトの0(ゼロ)を使用してください。

rollback_seg

マテリアライズド・ビューのリフレッシュ時に使用するロールバック・セグメントの名前です。デフォルトのNULLの場合、デフォルトのロールバック・セグメントが使用されます。

push_deferred_rpc

Oracle Database 12cリリース2 (12.2)以上では、このパラメータは無視されます。

refresh_after_errors

Oracle Database 12cリリース2 (12.2)以上では、このパラメータは無視されます。

purge_option

Oracle Database 12cリリース2 (12.2)以上では、このパラメータは無視されます。

parallelism

  • 0 (ゼロ)はシリアル伝播を指定します。

  • n > 1は、n個のパラレル処理のパラレル伝播を指定します。

  • 1は、パラレル処理を1つのみ使用するパラレル伝播を指定します。

heap_size

パラレル伝播スケジュールのために同時に検査されるトランザクションの最大数です。最適なパフォーマンスを実現するデフォルト値が、自動的に計算されます。

ノート:

Oracleサポート・サービスから指示された場合を除き、このパラメータを設定しないでください。

job_name

このパラメータは、インポート・ユーティリティで必要です。ユーザーは、デフォルト値NULLを使用する必要があります。

auto_commit

サポートされている値はNULLTRUEおよびFALSEです。

  • NULL - ユーザーは、DBMS_JOBを引き続き使用できます。

  • TRUE - リフレッシュ・グループのジョブがDBMS_REFRESH.MAKEによって作成された後に、コミット文が自動的に発行されます。

  • FALSE - ユーザーは、DBMS_REFRESH.MAKEをコールした後に、トランザクションを終了するコミット文を発行する必要があります。

デフォルト値はNULLです。

使用上のノート

DBMS_SCHEDULERジョブが使用される場合は、インポート・ユーティリティおよびエクスポート・ユーティリティにCREATE JOB権限が必要です。

141.3.5 REFRESHプロシージャ

このプロシージャは、リフレッシュ・グループを手動でリフレッシュします。

構文

DBMS_REFRESH.REFRESH (
   name   IN    VARCHAR2);

パラメータ

表141-6 REFRESHプロシージャのパラメータ

パラメータ 説明

name

手動でリフレッシュするリフレッシュ・グループの名前です。

141.3.6 SUBTRACTプロシージャ

このプロシージャは、マテリアライズド・ビューをリフレッシュ・グループから削除します。

構文

DBMS_REFRESH.SUBTRACT (
   name      IN    VARCHAR2,
   { list    IN    VARCHAR2,
   | tab     IN    DBMS_UTILITY.UNCL_ARRAY, }
   lax       IN    BOOLEAN := FALSE);

ノート:

このプロシージャはオーバーロードされています。listパラメータとtabパラメータは、同時には指定できません。

パラメータ

表141-7 SUBTRACTプロシージャのパラメータ

パラメータ 説明

name

[schema_name.]refresh_group_nameと指定された、メンバーを削除するリフレッシュ・グループの名前です。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

list

リフレッシュ・グループから削除するマテリアライズド・ビューの、カンマ区切りのリストです。(シノニムはサポートされていません。)これらのマテリアライズド・ビューは、異なるスキーマに置くことができ、また異なるマスター表またはマスター・マテリアライズド・ビューを持つことができます。ただし、すべてのマテリアライズド・ビューが、カレント・データベース内に存在する必要があります。

各マテリアライズド・ビューは、[schema_name.]materialized_view_nameと指定されています。スキーマを指定しない場合は、リフレッシュ・グループの所有者がデフォルトで使用されます。

tab

カンマ区切りのリストのかわりに、DBMS_UTILITY.UNCL_ARRAYタイプのPL/SQL連想配列を使用でき、この表の各要素は、マテリアライズド・ビューの名前になります。最初のマテリアライズド・ビューは1の位置に置かれます。最後の位置はNULLになります。

各マテリアライズド・ビューは、[schema_name.]materialized_view_nameと指定されています。スキーマを指定しない場合は、リフレッシュ・グループの所有者がデフォルトで使用されます。

lax

リフレッシュ・グループ・メンバーではないマテリアライズド・ビューの削除を試みたときに、エラー・メッセージが生成されるようにするには、このパラメータをFALSEに設定します。