マテリアライズド・ビュー (MATERIALIZED VIEW)

昔でいうところのスナップショット。

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

create materialized view materialized_view_name
refresh complete on demand
as
select 
  FieldA as OtherTableFieldA,
  FieldB as OtherTableFieldB,
  FieldC as OtherTableFieldC
from OtherTable@ServiceName;

完全リフレッシュ

execute dbms_mview.refresh('materialized_view_name','c');

高速リフレッシュ

execute dbms_mview.refresh('materialized_view_name','f');

前回リフレッシュ日時を取得する。

alter session set nls_date_format = 'YYYYMMDD HH24:MI:SS';
select mview_name, last_refresh_date from user_mviews;

前回のリフレッシュが高速リフレッシュか確認する。

select mview_name, LAST_REFRESH_TYPE from user_mviews;

FAST なら OK!

LAST_REFRESH_TYPE意味
COMPLETE最新のリフレッシュが完了した。
FAST最新のリフレッシュは高速(増分)だった。
NAマテリアライズド・ビューは、まだリフレッシュされていない(たとえば、DEFERREDで作成された場合)。

ORA-01723: zero-length columns are not allowed エラー

もとのテーブルになく、MView に必要なフィールドに NULL を指定すると発生する。

固定文字列や、数値などを指定しエラーを回避する。

(データの型がわからないのだから当然と言えば当然。ただ「データの型が不明です。」というようなもう少しわかりやすいメッセージにしてほしいものだ。)

悪い例

create materialized view materialized_view_name
refresh complete on demand
as
select 
  FieldA as OtherTableFieldA,
  FieldB as OtherTableFieldB,
  NULL as OtherTableFieldC
from OtherTable@ServiceName;

修正例

create materialized view materialized_view_name
refresh complete on demand
as
select 
  FieldA as OtherTableFieldA,
  FieldB as OtherTableFieldB,
  ' ' as OtherTableFieldC
from OtherTable@ServiceName;
選択肢 投票
参考になった 9  
参考にならなかった 2  


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-11-13 (水) 14:49:57 (3824d)