日本語PDF

14.4 CREATEMATERIALIZEDVIEWLOG

目的

CREATE MATERIALIZED VIEW LOG文を使用すると、マテリアライズド・ビューのマスター表に関連する表マテリアライズド・ビュー・ログを作成できます。

注意:

下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

マテリアライズド・ビュー・ログは、高速リフレッシュと同期リフレッシュという、2種類のマテリアライズド・ビュー・リフレッシュに使用されます。

高速リフレッシュには、従来型のマテリアライズド・ビュー・ログが使用されます。高速リフレッシュ(増分リフレッシュとも呼ばれます)の実行時、マスター表のデータにDML変更が加えられていると、Oracle Databaseは、その変更を記述した行をマテリアライズド・ビュー・ログに格納し、そのマテリアライズド・ビュー・ログを使用して、マスター表に基づくマテリアライズド・ビューをリフレッシュします。

同期リフレッシュには、ステージングログという特別なマテリアライズド・ビュー・ログが使用されます。同期リフレッシュの実行時、DMLの変更は、最初にステージング・ログに記述されてから、マスター表とマテリアライズド・ビューに同時に適用されます。これにより、マスター表のデータとマテリアライズド・ビューのデータが、リフレッシュ・プロセス全体で同期されていることを保証できます。このリフレッシュ方法は、データ・ウェアハウス環境で役立ちます。

マテリアライズド・ビュー・ログを使用しない場合、Oracle Databaseは、マテリアライズド・ビュー問合せを再実行してマテリアライズド・ビューをリフレッシュする必要があります。このプロセスが完全リフレッシュです。通常、完全リフレッシュを完了するまでの時間は、高速リフレッシュや同期リフレッシュよりも長くなります。

マテリアライズド・ビュー・ログは、マスター表と同一のスキーマ内のマスター・データベースにあります。マスター表に定義できるマテリアライズド・ビュー・ログは1つのみです。

マテリアライズド結合ビューを高速リフレッシュまたは同期リフレッシュする場合は、そのマテリアライズド・ビューが参照するマスター表ごとにマテリアライズド・ビュー・ログを作成する必要があります。

高速リフレッシュでは、タイムスタンプ・ベース・マテリアライズド・ビュー・ログと、コミットSCNベース・マテリアライズド・ビュー・ログという、2つのタイプのマテリアライズド・ビュー・ログをサポートします。タイムスタンプ・ベース・マテリアライズド・ビュー・ログは、タイムスタンプに基づきます。このログを使用する場合、マテリアライズド・ビューのリフレッシュを準備するためにいくつかの設定操作が必要です。コミットSCNベース・マテリアライズド・ビュー・ログは、タイムスタンプではなく、コミットSCNデータに基づきます。この場合、設定操作が必要なくなり、マテリアライズド・ビューのリフレッシュ速度を向上させることができます。COMMIT SCN句を指定すると、コミットSCNベース・マテリアライズド・ビュー・ログが作成されます。それ以外の場合は、タイムスタンプ・ベース・マテリアライズド・ビュー・ログが作成されます。COMMIT SCNを利用できるのは、新しく作成するマテリアライズド・ビュー・ログのみであることに注意してください。既存のマテリアライズド・ビュー・ログは、削除して再度作成しないかぎり、COMMIT SCNを追加するように変更できません。詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

同期リフレッシュは、タイムスタンプ・ベース・ステージング・ログのみをサポートします。

関連項目:

前提条件

マテリアライズド・ビュー・ログを作成するために必要な権限は、マテリアライズド・ビュー・ログに関連付けられた基礎となるオブジェクトの作成に必要な権限と直接関連しています。

  • マスター表を所有しているユーザーにCREATE TABLE権限がある場合、関連するマテリアライズド・ビュー・ログを作成できます。

  • 他のユーザーのスキーマ内に表のマテリアライズド・ビュー・ログを作成する場合は、CREATE ANY TABLEシステム権限、COMMENT ANY TABLEシステム権限、およびマスター表に対するREADまたはSELECTオブジェクト権限またはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

どちらの場合も、マテリアライズド・ビュー・ログの所有者には、マテリアライズド・ビュー・ログを格納するための表領域への十分な割当て制限またはUNLIMITED TABLESPACEシステム権限が必要です。

関連項目:

マテリアライズド・ビュー・ログを作成する場合の前提条件については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

制限事項

CREATE MATERIALIZED VIEW LOG文では、マスター表の次の列はサポートされていません。

  • 非表示列

  • ID列

  • BFILE

  • 時制有効性列

構文

logging_clause::=

parallel_clause::=

new_values_clause::=

mv_log_purge_clause::=

for_refresh_clause::=

セマンティクス

schema

マテリアライズド・ビュー・ログのマスター表が含まれているスキーマを指定します。schemaを省略した場合、マスター表は自分のスキーマ内に含まれているとみなされます。マテリアライズド・ビュー・ログは、マスター表のスキーマ内に作成されます。なお、ユーザーSYSのスキーマ内の表に対しては、マテリアライズド・ビュー・ログを作成できません。

table

マテリアライズド・ビュー・ログを作成するマスター表の名前を指定します。マスター表内で暗号化されるマテリアライズド・ビュー・ログの列は、同じ暗号化アルゴリズムを使用して暗号化されます。

マテリアライズド・ビュー・ログのマスター表の制限事項

マテリアライズド・ビュー・ログのマスター表には、次の制限が適用されます。

  • 一時表またはビューに対しては、マテリアライズド・ビュー・ログを作成できません。

  • 仮想列を含むマスター表に対しては、マテリアライズド・ビュー・ログを作成できません。

physical_attributes_clause

physical_attributes_clauseを使用すると、マテリアライズド・ビュー・ログにおける物理特性および記憶特性を定義できます。

関連項目:

これらの句の詳細(デフォルト値など)は、「physical_attributes_clause」および「storage_clause」を参照してください。

TABLESPACE句

マテリアライズド・ビュー・ログを作成する表領域を指定します。この句を省略した場合、マテリアライズド・ビュー・ログのスキーマのデフォルト表領域内にマテリアライズド・ビュー・ログが作成されます。

logging_clause

LOGGINGまたはNOLOGGINGを指定すると、マテリアライズド・ビュー・ログのロギング特性を設定できます。デフォルトは、マテリアライズド・ビュー・ログが存在する表領域のロギング特性です。

関連項目:

この句の詳細は、logging_clause」を参照してください。

CACHE | NOCACHE

アクセス頻度の高いデータについて、CACHEは、全表スキャンの実行時にこのログ用に取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。

NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。デフォルトはNOCACHEです。

注意:

NOCACHEは、storage_clauseKEEPを指定したマテリアライズド・ビュー・ログには、影響しません。

関連項目:

CACHEまたはNOCACHEの指定の詳細は、「CREATE TABLE」を参照してください。

parallel_clause

parallel_clauseを使用すると、パラレル操作でマテリアライズド・ビュー・ログをサポートするかどうかを指定できます。

この句の詳細は、「CREATE TABLE」のparallel_clause」を参照してください。

table_partitioning_clauses

table_partitioning_clausesを使用すると、マテリアライズド・ビュー・ログが、指定された範囲の値またはハッシュ・ファンクションでパーティション化されることを指定できます。マテリアライズド・ビュー・ログのパーティション化は、表のパーティション化と同じです。

関連項目:

CREATE TABLE」のtable_partitioning_clausesを参照してください。

WITH句

WITH句を使用すると、マスター内の行の更新時に、マテリアライズド・ビュー・ログに主キー、ROWID、オブジェクトIDまたはこれらの行識別子の組合せを記録するかどうかを指定できます。また、マテリアライズド・ビュー・ログに順序を追加し、レコードに対する追加の順序情報を提供することもできます。

この句を指定すると、マテリアライズド・ビュー・ログがフィルタ列(副問合せマテリアライズド・ビューが参照する主キー以外の列)または結合列(副問合せのWHERE句で結合を定義する主キー以外の列)として参照する追加の列を記録するかどうかを指定できます。

この句を指定しない場合、またはPRIMARY KEYROWIDまたはOBJECT IDなしで句を指定する場合は、デフォルトで主キー値が格納されます。ただし、作成時にOBJECT IDまたはROWIDのみを指定した場合は、主キー値は暗黙的に格納されません。明示的に、またはデフォルトで作成された主キー・ログによって、主キー制約の追加の検証が実行されます。

OBJECT ID

OBJECT IDを指定すると、変更されるすべての行に対するシステム生成またはユーザー定義のオブジェクト識別子をマテリアライズド・ビュー・ログに記録する必要があることを指定できます。

OBJECT IDの制限事項

OBJECT IDは、オブジェクト表のログの作成時のみに指定でき、記憶表用には指定できません。

PRIMARY KEY

PRIMARY KEYを指定すると、変更されるすべての行の主キーをマテリアライズド・ビュー・ログに記録する必要があることを指定できます。

ROWID

ROWIDを指定すると、変更されるすべての行のROWIDをマテリアライズド・ビュー・ログに記録する必要があることを指定できます。

SEQUENCE

SEQUENCEを指定すると、追加の順序情報を提供する順序値をマテリアライズド・ビュー・ログに記録できます。更新操作後の高速リフレッシュには、順序番号が必要です。

関連項目:

マテリアライズド・ビュー・ログの順序番号の使用およびこの句の使用例については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

COMMIT SCN

COMMIT SCN句を使用しない場合、マテリアライズド・ビュー・ログはタイムスタンプ・ベースになり、マテリアライズド・ビューのリフレッシュを準備するためにいくつかの設定操作が必要になります。COMMIT SCNを指定すると、タイムスタンプのかわりにコミットSCNデータが使用されます。この設定により、設定操作が必要なくなり、マテリアライズド・ビューのリフレッシュ速度を向上できます。

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、次のようなローカル・マテリアライズド・ビューを作成できます(ON COMMITおよびON DEMANDを含む)。

  • マテリアライズド集計ビュー(単一表に対するマテリアライズド集計ビューを含む)

  • マテリアライズド結合ビュー

  • 主キーおよびROWIDに基づく単一表マテリアライズド・ビュー

  • UNION ALLマテリアライズド・ビュー(各UNION ALLブランチはここに示したマテリアライズド・ビューのいずれかのタイプ)

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、リモート・マテリアライズド・ビューを作成できません。

COMMIT SCNの制限事項

COMMIT SCNには、次の制限事項が適用されます。

  • 1つ以上のLOB列を持つ表に対するCOMMIT SCNの使用はサポートされておらず、ORA-32421が戻されます。

  • 異なるマテリアライズド・ビュー・ログを使用するマスター表(つまり、タイムスタンプ・ベース・マテリアライズド・ビュー・ログを使用するマスター表およびコミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表)にはマテリアライズド・ビューを作成できず、ORA-32414が戻されます。

  • COMMIT SCNを指定すると、FOR SYNCHRONOUS REFRESHが指定できなくなります。

column

変更されるすべての行に対して、マテリアライズド・ビュー・ログに値を記録する列を指定します。通常、フィルタ列および結合列を指定します。

WITH句の制限事項

この句には、次の制限事項があります。

  • 各マテリアライズド・ビュー・ログに指定できるのは、PRIMARY KEYROWIDOBJECT IDSEQUENCE、および列リストを1つずつです。

  • 主キー列は、マテリアライズド・ビュー・ログに暗黙的に記録されます。そのため、columnが主キー列の1つを含む場合は、次の結合はいずれも指定できません。

    WITH ... PRIMARY KEY ... (column)
    WITH ... (column) ... PRIMARY KEY
    WITH (column)

関連項目:

NEW VALUES句

NEW VALUES句を使用すると、更新DML操作で、古い値と新しい値の両方をマテリアライズド・ビュー・ログに保存するかどうかを指定できます。

INCLUDING

INCLUDINGを指定すると、新しい値と古い値の両方をログに保存できます。このログが単一表マテリアライズド集計ビューの表用で、マテリアライズド・ビューに高速リフレッシュを実行する場合、INCLUDINGを指定してください。

EXCLUDING

EXCLUDINGを指定すると、ログに新しい値が記録されなくなります。これはデフォルトです。この句を使用すると、新しい値の記録によるオーバーヘッドを回避できます。マスター表に高速リフレッシュが可能な単一表マテリアライズド集計ビューが定義されている場合は、この句を使用しないでください。

mv_log_purge_clause

この句を使用すると、マテリアライズド・ビュー・ログのパージ時間を指定できます。

  • IMMEDIATE SYNCHRONOUS: マテリアライズド・ビュー・ログは、リフレッシュの直後に消去されます。これはデフォルトです。

  • IMMEDIATE ASYNCHRONOUS: マテリアライズド・ビュー・ログは、リフレッシュ操作後に、別のOracleスケジューラ・ジョブで消去されます。

  • START WITHNEXTおよびREPEAT INTERVALは、CREATEまたはALTER MATERIALIZED VIEW LOG文で開始される、マテリアライズド・ビューのリフレッシュに依存しないスケジュール実行のパージを設定します。これは、CREATEまたはALTER MATERIALIZED VIEW文の、スケジュール実行のリフレッシュ構文と似ています。

    • START WITH日時式は、パージをいつ開始するかを指定します。

    • NEXT日時式は、パージの次の実行時間を計算します。

    REPEAT INTERVALを指定すると、次の実行時間は、SYSDATE + interval_exprとなります。

    CREATE MATERIALIZED VIEW LOG文でスケジュール実行のパージを指定すると、ログ・パージを実行するOracleスケジューラ・ジョブが作成されます。このジョブは、DBMS_SNAPSHOT.PURGE_LOGプロシージャをコールして、マテリアライズド・ビュー・ログを消去します。この処理によって、マテリアライズド・ビューを何度もリフレッシュする場合のパージ・コストを軽減できます。

mv_log_purge_clauseの制限事項

この句は、一時表のマテリアライズド・ビュー・ログでは無効です。

関連項目:

マテリアライズド・ビュー・ログのパージの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

for_refresh_clause

この句を使用すると、マテリアライズド・ビュー・ログを使用するリフレッシュ方法を指定できます。指定できるリフレッシュ方法は、マスター表ごとに1つのみです。

FOR SYNCHRONOUS REFRESH

この句を指定すると、同期リフレッシュに使用可能なステージング・ログを作成できます。staging_log_nameを使用すると、作成するステージング・ログの名前を指定できます。このステージング・ログは、マスター表が存在するスキーマ内に作成されます。

ステージング・ログを作成すると、マスター表に対する直接のDML操作は実行できなくなります。データの変更操作の準備と実行には、DBMS_SYNC_REFRESHパッケージに含まれるプロシージャを使用する必要があります。

同期リフレッシュの制限事項

同期リフレッシュには、次の制限事項が適用されます。

  • FOR SYNCHRONOUS REFRESHを指定すると、COMMIT SCNは指定できなくなります。

  • 同期リフレッシュの対象にするには、マスター表が次の条件を満たしている必要があります。

    • マスター表がファクト表の場合は、その表がパーティション化されている必要があります。

    • マスター表は、キーを保持している必要があります。マスター表がディメンション表の場合は、その表に対して定義された主キーを保持している必要があります。マスター表がファクト表の場合は、そのファクト表に結合されたディメンション表の外部キーになる列のセットがキーになるとみなされます。

    • マスター表は、その表に対して定義されたNULL以外の仮想プライベート・データベース(VPD)ポリシーやトリガーを保持できません。

    Oracle Databaseでは、上記のすべての条件が満たされていなくても、マスター表に対するステージング・ログを作成できます。ただし、そのマスター表は同期リフレッシュの対象にはなりません。

  • マスター表に対する既存のマテリアライズド・ビューは、REFRESH ON DEMANDモードのマテリアライズド・ビューであることが必要です。既存のマテリアライズド・ビューがREFRESH ON COMMITモードのマテリアライズド・ビューの場合は、ALTER MATERIALIZED VIEWalter_mv_refresh句でREFRESH ON DEMANDモードのマテリアライズド・ビューに変換してから、ステージング・ログを作成できます。

関連項目:

FOR FAST REFRESH

この句を指定すると、高速リフレッシュに使用可能なマテリアライズド・ビュー・ログを作成できます。このマテリアライズド・ビュー・ログは、マスター表が存在するスキーマ内に作成されます。これはデフォルトです。

高速リフレッシュ用のマテリアライズド・ビュー・ログの作成: 例

次の文は、物理特性および記憶特性を指定するoe.customers表にマテリアライズド・ビュー・ログを作成します。

CREATE MATERIALIZED VIEW LOG ON customers
   PCTFREE 5 
   TABLESPACE example 
   STORAGE (INITIAL 10K);

customersのマテリアライズド・ビュー・ログは、主キー・マテリアライズド・ビューの高速リフレッシュのみサポートします。

次の文は、ROWID句を指定してマテリアライズド・ビュー・ログの別のバージョンを作成します。これによって、高速リフレッシュが使用可能になるマテリアライズド・ビューのタイプが追加されます。

CREATE MATERIALIZED VIEW LOG ON customers WITH PRIMARY KEY, ROWID;

このcustomersのマテリアライズド・ビュー・ログによって、ROWIDマテリアライズド・ビューおよびマテリアライズド結合ビューに対する高速リフレッシュが実行可能になります。マテリアライズド集計ビューの高速リフレッシュを指定するには、次の例に示すとおり、SEQUENCEおよびINCLUDING NEW VALUES句も指定する必要があります。

マテリアライズド・ビュー・ログへのパージの繰返し間隔の指定: 例

次の文は、oe.orders表にマテリアライズド・ビュー・ログを作成します。このログの内容は、マテリアライズド・ビュー・ログの作成日の5日後から5日間に1回、消去されます。

CREATE MATERIALIZED VIEW LOG ON orders
  PCTFREE 5
  TABLESPACE example
  STORAGE (INITIAL 10K)
  PURGE REPEAT INTERVAL '5' DAY;

マテリアライズド・ビュー・ログへのフィルタ列の指定: 例

次の文は、sh.sales表にマテリアライズド・ビュー・ログを作成し、作成されたマテリアライズド・ビュー・ログは「マテリアライズド集計ビューの作成: 例」で使用されます。ここでは、このマテリアライズド・ビューで参照される表のすべての列をフィルタ列として指定します。

CREATE MATERIALIZED VIEW LOG ON sales 
   WITH ROWID, SEQUENCE(amount_sold, time_id, prod_id)
   INCLUDING NEW VALUES; 

マテリアライズド・ビュー・ログへの結合列の指定: 例

次の文は、サンプルのoeスキーマのorder_items表にマテリアライズド・ビュー・ログを作成します。ログには、主キーおよび「高速リフレッシュ可能なマテリアライズド・ビューの作成: 例」で結合列として使用されたproduct_idが記録されます。

CREATE MATERIALIZED VIEW LOG ON order_items WITH (product_id);

マテリアライズド・ビュー・ログへの新しい値の追加: 例

次の例では、INCLUDING NEW VALUESを指定するoe.product_information表にマテリアライズド・ビュー・ログを作成します。

CREATE MATERIALIZED VIEW LOG ON product_information 
   WITH ROWID, SEQUENCE (list_price, min_price, category_id), PRIMARY KEY
   INCLUDING NEW VALUES;

次の文は、マテリアライズド集計ビューを作成し、product_informationログを使用します。

CREATE MATERIALIZED VIEW products_mv 
   REFRESH FAST ON COMMIT
   AS SELECT SUM(list_price - min_price), category_id
         FROM product_information 
         GROUP BY category_id;

マスター表に定義されたログに古い値と新しい値の両方が含まれるため、このマテリアライズド・ビューでは、高速リフレッシュを実行できます。

同期リフレッシュのステージング・ログの作成: 例

次の文は、sh.salesファクト表にステージング・ログを作成します。このステージング・ログには、mystage_logという名前が付けられ、shスキーマに格納されます。これは、同期リフレッシュに使用できます。

CREATE MATERIALIZED VIEW LOG ON sales
   PCTFREE 5 
   TABLESPACE example 
   STORAGE (INITIAL 10K)
   FOR SYNCHRONOUS REFRESH USING mystage_log;