質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

2回答

2739閲覧

マテリアライズド・ビュー リフレッシュ時に元テーブルをupdate

mozzo

総合スコア4

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/07/19 08:51

編集2018/07/19 08:53

初歩的な質問になるかと思いますがご容赦ください。

ORACLE database12cのマテリアライズド・ビューテーブルについて質問がございます。

マテリアライズド・ビューの手動リフレッシュを、
シェル使って定期的に実行しています。

リフレッシュ中のマテビューテーブルの元テーブルを、
たまたまupdateしてしまった場合、
マテビューのリフレッシュに失敗すると問い合わせを受けたのですが、(エラーログ等未取得)
そもそもそういう物なのか?という部分が、あちこちサイトを参照したのですが、
私の頭では答えがわかりませんでした…。

元テーブルをロックしている状態では、
マテビューのログもつかんでしまっている…というようなことなのでしょうか?

情報も少なく心苦しいのですが、ご教授いただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Orlofskyさんのおっしゃる通りOracleは読取一貫性をとても律義に保障します。マテビューのリフレッシュは(文脈からCタイプと判断しますが)drop/truncateとinsert-into-selectの2段階に分かれていて、insert中に更新元テーブルのデータが変更された場合、元テーブルのデータ全量がtemp表領域に退避されます。
ここでtemp表領域が枯渇したりするとエラーが発生して中途半端な状態で処理が終了してしまいます。

また、DBLINK越しにマテビューのリフレッシュを行うと、上記の退避処理がupdateの有無に関わらず行われます。しかも更新元側のDBのtempを使用するので更新元側のリソースが貧弱だと失敗しやすいです。
さらに、大きなテーブルを更新しようとするとSCNが双方のDBで不整合を起こしORA-01555が発生します。

問い合わせのエラーが上記のどれに相当するのかはわかりませんが、うかつにupdateしたり大きなテーブルをマテビューにするのは割とリスキーなことを覚えておいてください。

もうDBLINK先のテーブルにマテビュー張りたくない。。。

投稿2018/08/02 12:14

hope_mucci

総合スコア4447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

マテリアライズド・ビューテーブル

マテリアライズド・ビュー

独自のオブジェクトを発明しないでください。

マテビューのリフレッシュに失敗すると問い合わせを受けたのですが、(エラーログ等未取得)

Oracleはきちんと読取り一貫性を保障しますから、考えにくいです。UPDATEもCOMMITにしないと他のOracle SESSIONからは見えません。
バグの可能性があるかもしれないので、表示されたままのエラーコードやメッセージを載せるか、ググってみては?
サポート契約が有効でしたら、オラクル・サポートに問合せては?

投稿2018/07/19 09:13

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問