11

他の具体化されたビュー、通常のビュー、およびいくつかのテーブルに基づく非常に複雑な Oracle ビューがあります (「高速更新」できません)。ほとんどの場合、このビューの既存のレコードは日付に基づいており、「安定」しており、新しいレコード セットには新しい日付が含まれています。

時折、私はバックデートを受け取ります。それらが何であるか、およびテーブルを維持している場合の対処方法は知っていますが、これを「ビュー」に保ちたいと思います。完全な更新には約 30 分かかりますが、特定の日付では 25 秒しかかかりません。

マテリアライズド ビューの一部 (影響を受ける日付など) のみを更新するように指定できますか?

ビューを破棄し、テーブルとプロシージャを使用して、そのテーブルの特定の日付を入力または更新する必要がありますか?

4

4 に答える 4

8

回答 3 (skaffman) のように日付で分割します。

通常の mv(table_refreshed以下) の更新を行うだけで、exchange キーワードを使用することができます。

ALTER TABLE all_partitions
  EXCHANGE PARTITION to_calculate
  WITH TABLE table_refreshed
  WITHOUT VALIDATION
  UPDATE GLOBAL INDEXES;
于 2012-10-22T08:29:33.330 に答える
3

この質問に対する答えがないことをさらに読んで判断した後、マテリアライズド・ビューの単一のパーティションを更新することは不可能であるという結論に達しました。

そうでないことを証明する構文例を提供できれば、私は喜んであなたの答えに受け入れられたものをマークします。

将来この質問が役立つと思うかもしれない他の人へ:Oracle 10gでは、パーティション(または任意のmview)を更新するとOracleが発行DELETEされ、その後に。が続くことも知りたいと思うかもしれませんINSERT

これが(私のように)パフォーマンスの問題を引き起こしている場合は、を使用するオプションがatomic_refresh => falseありTRUNCATEますINSERT /*+APPEND*/

于 2010-01-20T19:07:44.453 に答える
2

パーティション変更追跡を使用して、マテリアライズド ビューの 1 つのパーティションを更新できました。

REFRESH FAST WITH ROWIDビューをオプションで作成し、メソッドDBMS_MVIEW.REFRESHで呼び出す必要があるようです。'P'

于 2010-08-04T13:35:29.570 に答える
1

通常のテーブルと同様に、マテリアライズド ビューを分割できます。mview を日付でパーティション分割すると、必要なパーティションのみを更新できます。

于 2009-11-23T14:11:07.830 に答える