- ベストアンサー
マテリアライズドビューの更新
1、9iで全部のマテリアライズドビューの更新を行うとき、 DBMS_MVIEW.REFRESH_ALL_MVIEWS() というコマンドを使うことはわかったのですが、 これをどう実装するかがわかりません。 2、テーブル⇒マテリアライズドビュー1⇒マテリアライズドビュー2と参照してデータ作成する時、 上記1の全更新コマンドでも、必ずビュー1を更新してからビュー2を更新するという順序になるのでしょうか。 以上、ご存知のかたがいらしたら教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 DBMS_MVIEW.REFRESH_ALL_MVIEWS()の引数は下記の通りです。 DBMS_MVIEW.REFRESH_ALL_MVIEWS ( number_of_failures OUT BINARY_INTEGER, method IN VARCHAR2 := NULL, rollback_seg IN VARCHAR2 := NULL, refresh_after_errors IN BOOLEAN := false, atomic_refresh IN BOOLEAN := true); number_of_failures 処理中に発生した失敗の件数を戻します。 method リフレッシュされる各マテリアライズド・ビューに対して実行するリフレッシュのタイプを示す単一のリフレッシュ方法。F またはf は高速リフレッシュ、?は強制リフレッシュ、C またはc は完全リフレッシュ、A またはa は常にリフレッシュを示します。A およびC は同等です。方法が指定されていない場合、マテリアライズド・ビューはデフォルトのリフレッシュ方法に従ってリフレッシュされます。 rollback_seg マテリアライズド・ビューのリフレッシュ中に使用する、マテリアライズド・ビュー・サイトのロールバック・セグメント名。 refresh_after_errors このパラメータをTRUE に設定すると、マテリアライズド・ビューのマスター表またはマスター・マテリアライズド・ビューのDEFERRORビューに未解決の競合が記録されていても、更新可能なマテリアライズド・ビューのリフレッシュは続行します。このパラメータがTRUEで、atomic_refresh がFALSE の場合、このプロシージャは、マテリアライズド・ビューのリフレッシュに失敗しても他のマテリアライズド・ビューのリフレッシュを続行します。 atomic_refresh このパラメータをTRUE に設定すると、リフレッシュされたマテリアライズド・ビューは単一のトランザクションでリフレッシュされます。リフレッシュされたすべてのマテリアライズド・ビューは、単一のポイントへ同時に更新されます。マテリアライズド・ビューのいずれかでリフレッシュに失敗すると、すべてのマテリアライズド・ビューが更新されません。このパラメータをFALSE に設定すると、各マテリアライズド・ビューは別のトランザクションでリフレッシュされます。このパラメータがFALSE の場合、ジョブ・キュー・プロセスの数は1 以上に設定する必要があります。 以上、ドキュメントより抜粋。 (^^ゞ
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 DBMS_MVIEWは、定義しているビューのリフレッシュモードが「on demand」の場合に使用しますよね? つまり、1.の質問については、「必要な時に実行するように実装する」としか言いようがないかと・・・。 (詳しくはOracle9iのアーキテクチャを見てね。ここはOracle8とはだいぶ変わりました・・・) 更新の順序に関しては、マスター表、マスターマテリアライズドビューの依存関係に基づいてリフレッシュされます。 ので、大丈夫だと思いますが・・・。 これはOracleが言ってるだけで、試した事はないので自信ないです・・・。 (個人的にViewは使わないので・・・) 一応ドキュメントで確認してください。 (^^ゞ
補足
回答ありがとうございます。 更新の順序に関しては、ドキュメントでもう一度確認してみます。 「実装の仕方」なのですが、紛らわしい書き方をして誤解を招いてしまいました。すみません。 具体的に言うと、 sqlplusから、execute DBMS_MVIEW.REFRESH_ALL_MVIEWS() を実行するときに、()に何をいれればいいのでしょうか。 いろいろ試したのですが、 エラーになってしまいます。 どうか教えてください。
お礼
やはり基本はドキュメントを熟読することですね。 ありがとうございました。 それにしても、マテリアライズドビューは使用頻度が少ないみたいですね。 今回、プラチナレベルの知り合いにも当たったけれど、余り知らないみたいでした。。