クエリ定義を実行することで、マテリアライズド・ビューのデータを初期化または更新します。
REFRESH MATERIALIZED VIEW view-list [ WITH { ISOLATION LEVEL isolation-level | { EXCLUSIVE | SHARE } MODE } ] [ FORCE BUILD ]
view-list : [ owner.]materialized-view-name [, ... ]
isolation-level : READ UNCOMMITTED | READ COMMITTED | SERIALIZABLE | REPEATABLE READ | SNAPSHOT
WITH 句 WITH 句は、基本となるベース・テーブルでリフレッシュ中に使用するロックの種類を指定する場合に使用します。ロックの種類によって、マテリアライズド・ビューの移植方法とトランザクションの同時実行性への影響が決まります。WITH 句の設定は、マテリアライズド・ビュー自体にかけられるロックの種類には影響しません。このロックは常に排他ロックです。ロックに指定できる句は、次のいずれかです。
ISOLATION LEVEL 独立性レベル WITH ISOLATION LEVEL は、リフレッシュ操作を実行する場合の独立性レベルを変更する場合に使用します。元の独立性レベルは、文の実行終了時に接続に対してリストアされます。
即時ビューの場合、isolation-level に指定できるのは SERIALIZABLE のみです。
スナップショット・アイソレーションの場合、スナップショット・レベルのみがサポートされます (SNAPSHOT を指定)。文レベルと読み込み専用文のスナップショットはサポートされません。
独立性レベルの詳細については、トランザクションと独立性レベルの使用と独立性レベルと一貫性を参照してください。
EXCLUSIVE MODE WITH EXCLUSIVE MODE は、独立性レベルを変更しないが、基本となるテーブルにコミットされたデータと矛盾しないようにデータを確実に更新する場合に使用します。WITH EXCLUSIVE MODE を使用すると、基本となるすべてのベース・テーブルに排他テーブル・ロックがかけられます。リフレッシュ操作が完了するまで、他のトランザクションによって、基本となるテーブルに対する問い合わせ、更新、その他のアクションは実行できなくなります。排他テーブル・ロックを取得できない場合、リフレッシュ操作は失敗し、エラーが返されます。テーブル・ロックを参照してください。
SHARE MODE WITH SHARE MODE は、リフレッシュ操作の実行中に、基本となるテーブルを他のトランザクションで読み込めるようにするために使用します。この句を指定すると、リフレッシュ操作が実行される前から、リフレッシュ操作が完了するまで、基本となるすべてのベース・テーブルの共有テーブル・ロックが取得されます。テーブル・ロックを参照してください。
FORCE BUILD 句 デフォルトでは、REFRESH MATERIALIZED VIEW 文を実行すると、データベース・サーバはマテリアライズド・ビューが古い (つまり、マテリアライズド・ビューが最後にリフレッシュされた後、基本となるテーブルが変更されている) かどうかをチェックします。マテリアライズド・ビューが古くない場合、リフレッシュは行われません。FORCE BUILD 句は、マテリアライズド・ビューが古いかどうかに関係なく、強制的にマテリアライズド・ビューをリフレッシュするときに指定します。
この文は、view-list にリストされているマテリアライズド・ビューを初期化またはリフレッシュする場合に使用します。
古くなっていないマテリアライズド・ビューに対して REFRESH MATERIALIZED VIEW 文を実行した場合、FORCE BUILD 句が指定されていないかぎり、リフレッシュは実行されません。
ロックとデータ同時実行性の、デフォルトのリフレッシュ動作は次のとおりです。
ビューが即時ビューの場合、スナップショット・アイソレーションが有効かどうかに関係なく、デフォルトのリフレッシュ動作は WITH SHARE MODE です。
ビューが手動ビューであり、スナップショット・アイソレーションを使用している場合、デフォルトは WITH ISOLATION LEVEL SNAPSHOT です。
ビューが手動ビューであり、スナップショット・アイソレーションを使用していない場合、デフォルトは WITH SHARE MODE です。
独立性レベルと、スナップショット・アイソレーションの有効化の詳細については、独立性レベルと一貫性とallow_snapshot_isolation オプション [データベース]を参照してください。
REFRESH MATERIALIZED VIEW が正常に動作する場合、および、最適化にビューを使用する場合は、いくつかのオプションに特定の値が設定されている必要があります。また、マテリアライズド・ビューを作成するときにマテリアライズド・ビューごとに格納されるオプションの設定があります。ビューをリフレッシュしたり、ビューを最適化に使用したりするには、これらのオプション設定が現在のオプションと一致している必要があります。マテリアライズド・ビューの制限を参照してください。
部分的に処理を行った後にリフレッシュが失敗した場合、ビューは初期化されていない状態のままとなり、リフレッシュ開始前の状態にデータをリストアできません。リフレッシュが失敗したときに発生したエラーを調査して、この失敗の原因となった問題を解決し、REFRESH MATERIALIZED VIEW 文を再実行します。
また、ALTER MATERIALIZED VIEW 文の IMMEDIATE REFRESH 句を使用すると、基本となるデータが変更されたときすぐにビューを変更してリフレッシュできます。ALTER MATERIALIZED VIEW 文を参照してください。
文またはトランザクションのスナップショットを使用する、WITH HOLD 句を使用して開かれたカーソルがある場合、この文は実行できません。スナップショット・アイソレーションを参照してください。
マテリアライズド・ビューには INSERT パーミッションが必要です。マテリアライズド・ビュー定義のテーブルには SELECT パーミッションが必要です。
マテリアライズド・ビューを参照するすべてのオープン・カーソルが閉じられます。
チェックポイントは実行の開始時に実行されます。
実行の開始時と終了時に自動コミットが実行されます。
実行中は、接続の blocking オプションを使用してリフレッシュされるマテリアライズド・ビューに排他スキーマ・ロックがかけれます。また、マテリアライズド・ビューから参照されるすべてのテーブルにブロックなしで共有スキーマ・ロックがかけられます。WITH 句を指定した場合は、基本となるテーブルに追加のロックを取得することがあります。さらに、更新が完了するまでマテリアライズド・ビューは初期化されていない状態にあるため、データベース・サーバまたはオプティマイザから使用できなくなります。
SQL/2003 ベンダ拡張。
EmployeeConfid99 というマテリアライズド・ビューを作成し、データを移植するとします。この処理は、次の文で実行できます。
CREATE MATERIALIZED VIEW EmployeeConfid99 AS SELECT EmployeeID, Employees.DepartmentID, SocialSecurityNumber, Salary, ManagerID, Departments.DepartmentName, Departments.DepartmentHeadID FROM Employees, Departments WHERE Employees.DepartmentID=Departments.DepartmentID; REFRESH MATERIALIZED VIEW EmployeeConfid99; |
後に、ビューが使用されるようになってから、READ COMMITTED 独立性レベル (独立性レベル 1) を使用してビューをリフレッシュし、ビューを再構築するとします。この処理は、次の文で実行できます。
REFRESH MATERIALIZED VIEW EmployeeConfid99 WITH ISOLATION LEVEL READ COMMITTED FORCE BUILD; |
この例を実行し終わったら、作成したマテリアライズド・ビューを削除してください。そうしないと、他の例を試すときに、基本となるテーブル Employees および Departments に対するスキーマ変更ができなくなります。有効化されている従属マテリアライズド・ビューを持つテーブルのスキーマは変更できません。マテリアライズド・ビューの削除を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |