プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CREATE MATERIALIZED VIEW LOG

用途

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


注意:

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

マスター表のデータがDMLによって変更された場合、Oracle Databaseは変更を記述する行をマテリアライズド・ビュー・ログに格納し、そのマテリアライズド・ビュー・ログを使用して、マスター表を基にしたマテリアライズド・ビューをリフレッシュします。このプロセスを、増分リフレッシュまたは高速リフレッシュといいます。マテリアライズド・ビュー・ログがない場合、マテリアライズド・ビュー問合せが再実行され、マテリアライズド・ビューがリフレッシュされます。このプロセスが完全リフレッシュです。通常、高速リフレッシュは、完全リフレッシュよりも高速に処理されます。

マテリアライズド・ビュー・ログは、マスター表と同一のスキーマ内のマスター・データベースにあります。マスター表に定義できるマテリアライズド・ビュー・ログは1つのみです。Oracle Databaseでは、このマテリアライズド・ビュー・ログを使用して、マスター表に基づく高速リフレッシュが可能なすべてのマテリアライズド・ビューに対して、高速リフレッシュを実行します。

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

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

COMMIT SCNを利用できるのは、新しく作成するマテリアライズド・ビュー・ログのみであることに注意してください。既存のマテリアライズド・ビュー・ログは、削除して再度作成しないかぎり、COMMIT SCNを追加するように変更できません。詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


関連項目:

  • マテリアライズド・ビューの概要は、「CREATE MATERIALIZED VIEW」「ALTER MATERIALIZED VIEW」『Oracle Database概要』『Oracle Databaseデータ・ウェアハウス・ガイド』および『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

  • マテリアライズド・ビュー・ログの変更については、「ALTER MATERIALIZED VIEW LOG」を参照してください。

  • マテリアライズド・ビュー・ログの削除については、「DROP MATERIALIZED VIEW LOG」を参照してください。

  • ダイレクト・ローダー・ログの使用については、『Oracle Databaseユーティリティ』を参照してください。


前提条件

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

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

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

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


関連項目:

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

セマンティクス

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が戻されます。

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データ・ウェアハウス・ガイド』を参照してください。

マテリアライズド・ビュー・ログの作成例: 次の文は、物理特性および記憶特性を指定する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; 

マテリアライズド・ビュー・ログに結合列を指定する例: 次の文は、サンプル・スキーマoeorder_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;

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