用途
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
TABLE
権限がある場合、関連するマテリアライズド・ビュー・ログを作成できます。
他のユーザーのスキーマ内に表のマテリアライズド・ビュー・ログを作成する場合は、CREATE
ANY
TABLE
システム権限、COMMENT
ANY
TABLE
システム権限、およびマスター表に対するSELECT
オブジェクト権限またはSELECT
ANY
TABLE
システム権限が必要です。
どちらの場合も、マテリアライズド・ビュー・ログの所有者には、マテリアライズド・ビュー・ログを格納するための表領域への十分な割当て制限またはUNLIMITED
TABLESPACE
システム権限が必要です。
関連項目: マテリアライズド・ビュー・ログを作成する場合の前提条件については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
構文
create_materialized_vw_log::=
(physical_attributes_clause::=、logging_clause::=、parallel_clause::=、table_partitioning_clauses ::=(「CREATE
TABLE
」の項)、new_values_clause::=、mv_log_purge_clause::=を参照)
(storage_clause::=を参照)
logging_clause::=
new_values_clause::=
セマンティクス
schema
マテリアライズド・ビュー・ログのマスター表が含まれているスキーマを指定します。schema
を省略した場合、マスター表は自分のスキーマ内に含まれているとみなされます。マテリアライズド・ビュー・ログは、マスター表のスキーマ内に作成されます。なお、ユーザーSYS
のスキーマ内の表に対しては、マテリアライズド・ビュー・ログを作成できません。
table
マテリアライズド・ビュー・ログを作成するマスター表の名前を指定します。マスター表内で暗号化されるマテリアライズド・ビュー・ログの列は、同じ暗号化アルゴリズムを使用して暗号化されます。
マテリアライズド・ビュー・ログのマスター表の制限事項 マテリアライズド・ビュー・ログのマスター表には、次の制限事項があります。
一時表またはビューに対しては、マテリアライズド・ビュー・ログを作成できません。
仮想列を含むマスター表に対しては、マテリアライズド・ビュー・ログを作成できません。
physical_attributes_clause
を使用すると、マテリアライズド・ビュー・ログにおける物理特性および記憶特性を定義できます。
マテリアライズド・ビュー・ログを作成する表領域を指定します。この句を省略した場合、マテリアライズド・ビュー・ログのスキーマのデフォルト表領域内にマテリアライズド・ビュー・ログが作成されます。
LOGGING
またはNOLOGGING
を指定すると、マテリアライズド・ビュー・ログのロギング特性を設定できます。デフォルトは、マテリアライズド・ビュー・ログが存在する表領域のロギング特性です。
アクセス頻度の高いデータについて、CACHE
は、全表スキャンの実行時にこのログ用に取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。
NOCACHE
は、ブロックをLRUリストの最低使用頻度側に入れることを指定します。デフォルトはNOCACHE
です。
注意: NOCACHE は、 storage_clauseにKEEP を指定したマテリアライズド・ビュー・ログには、影響しません。 |
parallel_clause
を使用すると、パラレル操作でマテリアライズド・ビュー・ログをサポートするかどうかを指定できます。
この句の詳細は、「CREATE TABLE」の「parallel_clause
」
を参照してください。
table_partitioning_clauses
を使用すると、マテリアライズド・ビュー・ログが、指定された範囲の値またはハッシュ・ファンクションでパーティション化されることを指定できます。マテリアライズド・ビュー・ログのパーティション化は、表のパーティション化と同じです。
WITH
句を使用すると、マスター内の行の更新時に、マテリアライズド・ビュー・ログに主キー、ROWID、オブジェクトIDまたはこれらの行識別子の組合せを記録するかどうかを指定できます。また、マテリアライズド・ビュー・ログに順序を追加し、レコードに対する追加の順序情報を提供することもできます。
この句を指定すると、マテリアライズド・ビュー・ログがフィルタ列(副問合せマテリアライズド・ビューが参照する主キー以外の列)または結合列(副問合せのWHERE
句で結合を定義する主キー以外の列)として参照する追加の列を記録するかどうかを指定できます。
この句を指定しない場合、またはPRIMARY
KEY
、ROWID
または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
KEY
、ROWID
、OBJECT
ID
、SEQUENCE
、および列リストを1つずつです。
主キー列は、マテリアライズド・ビュー・ログに暗黙的に記録されます。そのため、column
が主キー列の1つを含む場合は、次の結合はいずれも指定できません。
WITH ... PRIMARY KEY ... (column) WITH ... (column) ... PRIMARY KEY WITH (column)
関連項目:
|
NEW
VALUES
句を使用すると、更新DML操作で、古い値と新しい値の両方をマテリアライズド・ビュー・ログに保存するかどうかを指定できます。
INCLUDING INCLUDING
を指定すると、新しい値と古い値の両方をログに保存できます。このログが単一表マテリアライズド集計ビューの表用で、マテリアライズド・ビューに高速リフレッシュを実行する場合、INCLUDING
を指定してください。
EXCLUDING EXCLUDING
を指定すると、ログに新しい値が記録されなくなります。これはデフォルトです。この句を使用すると、新しい値の記録によるオーバーヘッドを回避できます。マスター表に高速リフレッシュが可能な単一表マテリアライズド集計ビューが定義されている場合は、この句を使用しないでください。
この句を使用すると、マテリアライズド・ビュー・ログのパージ時間を指定できます。
IMMEDIATE
SYNCHRONOUS
: マテリアライズド・ビュー・ログは、リフレッシュの直後に消去されます。これはデフォルトです。
IMMEDIATE
ASYNCHRONOUS
: マテリアライズド・ビュー・ログは、リフレッシュ操作後に、別のOracleスケジューラ・ジョブで消去されます。
START
WITH
、NEXT
および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;
マテリアライズド・ビュー・ログに結合列を指定する例: 次の文は、サンプル・スキーマ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;
マスター表に定義されたログに古い値と新しい値の両方が含まれるため、このマテリアライズド・ビューでは、高速リフレッシュを実行できます。