マテリアライズド ビューの作成と編集

提供: ER/Studio Data Architect
移動先: 案内検索

データベース固有のオブジェクトの作成と編集 への移動

マテリアライズド ビューを使用すると、データ ウェアハウスや意思決定支援システムのパフォーマンスを大幅に向上させることができます。多数のレコードにアクセスするクエリーの速度が改善され、テラバイト単位のデータに対してわずか数秒でクエリーを完了することが可能になります。マテリアライズド ビューは事前計算されたテーブルです。ファクト テーブル(場合によってはディメンション テーブル)の集計データや結合データで構成されるため、サマリ テーブル、または集計テーブルとも呼びます。このような事前定義クエリーの例として、ある期間における地域別の総売上などがあります。マテリアライズド ビューの事前計算された集計データや結合データは、元のソース データに比べて少ないストレージ領域に保存できます。マテリアライズド ビューでは実テーブルが作成されるため、インデックス作成や分析を実行できます。

マテリアライズド ビューは、次のデータベース プラットフォームでサポートされます。

  • Oracle 8.x、9i、10g、11g、および 12c

Notepad blue icon 2.pngメモ: Oracle マテリアライズド ビュー ウィザードと Oracle マテリアライズド ビュー エディタには同じオプションが表示されます。ただし、[プリ SQL & ポスト SQL]、[アクセス許可]、および[アタッチメントのバインド]オプションはエディタのみに表示されます。

マテリアライズド ビューを作成する

  1. モデル エクスプローラで、物理[メイン モデル]を展開します。[マテリアライズド ビュー]ノードを右クリックして、[マテリアライズド ビューの作成]をクリックします。
  2. Oracle マテリアライズド ビュー ウィザードのステップを完了したら、[完了]をクリックするとマテリアライズド ビューが作成されます。

ヒント: 作成したマテリアライズド ビューを編集するには、マテリアライズド ビューを右クリックして、ショートカット メニューの[マテリアライズド ビューの編集]をクリックします。


[名前]タブ

論理または物理モデルで定義済みのユーザーを、マテリアライズド ビューの所有者に指定できます。

[リフレッシュ]タブ

  • [マテリアライズド ビューのリフレッシュ タイプ]: 作成元のベース テーブルに対してマテリアライズド ビューをシンクロする方法を指定します。使用できるリフレッシュ タイプは、マテリアライズド ビューを定義するクエリーによって決まります。マテリアライズド ビューは常にゼロから再構築できますが、高速リフレッシュを常に実行できるとは限りません。詳細は、「高速リフレッシュの要件」を参照してください。
    • [完全]: ゼロから再構築します。
    • [高速]: 変更点のみを適用します。
    • [強制]: 可能であれば高速リフレッシュを実行します。それ以外の場合は、完全リフレッシュを実行します。
    • [なし]: マテリアライズド ビューを自動リフレッシュしません。
  • [リフレッシュ メカニズム]: マテリアライズド ビューをリフレッシュするタイミングを指定します。
    • [要求時]: 組み込みの Oracle プロシージャを実行して、マテリアライズド ビューをリフレッシュします。たとえば、DBMS_MVIEW.REFRESH(特定のマテリアライズド ビューをリフレッシュする)、DBMS_MVIEW.REFRESH_DEPENDENT(特定のベース テーブルに関連付けられたマテリアライズド ビューをリフレッシュする)、または DBMS_MVIEW.REFRESH_ALL_MVIEWS(すべてのマテリアライズド ビューをリフレッシュする)などのプロシージャを使用できます。
    • [コミット時]: トランザクションのコミット時に、マテリアライズド ビューで参照しているテーブルが更新される場合に、マテリアライズド ビューをリフレッシュします。
    • [自動]: 指定した日時や頻度でマテリアライズド ビューをリフレッシュします。
  • [リフレッシュ方法]: マテリアライズド ビューが主キーに基づいている場合、マテリアライズド ビューで高速リフレッシュが可能であることに影響を与えずに、そのマスター テーブルを再編成できます。この場合、マスター テーブルには主キー制約が含まれている必要があります。マテリアライズド ビューが RowID に基づいて構成されている場合は[RowID]を選択します。これが役立つのは、マスター テーブルの主キー カラムの一部がマテリアライズド ビューに含まれていない場合です。
  • [主キー]: マテリアライズド ビューで可能な高速リフレッシュに影響を与えずに、マテリアライズド ビューのマスター テーブルを再編成できます。マスター テーブルに有効な主キー制約が含まれている場合にのみ、このオプションを選択してください。

[クエリー]タブ

  • 事前定義されたテーブルスペースを一覧から選択するか、またはマテリアライズド ビューを配置するテーブルスペースの名前を指定します。
  • ロールバック セグメントに Default を指定すると、使用するロールバック セグメントは Oracle によって選択されます。DEFAULT 設定は、マテリアライズド ビューを変更する場合に役立ちます。
  • 各マテリアライズド ビューには 1 つのマスタ ロールバック セグメントが保存され、マテリアライズド ビューの作成およびリフレッシュ時に検証されます。複合マテリアライズド ビューの場合、マスタ ロールバック セグメントは無視されます。
  • [マテリアライズド ビューのクエリー]: マテリアライズド ビューのデータ追加やリフレッシュに使用される SQL クエリーを入力します。マテリアライズド ビューを作成するには、正しい SQL を入力する必要があります。

[トランザクション]タブ

  • [初期値]:(INITTRANS)データ ブロックのヘッダに領域があらかじめ確保される DML トランザクションの数を指定します。Oracle では、ブロック内のどの行がコミット済みおよびコミット前の変更点を含んでいるかを示す制御情報をデータ ブロックに格納します。保持される履歴の量は、このパラメータによって制御されます。非常に短い期間に、多数のトランザクションが同時に同じデータ ブロックを変更する場合、Oracle では、ある行が最新のトランザクションで更新されたかどうかを決定するための履歴情報を確保できないことがあります。テーブルに基づいたマテリアライズド ビューに大きな値を指定すると、多数のトランザクションが同じブロックを更新する可能性があります。
  • [最大値]:(MAXTRANSINITRANS によって確保された領域が使い切られると、利用可能な空き領域から追加のトランザクション エントリ用の領域が割り当てられます。この領域は一度割り当てられると、事実上、ブロック ヘッダの永続的なパートになります。このパラメータは、データ ブロック内のデータを同時に使用できるトランザクション エントリの数を制限します。したがって、データ ブロック内のトランザクション エントリに割り当て可能な空き領域も制限することになります。
  • [Percent Free] PCTFREE): 将来の更新のために各データ ブロックに確保する領域の割合の最大値を指定します。この予約領域により、更新処理でデータ行の長さが拡張されることで生じる、行の移行や連鎖を回避できます。更新されないテーブルでは、この値を 0 に設定してください。
  • [Percent Used]PCTUSED): 利用可能なブロック一覧に再追加する前に各データ ブロックで使用できる領域の割合の最大値を指定します。削除操作が発生し、ブロック内の空き領域がこの値を下回ると、そのブロックは新しい挿入操作に利用できるようになります。更新されないマテリアライズド ビューでは、この値を 99 に設定してください。デフォルト値である 40% は、ブロックの使用率が 40% より少なくなった場合に、そのブロックが挿入操作に利用できることを示します。

[エクステント]タブ

  • [Initial Extent]INITEXTENT): Oracle が確保するデータ ブロックの初期数を指定します。Oracle が確保するデータ ブロックの数は、そのテーブル行の Initial Extent に対応します。
  • [Next Extent]NEXT): 次のエクステントのサイズをキロバイト(KB)単位で指定します。この数値は、テーブルスペースの空き領域内の利用可能な最大チャンクと比較して検討する必要があります。テーブルが次のエクステントを割り当てられない場合は、エクステントを拡張できず、データを追加できません。
  • [Percent Increase]PCTINCREASE): 前のエクステントのサイズを基準にして、次のエクステントを拡張する割合を指定します。Percent Increase の設定には注意が必要です。オブジェクトの増加する割合を大きく指定すると、テーブルスペース内の利用可能な空き領域に大きく影響する場合があるためです。
  • [Min Extents]MINEXTENTS): セグメントの作成時に割り当てるエクステントの数を指定します。すべての使用済みエクステントまたは空きエクステントが指定値以上であることを保証して、空き領域の断片化を制御します。
  • [Max Extents]MAXEXTENTS): Oracle がマテリアライズド ビューに割り当て可能なエクステントの最大数を指定します。この制限に達すると、Oracle でそれ以上クラスタは拡張されず、データを追加できません。そのため、この制限に対して、テーブルに既に割り当てられているエクステント数を注意深く監視する必要があります。

[オプション]タブ

  • [事前に作成したテーブルをビューに登録する]: 既存のテーブルを初期化済みマテリアライズド ビューとして登録するかどうかを指定します。このオプションが特に役立つのは、大規模なマテリアライズド ビューをデータ ウェアハウス環境に登録する場合です。
  • [マテリアライズド ビューにすぐにデータを入力する]: マテリアライズド ビューに直ちにデータを表示するか、次回のリフレッシュ操作で表示するかを指定します。
  • [マテリアライズド ビューのデータをキャッシュする]: 完全テーブル スキャンの実行時に、アクセス頻度が高いデータをバッファ キャッシュ内のリストで最も最近使用された側に配置するかを指定します。このオプションは、小規模なルックアップ テーブルで役立ちます。
  • [マテリアライズド ビューでクエリーの書き換えを有効にする]: ステートメント内の式が繰り返し条件の場合に、クエリーの書き換えを有効にします。
  • [パラレル操作で使用するスレッド数]: 作成したマテリアライズド ビューでクエリーや DML を実行する際のデフォルトの並列度を整数で入力します。
  • [マテリアライズド ビューを圧縮する]: データ セグメントを圧縮してディスクとメモリの使用量を節約します。

[定義]タブ

マテリアライズド ビューの定義を入力または編集します。対象データベースでサポートされている場合、SQL コードの生成時に、この定義がマテリアライズド ビューのコメントとして追加されます。

[DDL]タブ

マテリアライズド ビューの作成に使用される CREATE MATERIALIZED VIEW 文が表示されます。モデルで選択されたデータベース プラットフォームに固有のパーサーを使用して、マテリアライズド ビューを生成します。

[プリ SQL & ポスト SQL]タブ

CREATE MATERIALIZED VIEW 文の前後に適用する SQL コードを入力します。ここで入力されたプリ SQL およびポスト SQL スクリプトは、物理データベースを生成する際のスクリプトに組み込まれます。

[アクセス許可]タブ

アクセス ロールおよびユーザーのアクセス許可をマテリアライズド ビューに設定します。アクセス許可を細かく設定するほど、その保守や更新に時間がかかるようになりますので、ご注意ください。マテリアライズド ビュー エディタには、あらかじめ作成済みのロールとユーザーが表示されます。詳細は、「データベース ロールの作成と編集」および「データベース ユーザーの作成と編集」を参照してください。

[アタッチメントのバインド]タブ

アタッチメント(外部情報)をマテリアライズド ビューにバインドします。また、オブジェクトからアタッチメントを削除したり、アタッチメントのバインドのデフォルト値を上書きしたり、バインドされたアタッチメントの位置を変更することもできます。選択したアタッチメントのグリッド(画面の右側)に移動したアタッチメントの値をオーバーライドするには、対象となるアタッチメントの[値]フィールドをダブルクリックします。アタッチメントのデータ型に応じて、[上書き値エディタ]またはリスト ボックスが表示されます。アタッチメントは、[データ ディクショナリ]タブの[アタッチメント]フォルダに作成されます。詳細は、「データ モデルへの外部ドキュメントの関連付け」を参照してください。

高速リフレッシュの要件

マテリアライズド ビューの特徴

高速リフレッシュをサポートするためのマテリアライズド ビューの条件

結合のみ

結合と集計

単一テーブルでの集計

詳細テーブルのみ

X

X

X

単一テーブルのみ

X

テーブルが FROM リストで 1 回だけ出現する

X

X

X

SYSDATEROWNUM などの非繰り返し条件式がない

X

X

X

RAW または LONG RAW への参照がない

X

X

X

GROUP BY がない

X

すべての詳細テーブルの ROWID が、クエリーの SELECT リストに出現する

X

同一の式であれば、GROUP BY 句と SELECT 句で使用できる

X

X

集計できるが、ネストできない

X

X

AVGCOUNT を使用

X

X

SUMCOUNT を使用

X

VARIANCECOUNTSUM を使用

X

X

STDDEVCOUNTSUM を使用

X

X

ORではなくAND複合条件が WHERE 句に含まれている

X

X

WHERE 句がない

X

HAVING または CONNECT BY がない

X

X

X

サブクエリー、インライン ビュー、または UNIONMINUS などの集合演算子がない

X

X

X

COUNT(*) が必ず存在する

X

MIN または MAX が使用できない

X

外部結合の場合、内部結合テーブルの結合カラムにユニーク制約が必ず存在する

X

マテリアライズド ビュー ログが必ず存在し、マテリアライズド ビューで参照されるすべてのカラムが含まれ、LOG NEW VALUES 句を使用して作成されている

X

マテリアライズド ビュー ログが必ず存在し、すべての詳細テーブルの ROWID がある

X

SELECT および GROUP BY で集計式以外はカラムである

X

詳細テーブルに対する DML

X

X

ダイレクト パス データ ロード

X

X

X

コミット時リフレッシュ

X

X

要求時リフレッシュ

X

X

X

関連項目