• ベストアンサー

マテリアライズドビューの更新

1、9iで全部のマテリアライズドビューの更新を行うとき、 DBMS_MVIEW.REFRESH_ALL_MVIEWS() というコマンドを使うことはわかったのですが、 これをどう実装するかがわかりません。 2、テーブル⇒マテリアライズドビュー1⇒マテリアライズドビュー2と参照してデータ作成する時、 上記1の全更新コマンドでも、必ずビュー1を更新してからビュー2を更新するという順序になるのでしょうか。 以上、ご存知のかたがいらしたら教えてください。

  • Oracle
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 以上に設定する必要があります。 以上、ドキュメントより抜粋。 (^^ゞ

yuxing
質問者

お礼

やはり基本はドキュメントを熟読することですね。 ありがとうございました。 それにしても、マテリアライズドビューは使用頻度が少ないみたいですね。 今回、プラチナレベルの知り合いにも当たったけれど、余り知らないみたいでした。。

その他の回答 (1)

回答No.1

こんにちは。 DBMS_MVIEWは、定義しているビューのリフレッシュモードが「on demand」の場合に使用しますよね? つまり、1.の質問については、「必要な時に実行するように実装する」としか言いようがないかと・・・。 (詳しくはOracle9iのアーキテクチャを見てね。ここはOracle8とはだいぶ変わりました・・・) 更新の順序に関しては、マスター表、マスターマテリアライズドビューの依存関係に基づいてリフレッシュされます。 ので、大丈夫だと思いますが・・・。 これはOracleが言ってるだけで、試した事はないので自信ないです・・・。 (個人的にViewは使わないので・・・) 一応ドキュメントで確認してください。 (^^ゞ

yuxing
質問者

補足

回答ありがとうございます。 更新の順序に関しては、ドキュメントでもう一度確認してみます。 「実装の仕方」なのですが、紛らわしい書き方をして誤解を招いてしまいました。すみません。 具体的に言うと、 sqlplusから、execute DBMS_MVIEW.REFRESH_ALL_MVIEWS() を実行するときに、()に何をいれればいいのでしょうか。 いろいろ試したのですが、 エラーになってしまいます。 どうか教えてください。

関連するQ&A

  • [materialized]マテリアライズドビューの作成

    マテリアライズドビューを作成しましたら、 『複合問合せから高速リフレッシュ・マテリアライズド・ビューを作成できません。』とエラーが出てしまいました。 下記の様に、テーブルを作成し、Viewを作成した後、 マテリアライズド・ビューを作成しました。 Viewを作成するところまでは、現在のシステムの都合上、変更する事が出来ません。 ですので、もし、マテリアライズド・ビューを作成する箇所を修正し、 エラーを回避する方法を教えて下さい。 宜しくお願い致します。 ■テーブル1の作成 (1)Create table TEST_TBL1 ( Test1 nchar(6), Test2 nchar(6) ); ■テーブル2の作成 (2)Create table TEST_TBL2 ( Test1 nchar(6), Test2 nchar(6) ); ■ビューの作成 (3)create view TEST_VIEW(ID, TITLE) as select * from TEST_TBL1 union all select * from TEST_TBL2; ■マテリアライズドビューの作成 (4)create materialized view TEST_MVIEW REFRESH FAST ON DEMAND AS SELECT * FROM TEST_VIEW; ご回答の程、宜しくお願い致します。

  • HTMLの画像自動更新について

    現在、 <meta http-equiv="Refresh" content="5">で自動更新をしているのですが、 毎回同じ画像が表示されてしまいます。 F5を押すと画像は更新されます。 キャッシュに問題があるのではと調べて下記のように書きました。 <HTML> <HEAD> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Pragma" content="no-cache"> <meta equiv="Expires" content="-1"> <meta http-equiv="Refresh" content="5;URL=index_i_i.html"> URLの「index_i_i.html」は同じHTMLファイル(名前は変えて)を用意して交互に飛ぶように設定しました。 ですが、上記の記述でも同じ画像が表示されます。 F5では更新されるのですが、F5と同じ更新をHTML内に記述するにはどうしたらよろしいのでしょうか? できれば、CGIやスクリプトは使いたくないのですが、使わなくてはいけないのであれば、教えてください。 お願いします。

    • ベストアンサー
    • HTML
  • MS_SQLでテーブルの更新日を知りたい

    Microsoft SQL Server 7.0 についての質問なのですが、テーブルの更新日を知るにはどうしたら良いでしょうか? Enterprise Manager でテーブルを参照すると、作成日は掲載されてますが更新日は表示されていません。Access2000からADOでSQL Serverに接続し、テーブルの最終更新日を得る方法がありましたら教えて下さい。 どうぞ宜しくお願い致します。

  • [materialized]マテリアライズドビューの検索

    マテリアライズドビューを作成し、selelct文を発行致しましたら、 『"TEST2":無効な識別子です。』とエラーが出てしまいました。 下記の様に、テーブル、View、マテリアライズドビューを作成した後、 select文を作成しました。 View、マテリアライズドビュー、select文のいずれかで間違いが有ると思うのですが、どの様に修正を行えば良いのかが分かりません。 ですのでエラーを回避する方法を教えて頂きたく思っております。 宜しくお願い致します。 ■テーブル1作成 Create table TEST_TBL1 ( Test1 nchar(6), Test2 nchar(6) ); ■テーブル2作成 Create table TEST_TBL2 ( Test1 nchar(6), Test2 nchar(6) ); ■レコード追加 INSERT INTO TEST_TBL1 (Test1, Test2) VALUES (1,1); INSERT INTO TEST_TBL1 (Test1, Test2) VALUES (2,2); INSERT INTO TEST_TBL2 (Test1, Test2) VALUES (3,3); INSERT INTO TEST_TBL2 (Test1, Test2) VALUES (4,4); ■ビュー作成 create view TEST_VIEW as select A.rowid AROWID,A.Test1 ID,A.Test2 TITLE,3 MARKER from TEST_TBL1 A union all select B.rowid AROWID,B.Test1 ID,B.Test2 TITLE,4 MARKER from TEST_TBL2 B; ■ログ作成 create materialized view log on TEST_TBL1 with sequence,rowid (Test1, Test2) including new values; create materialized view log on TEST_TBL2 with sequence,rowid (Test1, Test2) including new values; ■マテビュー作成 create materialized view TEST_MVIEW REFRESH FAST on demand as select * from TEST_VIEW; ■データ抽出 Select TEST1 FROM TEST_MVIEW WHERE TEST2 = '1'; ご回答の程、宜しくお願い致します。

  • 同一レコード更新時の排他制御

    Oracle9iです。 C/S開発で、VB.NETで画面を開発します。 DBの更新は、画面よりストアドプロシージャを使って行います。 複数ユーザが同一レコードを同時に参照し、同一レコードに対して更新された場合、参照時の更新日時と異なる場合はエラーとするよう設計されています。(つまり、後更新はエラー) この排他チェックロジックを画面側で実装しようとしておりますが、この排他チェックロジックを画面側で実装せずに、Oracleよりエラーレコードを受け取ることによる排他制御を行うことはできないでしょうか? ご教授のほどよろしくお願いいたします。 また、参考サイトあれば、その紹介だけでも助かります。

  • MySQLの謎テーブル構成の実現方法

    タイトルが意味不明ですみません 実現したいことはちょっと複雑なのですが 1.表面テーブル(view?)は1つのテーブルであり、そこにSELECTやINSERT、UPDATE、DELETEを発行。 2.裏は更新系テーブルと参照系テーブルに分かれている。 【更新】表系テーブル(view可)に発行した更新系コマンドで更新系テーブルを更新し、トリガー等でリアルタイムに参照系テーブルに反映。 【参照】表系テーブルにたいして発行したSELECT文は参照系テーブルをみる。 条件として入り口を分けることはできません。

  • accessの自動更新処理をできないようにするにはどうすれば良いですか?

    accesで顧客データベースを作成しています。 「顧客リスト」テーブルを作り、そのテーブルを閲覧しやすいように「顧客リスト」フォームを作成しました。 また、フォーム上でデータの修正をした際、その修正内容を保存する為のコマンドボタンを取り付けました。 しかし、現在の状態では、そのコマンドボタンを押さなくても×印をクリックして閉じると自動的にデータの更新内容がテーブルに反映されてしまいます。 データを修正した際、保存用のコマンドボタンを押した場合にのみ、その修正内容がテーブルに反映されるようにするのにはどうしたら良いのでしょうか?? 説明足らずかもしれませんが、ご存知の方教えてください。 ご回答宜しくお願い致します。

  • アクセスでリンクしたエクセルを更新したい

    アクセス2002で、エクセルファイルをリンクしたテーブルを作成しました。 参照はできるのですが、更新、追加、削除ができません。 97の頃は、できたような気がしたのですが、できなくなってしまったのでしょうか。 更新する方法がありましたら、教えてください。 ACCESS 2002 EXCEL 2002 WindowsXP Pro ユーザはアドミニ権限

  • 複数のピボットテーブルを一括でデータ更新したい

    エクセル2000です 50個ぐらいピボットテーブルがありまして 元データはほぼ固まっているのですが 若干の修正をしつつ集計しています。 色々ググってみたのですが やはりピボットテーブルは1個1個「データの更新」を実行しないと 修正が反映されないのでしょうか? 同じピボットテーブルを複製しながら 50個作ればよかったのですが 集計の都合もあり 参照元データ範囲が少しずつ異なっています。 50個もあると、再計算?の待ち時間も長いので なんとか自動で全部を更新できませんか? ご存知のかた、よろしくお願いします。

  • アクセスの更新クエリについて(親子テーブル)

    はじめまして。 アクセスを勉強しはじめて2週間の初心者です。 説明がわかりずらいかもしれませんが、ご容赦ください。 以下のようなテーブルがあります。 ●親テーブル(装置名称と装置番号の組み合わせが主キー) ・装置キー ・装置名称 ・装置番号 ・収容No-1 ・収容No-2 ●子テーブル(主キー設定なし) ・装置キー(親テーブルの装置キーと参照整合:1対多) ・収容No-3 ・最新情報 ●参照テーブル(主キー設定なし) ・収容No-1 ・収容No-2 ・収容No-3 ・最新情報 子テーブルの最新情報フィールドを参照テーブルの最新情報に 更新する更新クエリを作成したいのですが、うまく実行ができ ません。 クエリの作り方の基本がわかっていないと思いますが、私が作 った方法は、 1.上記3つのテーブルをクエリのデザインビューで表示 2.親テーブルと参照テーブルの収容No-1、2を結合 3.子テーブルと参照テーブルの収容No-3を結合 4.クエリの種類を更新クエリに変更 5.テーブルに子テーブル、フィールドに最新情報を設定 6.レコードの更新欄に[参照テーブル]![最新情報]を設定 です。 ビューで確認すると殆どのデータが空白で表示されております。 どのあたりに悪さがあるかをご教授いただけますと助かります。 ご不明な点がありましたら、何なりとお伝えください。 よろしくお願いします。