忍者ブログ
ブログ
[9] [8] [7] [6] [5] [4]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



データの更新頻度が少ないもしくは更新タイミングが決められている
マスタテーブルなどの参照で、結合等々でレスポンスが出ない場合、
マテリアライズド・ビューが有効だそうな。

用途はビューと同じだが、定期的に更新される上インデックスを
設定できるので、必要なデータだけが入った単一テーブルとして
参照ができる。

作成手順を書いてみた。

1:マテリアライズド・ビューを作成する。
create materialized view ビュー名
refresh force with rowid
as
SELECT 項目名 FROM (スキーマ).参照テーブル
/

2:インデックスを設定する。
  TABLESPACEの設定は環境によって適宜変更する。
CREATE UNIQUE INDEX スキーマ.インデックス名 ON スキーマ.ビュー名 (1, 2・・・)
  TABLESPACE USERS LOGGING PCTFREE 10 INITRANS 2 MAXTRANS 255
    STORAGE(INITIAL 16K NEXT 328K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 50 
      FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT )
/

3:リフレッシュグループの設定する。
  ビューのデータを更新するタイミングをグループ単位で設定できる。
  <<実用最低限の項目の意味と設定値。他は適宜設定>>
  next_date :次回リフレッシュ日付。初回は最初の更新タイミングとなり、以降は勝手に書き換わる。
  interval  :リフレッシュ間隔 この間隔を元にnext_dateは算出されて書き換わる。
<例:2010/02/12の1時開始で1日おきにリフレッシュをしたい場合。>
BEGIN
DBMS_REFRESH.MAKE(
  name => '"リフレッシュグループ名"',
  list => '',
  next_date => to_date('12-02-2010 01:00:00', 'MM-DD-YYYY HH24:MI:SS'),
  interval => '/*1:Day*/ sysdate + 1', 
  implicit_destroy => FALSE,
  lax => FALSE,
  job => 0,
  rollback_seg => NULL,
  push_deferred_rpc => FALSE,
  refresh_after_errors => FALSE,
  purge_option => NULL,
  parallelism => 0);
END;
/

4:マテリアライズド・ビューをリフレッシュグループに追加する。
  複数登録したい場合は対称ビュー分書く
BEGIN
DBMS_REFRESH.ADD(
  name => '"リフレッシュグループ名"',
  list => '"ビュー名"',
  lax => TRUE);
END;

10gの環境なんで他は違う書き方なのか、
大量データはリフレッシュに時間がかかるのかは未検証なので
わかったら更新します。

PR



コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:
カレンダー
08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
Taiga
年齢:
44
性別:
男性
誕生日:
1980/09/02
職業:
SE
趣味:
写真・読書
自己紹介:
自然を愛するフリーのSEです。
バーコード
ブログ内検索
最古記事
P R
カウンター
忍者ブログ [PR]