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 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
システム権限、およびマスター表に対するREAD
またはSELECT
オブジェクト権限またはREAD
ANY
TABLE
またはSELECT
ANY
TABLE
システム権限が必要です。
どちらの場合も、マテリアライズド・ビュー・ログの所有者には、マテリアライズド・ビュー・ログを格納するための表領域への十分な割当て制限またはUNLIMITED
TABLESPACE
システム権限が必要です。
関連項目:
マテリアライズド・ビュー・ログを作成する場合の前提条件については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
制限事項
CREATE MATERIALIZED VIEW LOG
文では、マスター表の次の列はサポートされていません。
-
非表示列
-
ID列
-
BFILE
列 -
時制有効性列
構文
create_materialized_vw_log::=
(physical_attributes_clause::=、logging_clause::=、parallel_clause::=、table_partitioning_clauses::= (CREATE
TABLE
内)、new_values_clause::=、mv_log_purge_clause::=、for_refresh_clause::=)
logging_clause::=
new_values_clause::=
mv_log_purge_clause::=
for_refresh_clause::=
セマンティクス
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
マテリアライズド・ビュー・ログが存在していない場合は、文の最後に新しいマテリアライズド・ビュー・ログが作成されます。
-
マテリアライズド・ビュー・ログが存在している場合、これは文の最後の時点にあるマテリアライズド・ビュー・ログになります。古いマテリアライズド・ビュー・ログが検出されるため、新しいものは作成されません。
IF EXISTS
はCREATE
とともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statement
が発生します。
schema
マテリアライズド・ビュー・ログのマスター表が含まれているスキーマを指定します。schema
を省略した場合、マスター表は自分のスキーマ内に含まれているとみなされます。マテリアライズド・ビュー・ログは、マスター表のスキーマ内に作成されます。なお、ユーザーSYS
のスキーマ内の表に対しては、マテリアライズド・ビュー・ログを作成できません。
table
マテリアライズド・ビュー・ログを作成するマスター表の名前を指定します。マスター表内で暗号化されるマテリアライズド・ビュー・ログの列は、同じ暗号化アルゴリズムを使用して暗号化されます。
マテリアライズド・ビュー・ログのマスター表の制限事項
マテリアライズド・ビュー・ログのマスター表には、次の制限が適用されます。
-
一時表またはビューに対しては、マテリアライズド・ビュー・ログを作成できません。
-
仮想列を含むマスター表に対しては、マテリアライズド・ビュー・ログを作成できません。
SHARING
SHARING句は、アプリケーションのメンテナンスの際に、アプリケーション・ルートにオブジェクトを作成する場合に使用します。このタイプのオブジェクトはアプリケーション共通オブジェクトと呼ばれ、アプリケーション・ルートに属するアプリケーションPDBと共有できます。
次の共有属性のいずれかを使用して、オブジェクトを共有する方法を指定できます。
-
METADATA
- メタデータ・リンクはメタデータを共有しますが、そのデータは各コンテナに固有です。このタイプのオブジェクトは、メタデータリンク・アプリケーション共通オブジェクトと呼ばれます。 -
NONE
- オブジェクトは共有されず、アプリケーション・ルートでのみアクセスできます。
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_clause
にKEEP
を指定したマテリアライズド・ビュー・ログには、影響しません。
関連項目:
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
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
が戻されます。 -
COMMIT
SCN
を指定すると、FOR
SYNCHRONOUS
REFRESH
が指定できなくなります。
column
変更されるすべての行に対して、マテリアライズド・ビュー・ログに値を記録する列を指定します。通常、フィルタ列および結合列を指定します。
WITH句の制限事項
この句には、次の制限事項があります。
-
各マテリアライズド・ビュー・ログに指定できるのは、
PRIMARY
KEY
、ROWID
、OBJECT
ID
、SEQUENCE
、および列リストを1つずつです。 -
主キー列は、マテリアライズド・ビュー・ログに暗黙的に記録されます。そのため、
column
が主キー列の1つを含む場合は、次の結合はいずれも指定できません。WITH ... PRIMARY KEY ... (column) WITH ... (column) ... PRIMARY KEY WITH (column)
関連項目:
-
マテリアライズド・ビュー・ログに値を明示的および暗黙的に含める方法については、「CREATE MATERIALIZED VIEW」を参照してください。
-
フィルタ列および結合列の詳細は、『Oracle Database管理者ガイド』を参照してください。
-
「マテリアライズド・ビュー・ログへのフィルタ列の指定: 例」および「マテリアライズド・ビュー・ログへの結合列の指定: 例」を参照してください。
NEW VALUES句
NEW
VALUES
句を使用すると、更新DML操作で、古い値と新しい値の両方をマテリアライズド・ビュー・ログに保存するかどうかを指定できます。
INCLUDING
INCLUDING
を指定すると、新しい値と古い値の両方をログに保存できます。このログが単一表マテリアライズド集計ビューの表用で、マテリアライズド・ビューに高速リフレッシュを実行する場合、INCLUDING
を指定してください。
EXCLUDING
EXCLUDING
を指定すると、ログに新しい値が記録されなくなります。これはデフォルトです。この句を使用すると、新しい値の記録によるオーバーヘッドを回避できます。マスター表に高速リフレッシュが可能な単一表マテリアライズド集計ビューが定義されている場合は、この句を使用しないでください。
mv_log_purge_clause
この句を使用すると、マテリアライズド・ビュー・ログのパージ時間を指定できます。
-
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データ・ウェアハウス・ガイド』を参照してください。
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
VIEW
のalter_mv_refresh句でREFRESH ON DEMANDモードのマテリアライズド・ビューに変換してから、ステージング・ログを作成できます。
関連項目:
-
同期リフレッシュを使用するステップの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
-
DBMS_SYNC_REFRESH
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
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;