58 読取り専用マテリアライズド・ビューの概要
読取り専用マテリアライズド・ビューに関連する概念を理解します。
- レプリケーション・データベース
レプリケーションとは、分散データベース・システムを構成する複数のデータベースのデータベース・オブジェクト(表など)をコピーおよびメンテナンスするプロセスです。レプリケーションをサポートする1つの方法は、読取り専用マテリアライズド・ビューです。 - 読取り専用マテリアライズド・ビュー
読取り専用マテリアライズド・ビューには、ある一時点におけるターゲット・マスター表の全体または一部のコピーが含まれています。部分的コピーには、行のサブセット、列のサブセット、あるいはその両方が含まれる場合があります。 - マテリアライズド・ビューの使用
マテリアライズド・ビューは、ネットワーク負荷の軽減、データのサブセット化やモバイル・コンピューティングなどの目標を達成するために使用できます。 - 使用可能なマテリアライズド・ビュー
使用可能なマテリアライズド・ビューには、主キーマテリアライズド・ビュー、オブジェクト・マテリアライズド・ビュー、ROWID
マテリアライズド・ビューおよび複合マテリアライズド・ビューがあります。 - マテリアライズド・ビュー関連のユーザーおよび権限
マテリアライズド・ビューに関連するユーザーには、作成者、リフレッシャおよび所有者があります。マテリアライズド・ビューでの操作を実行するために必要な権限は、操作を実行するユーザーのタイプに応じて異なります。 - マテリアライズド・ビューを使用したデータのサブセット化
マスター表内のデータのサブセットを反映するマテリアライズド・ビューを構成するために、行のサブセットおよび列のサブセットを使用できます。 - マテリアライズド・ビューのリフレッシュ
マテリアライズド・ビューとマスター表との一貫性を確保するには、マテリアライズド・ビューを定期的にリフレッシュする必要があります。 - リフレッシュ・グループ
マテリアライズド・ビュー間のトランザクションの一貫性を保つことが重要なときは、マテリアライズド・ビューをリフレッシュ・グループに編成できます。 - マテリアライズド・ビュー・ログ
マテリアライズド・ビュー・ログは、マテリアライズド・ビューのマスター表が含まれているデータベースの表です。マスター表へのすべてのDML変更が記録されます。 - マテリアライズド・ビューおよびユーザー定義のデータ型
ユーザー定義データ型を含むマテリアライズド・ビューには、特別な考慮事項があります。 - マスター・データベースでのマテリアライズド・ビューの登録
マスター・データベースでは、マスター表に基づいてマテリアライズド・ビューの情報がOracleデータベースにより自動的に登録されます。
親トピック: 読取り専用マテリアライズド・ビューの管理
58.1 レプリケーション・データベース
レプリケーションとは、分散データベース・システムを構成する複数のデータベースのデータベース・オブジェクト(表など)をコピーおよびメンテナンスするプロセスです。レプリケーションをサポートする1つの方法は、読取り専用マテリアライズド・ビューです。
レプリケーション環境では、マスター・データベースおよびマテリアライズド・ビュー・データベースの2つの基本的なデータベース・タイプがサポートされます。マテリアライズド・ビュー・データベースには、ある一時点における表データのイメージ、すなわちマテリアライズド・ビューが含まれています。マテリアライズド・ビューが定義されている表は、マテリアライズド・ビューのマスター表です。通常、マテリアライズド・ビューは、マスター表と同期するために定期的にリフレッシュされます。
マテリアライズド・ビューはリフレッシュ・グループに編成できます。リフレッシュ・グループ内のすべてのマテリアライズド・ビューのデータが同じ時点でのトランザクションの一貫性に対応できるように、リフレッシュ・グループ内のマテリアライズド・ビューは、同時にリフレッシュされます。
注意:
Oracle GoldenGateは、レプリケーションのためのフル機能を備えたOracleのソリューションです。詳細は、Oracle GoldenGateのドキュメントを参照してください。親トピック: 読取り専用マテリアライズド・ビューの概念
58.2 読取り専用マテリアライズド・ビュー
読取り専用マテリアライズド・ビューには、ある一時点におけるターゲット・マスター表の全体または一部のコピーが含まれています。部分的コピーには、行のサブセット、列のサブセット、あるいはその両方が含まれる場合があります。
読取り専用マテリアライズド・ビューは、マスター表のデータへの読取り専用アクセスを提供します。ネットワークの可用性にかかわらず、アプリケーションは読取り専用マテリアライズド・ビューにデータを問い合せて、マスター・データベースへのネットワーク・アクセスを回避できます。ただし、アプリケーションでデータ操作言語(DML)による変更を実行する場合は、全システムのアプリケーションはマスター・データベースのデータにアクセスする必要があります。図58-1は、基本的な読取り専用レプリケーションを示しています。
マテリアライズド・ビューには、次の利点があります。
-
ローカル・アクセスが可能なため、応答時間を短縮し、可用性を向上できます。
-
マテリアライズド・ビューがそのソースとは異なるデータベース内にある場合、ユーザーはローカルのマテリアライズド・ビューへの問合せができるので、マスター・データベースを問合せの負荷から開放します
-
ターゲット・マスターのデータ・セットのうち、選択したサブセットのみをレプリケート可能にすることにより、データ・セキュリティを高めることができます。
ユーザーは必要に応じて読取り専用マテリアライズド・ビューを同期(リフレッシュ)できます。ユーザーはマテリアライズド・ビューをリフレッシュするとき、最後のリフレッシュ以降にマスター表で発生した変更を受け取ります。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.3 マテリアライズド・ビューの使用
マテリアライズド・ビューは、ネットワーク負荷の軽減、データのサブセット化やモバイル・コンピューティングなどの目標を達成するために使用できます。
- ネットワーク負荷の軽減
ネットワーク負荷の軽減が目的の1つである場合は、マテリアライズド・ビューを使用することによって、地域のデータベースに企業データベースを分布させることができます。 - データ・サブセッティングを可能にする
マテリアライズド・ビューでは、列および行レベルのサブセッティングに基づいてデータをレプリケートできます。 - モバイル・コンピューティングを可能にする
マテリアライズド・ビューは、専用のネットワーク接続を必要としません。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.3.1 ネットワーク負荷の軽減
ネットワーク負荷の軽減が目的の1つである場合は、マテリアライズド・ビューを使用することによって、地域のデータベースに企業データベースを分布させることができます。
会社全体で1つのデータベース・サーバーにアクセスするのではなく、ユーザーの負荷を複数のデータベース・サーバーに分散します。レプリケートするデータ量を減らすために、マテリアライズド・ビューをマスター表のサブセットにすることができます。
親トピック: マテリアライズド・ビューの使用
58.3.2 データ・サブセッティングを可能にする
マテリアライズド・ビューでは、列および行レベルのサブセッティングに基づいてデータをレプリケートできます。
データのサブセット化により、特定のデータベースに関する情報のみをレプリケートできるようになります。たとえば、各地の営業所ではその地域に必要なデータのみをレプリケートし、不要なネットワークの通信量を減らすことができます。
行および列の両方のサブセットによって、マスター表のデータの一部を含むマテリアライズド・ビューを作成できます。行のサブセットでは、WHERE
句を使用して、マスター内の必要な行のみをマテリアライズド・ビューに含めることができます。列のサブセットでは、マスター内の必要な列のみをマテリアライズド・ビューに含めることができます。マテリアライズド・ビューを作成する際に、SELECT
文で特定の列を指定してこれらを実行します。
親トピック: マテリアライズド・ビューの使用
58.3.3 モバイル・コンピューティングを可能にする
マテリアライズド・ビューは専用のネットワーク接続を必要としません。
ジョブをスケジュールしてリフレッシュ処理を自動化するオプションもありますが、必要に応じて手動でリフレッシュできるマテリアライズド・ビューは、ラップトップ・コンピュータ上で実行される問合せのための理想的なソリューションです。
親トピック: マテリアライズド・ビューの使用
58.4 使用可能なマテリアライズド・ビュー
使用可能なマテリアライズド・ビューには、主キーマテリアライズド・ビュー、オブジェクト・マテリアライズド・ビュー、ROWID
マテリアライズド・ビューおよび複合マテリアライズド・ビューがあります。
- 使用可能なマテリアライズド・ビューについて
Oracleでは、多数の異なるレプリケーション(および非レプリケーション)状況のニーズを満たすために、いくつかのタイプの読取り専用マテリアライズド・ビューを提供しています。 - 主キー・マテリアライズド・ビュー
主キー・マテリアライズド・ビューがマテリアライズド・ビューのデフォルト・タイプです。 - オブジェクト・マテリアライズド・ビュー
マテリアライズド・ビューがオブジェクト表に基づいてOF
type句を使用して作成されている場合、このマテリアライズド・ビューはオブジェクト・マテリアライズド・ビューと呼ばれます。 - ROWIDマテリアライズド・ビュー
ROWID
マテリアライズド・ビューは、マスター表の行の物理的な行ID (ROWID)に基づいています。 - 複合マテリアライズド・ビュー
複合マテリアライズド・ビューは、高速リフレッシュできません。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.4.1 使用可能なマテリアライズド・ビューについて
Oracleでは、多数の異なるレプリケーション(および非レプリケーション)状況のニーズを満たすために、いくつかのタイプの読取り専用マテリアライズド・ビューを提供しています。
どのタイプのマテリアライズド・ビューを作成する場合でも、マテリアライズド・ビューの問合せで表所有者のスキーマ名を指定します。たとえば、次のCREATE
MATERIALIZED
VIEW
文について考えます。
CREATE MATERIALIZED VIEW hr.employees AS SELECT * FROM hr.employees@orc1.example.com;
この文では、問合せにスキーマhr
が指定されています。
親トピック: 使用可能なマテリアライズド・ビュー
58.4.2 主キー・マテリアライズド・ビュー
主キー・マテリアライズド・ビューがマテリアライズド・ビューのデフォルト・タイプです。
主キー・マテリアライズド・ビューを作成するためのSQL文の例を次に示します。
CREATE MATERIALIZED VIEW oe.customers WITH PRIMARY KEY AS SELECT * FROM oe.customers@orc1.example.com;
主キー・マテリアライズド・ビューがデフォルトであるため、次の文の結果も主キー・マテリアライズド・ビューになります。
CREATE MATERIALIZED VIEW oe.customers AS SELECT * FROM oe.customers@orc1.example.com;
リモート・マテリアライズド・ビュー・データベースで行のサブセットを作成できるように、主キー・マテリアライズド・ビューに副問合せを含めることができます。副問合せは主問合せに埋め込まれた問合せで、CREATE
MATERIALIZED
VIEW
文に複数のSELECT
文が使用されます。この副問合せには、基本的なWHERE
句のように単純なものと、マルチレベルのWHERE
EXISTS
句のように複雑なものとがあります。参照される各マスターにマテリアライズド・ビュー・ログがある場合は、選択されたクラスの副問合せを含む主キー・マテリアライズド・ビュー・サイトに高速リフレッシュを実行できます。高速リフレッシュでは、マテリアライズド・ビュー・ログを使用して、最後のリフレッシュ以降に変更が加えられた行のみを更新します。
次のマテリアライズド・ビューは、副問合せを含むWHERE
句を使用して作成されています。
CREATE MATERIALIZED VIEW oe.orders REFRESH FAST AS SELECT * FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT * FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.credit_limit > 10000);
このタイプのマテリアライズド・ビューは、副問合せマテリアライズド・ビューと呼ばれます。
注意:
このoe.orders
マテリアライズド・ビューを作成するには、マスター表のマテリアライズド・ビュー・ログにcredit_limit
がログされている必要があります。詳細は、「マテリアライズド・ビュー・ログへの列のロギング」を参照してください。
関連項目:
-
副問合せを含むマテリアライズド・ビューの詳細は、「副問合せを含むマテリアライズド・ビュー」
-
高速リフレッシュの詳細は、「リフレッシュ・タイプ」
-
マテリアライズド・ビュー・ログの詳細は、「マテリアライズド・ビュー・ログ」
-
副問合せの詳細は、『Oracle Database SQL言語リファレンス』
親トピック: 使用可能なマテリアライズド・ビュー
58.4.3 オブジェクト・マテリアライズド・ビュー
マテリアライズド・ビューがオブジェクト表に基づいてOF
type句を使用して作成されている場合、このマテリアライズド・ビューはオブジェクト・マテリアライズド・ビューと呼ばれます。
オブジェクト・マテリアライズド・ビューは、オブジェクト表と同じ構造です。つまり、オブジェクト・マテリアライズド・ビューは行オブジェクトから構成され、各行オブジェクトはオブジェクト識別子(OID)列により識別されます。
関連項目:
-
オブジェクト・マテリアライズド・ビューを作成する例は、「読取り専用マテリアライズド・ビューの作成」
親トピック: 使用可能なマテリアライズド・ビュー
58.4.4 ROWIDマテリアライズド・ビュー
ROWID
マテリアライズド・ビューは、マスター表の行の物理的な行ID(ROWID)に基づいています。
ROWID
マテリアライズド・ビューを使用するのは、主キーを持たないマスター表に基づくマテリアライズド・ビュー、またはマスター表の一部の主キー列を含むマテリアライズド・ビューの場合です。
ROWID
マテリアライズド・ビューを作成するCREATE
MATERIALIZED
VIEW
文の例を次に示します。
CREATE MATERIALIZED VIEW oe.orders REFRESH WITH ROWID AS SELECT * FROM oe.orders@orc1.example.com;
関連項目:
-
ROWID
マテリアライズド・ビューと主キー・マテリアライズド・ビューの相違点の詳細は、「マテリアライズド・ビュー・ログ」 -
CREATE
MATERIALIZED
VIEW
文のWITH
ROWID
句の詳細は、『Oracle Database SQL言語リファレンス』
親トピック: 使用可能なマテリアライズド・ビュー
58.4.5 複合マテリアライズド・ビュー
複合マテリアライズド・ビューは、高速リフレッシュできません。
- 複合マテリアライズド・ビューについて
高速リフレッシュを実行するには、マテリアライズド・ビューの定義問合せで一定の制限事項を守る必要があります。 - 単純マテリアライズド・ビューと複合マテリアライズド・ビューの比較
特定のアプリケーションでは、複合マテリアライズド・ビューの使用を検討する必要があります。
親トピック: 使用可能なマテリアライズド・ビュー
58.4.5.1 複合マテリアライズド・ビューについて
高速リフレッシュを実行するには、マテリアライズド・ビューの定義問合せで一定の制限事項を守る必要があります。
マテリアライズド・ビューの定義問合せが汎用的なものであり、制限事項を守ることができない場合は、そのマテリアライズド・ビューは複合マテリアライズド・ビューであり、高速リフレッシュを実行できません。
具体的には、マテリアライズド・ビューの定義問合せに次のいずれかが含まれる場合、そのマテリアライズド・ビューは複合マテリアライズド・ビューとみなされます。
-
CONNECT
BY
句たとえば、次の文では複合マテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW hr.emp_hierarchy AS SELECT LPAD(' ', 4*(LEVEL-1))||email USERNAME FROM hr.employees@orc1.example.com START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id;
-
INTERSECT
、MINUS
またはUNION
ALL
集合演算たとえば、次の文には
UNION
ALL
集合演算が含まれているため、複合マテリアライズド・ビューが作成されます。CREATE MATERIALIZED VIEW hr.mview_employees AS SELECT employees.employee_id, employees.email FROM hr.employees@orc1.example.com UNION ALL SELECT new_employees.employee_id, new_employees.email FROM hr.new_employees@orc1.example.com;
-
DISTINCT
またはUNIQUE
キーワードたとえば、次の文では複合マテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW hr.employee_depts AS SELECT DISTINCT department_id FROM hr.employees@orc1.example.com ORDER BY department_id;
-
集計関数(場合による)。集計関数を定義問合せに指定して、単純マテリアライズド・ビューを作成することもできます。
たとえば、次の文では複合マテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW hr.average_sal AS SELECT AVG(salary) "Average" FROM hr.employees@orc1.example.com;
-
副問合せ以外で指定される結合(場合による)。結合を定義問合せに指定して、単純マテリアライズド・ビューを作成することもできます。
たとえば、次の文では複合マテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW hr.emp_join_dep AS SELECT last_name FROM hr.employees@orc1.example.com e, hr.departments@orc1.example.com d WHERE e.department_id = d.department_id;
-
UNION
演算子(場合による)。具体的には、次の条件のいずれかが満たされた場合に、
UNION
演算子を指定したマテリアライズド・ビューは複合マテリアライズド・ビューになります。-
UNION
内の問合せが複合問合せの場合。ここまでの箇条書きの項目は、問合せによりマテリアライズド・ビューが複合マテリアライズド・ビューになる場合を示します。 -
最も外側の
SELECT
リスト列が、UNION
内の問合せに一致しない場合。次の例で、最初の問合せの最も外側のSELECT
リストにはorder_total
のみが含まれ、2番目の問合せの最も外側のSELECT
リストにはcustomer_id
が含まれています。したがって、マテリアライズド・ビューは複合マテリアライズド・ビューです。CREATE MATERIALIZED VIEW oe.orders AS SELECT order_total FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT cust_first_name, cust_last_name FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.credit_limit > 50) UNION SELECT customer_id FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT cust_first_name, cust_last_name FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.account_mgr_id = 30);
最も内側の
SELECT
リストは、マテリアライズド・ビューが複合マテリアライズド・ビューであるかどうかには関係しません。この例では、UNION
内の両方の問合せで、最も内側のSELECT
リストはcust_first_name
とcust_last_name
です。
-
-
「副問合せを使用するマテリアライズド・ビューでの制限事項」で説明されている要件に適合しない句
注意:
複合マテリアライズド・ビューは高速リフレッシュできないので、パフォーマンスが低下する可能性があるため、可能な場合は、使用を避けてください。
関連項目:
-
集計関数と結合を含むマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』
-
CONNECT
BY
句、集合演算、DISTINCT
キーワードおよび集計関数の詳細は、『Oracle Database SQL言語リファレンス』
親トピック: 複合マテリアライズド・ビュー
58.4.5.2 単純マテリアライズド・ビューと複合マテリアライズド・ビューの比較
アプリケーションによっては、複合マテリアライズド・ビューの使用を考慮することが必要な場合があります。
図58-2とその後に続く本文では、考慮の必要な場合について説明します。
-
複合マテリアライズド・ビュー: 図58-2の方法Aは、複合マテリアライズド・ビューを示しています。データベースII内のマテリアライズド・ビューでは、マテリアライズド・ビューのリフレッシュ中に結合操作が完了しているので、非常に効率的に問合せが行われます。ただし、複合マテリアライズド・ビューであるため完全リフレッシュを実行する必要があり、多くの場合、完全リフレッシュは、高速リフレッシュに比べ実行速度が遅くなります。
-
結合ビューを含む単純マテリアライズド・ビュー: 図58-2の方法Bは、データベースII内の2つの単純マテリアライズド・ビューと、マテリアライズド・ビューのデータベース内で結合を実行するビューを示しています。ビューに対する問合せのパフォーマンスは、方法Aの複合マテリアライズド・ビューに対する問合せのパフォーマンスに比べよくありません。ただし、単純マテリアライズド・ビューの方が、高速リフレッシュとマテリアライズド・ビュー・ログを使用してより高速にリフレッシュできます。
要約すると、使用する方法は次のようにして判断できます。
-
リフレッシュを実行する頻度が少なく、より高速な問合せのパフォーマンスを優先する場合は、方法A(複合マテリアライズド・ビュー)を使用します。
-
頻繁にリフレッシュを実行し、問合せのパフォーマンスを優先する必要がない場合は、方法B(単純マテリアライズド・ビュー)を使用します。
親トピック: 複合マテリアライズド・ビュー
58.5 マテリアライズド・ビュー関連のユーザーおよび権限
マテリアライズド・ビューに関連するユーザーには、作成者、リフレッシャおよび所有者があります。マテリアライズド・ビューでの操作を実行するために必要な権限は、操作を実行するユーザーのタイプに応じて異なります。
- マテリアライズド・ビューの操作に必要な権限
3つの異なるタイプのユーザーがマテリアライズド・ビューの操作を実行します。 - 作成者が所有者である場合
マテリアライズド・ビューの作成者がそのマテリアライズド・ビューを所有している場合、このユーザーはマテリアライズド・ビューを作成するために必要な権限を持つ必要があります。 - 作成者が所有者でない場合
マテリアライズド・ビューの作成者が所有者でない場合は、マテリアライズド・ビューを作成するために作成者と所有者に特定の権限を付与する必要があります。 - リフレッシャが所有者である場合
マテリアライズド・ビューのリフレッシャがそのマテリアライズド・ビューを所有している場合、このユーザーはマテリアライズド・ビューを作成するために必要な権限を持つ必要があります。 - リフレッシャが所有者でない場合
マテリアライズド・ビューのリフレッシャが所有者でない場合は、リフレッシャと所有者に特定の権限を付与する必要があります。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.5.1 マテリアライズド・ビューの操作に必要な権限
3つの異なるタイプのユーザーがマテリアライズド・ビューの操作を実行します。
これらのユーザーは、次のとおりです。
-
作成者: マテリアライズド・ビューを作成するユーザー。
-
リフレッシャ: マテリアライズド・ビューをリフレッシュするユーザー。
-
所有者: マテリアライズド・ビューを所有するユーザー。マテリアライズド・ビューはこのユーザーのスキーマに常駐します。
1人のユーザーが特定のマテリアライズド・ビューに対してこのすべての操作を実行できます。ただし、レプリケーション環境によっては、特定のマテリアライズド・ビューに対して別々のユーザーがこの操作を実行します。これらの操作の実行に必要な権限は、1人のユーザーが操作を実行するか別々のユーザーが実行するかにより異なります。
マテリアライズド・ビュー・データベースのマテリアライズド・ビューの所有者にマスター・データベースへのプライベート・データベース・リンクがある場合、データベース・リンクはマスター・データベースのマスター表の所有者に接続します。それ以外の場合は、データベース・リンク経由の接続に関する通常の規則が適用されます。
注意:
以降の項では、クエリー・リライトが使用可能なマテリアライズド・ビューの作成に必要な要件については説明されていません。詳細は、『Oracle Database SQL言語リファレンス』 を参照してください。
関連項目:
以降の項ではデータベース・リンクについて説明しています。データベース・リンクの使用の詳細は、「分散データベースの概念」を参照してください。
親トピック: マテリアライズド・ビュー関連のユーザーおよび権限
58.5.2 作成者が所有者である場合
マテリアライズド・ビューの作成者がそのマテリアライズド・ビューを所有している場合、このユーザーはマテリアライズド・ビューを作成するために必要な権限を持つ必要があります。
次の権限は、ロールを介してではなく、明示的に付与する必要があります。
-
CREATE
MATERIALIZED
VIEW
またはCREATE
ANY
MATERIALIZED
VIEW
-
CREATE
TABLE
またはCREATE
ANY
TABLE
-
マスター表およびマスター表のマテリアライズド・ビュー・ログに対する
READ
またはSELECT
オブジェクト権限、またはREAD
ANY
TABLE
またはSELECT
ANY
TABLE
システム権限マスター・データベースがリモートの場合は、マテリアライズド・ビュー・データベースのユーザーがデータベース・リンクを介して接続するマスター・データベースのユーザーに、
READ
またはSELECT
オブジェクト権限を付与する必要があります。
親トピック: マテリアライズド・ビュー関連のユーザーおよび権限
58.5.3 作成者が所有者でない場合
マテリアライズド・ビューの作成者が所有者でない場合は、マテリアライズド・ビューを作成するために作成者と所有者に特定の権限を付与する必要があります。
作成者の権限と所有者の権限は、いずれもロールを介してではなく、明示的に付与する必要があります。
表58-1は、マテリアライズド・ビューの作成者が所有者でない場合に必要な権限を示します。
表58-1 マテリアライズド・ビューの作成に必要な権限(作成者が所有者でない場合)
作成者 | 所有者 |
---|---|
|
マスター表およびマスター表のマテリアライズド・ビュー・ログに対する マスター・データベースがリモートの場合は、マテリアライズド・ビュー・データベースのユーザーがデータベース・リンクを介して接続するマスター・データベースのユーザーに、 |
親トピック: マテリアライズド・ビュー関連のユーザーおよび権限
58.5.4 リフレッシャが所有者である場合
マテリアライズド・ビューのリフレッシャがマテリアライズド・ビューを所有している場合、このユーザーはマテリアライズド・ビューを作成するために必要な権限を持つ必要があります。
具体的には、このユーザーは、マスター表およびマスター表のマテリアライズド・ビュー・ログに対するREAD
またはSELECT
オブジェクト権限、またはREAD
ANY
TABLE
またはSELECT
ANY
TABLE
システム権限を持つ必要があります。マスター・データベースがリモートの場合は、マテリアライズド・ビュー・データベースのユーザーがデータベース・リンクを介して接続するマスター・データベースのユーザーに、READ
またはSELECT
オブジェクト権限を付与する必要があります。この権限は、明示的にまたはロールを介して付与できます。
親トピック: マテリアライズド・ビュー関連のユーザーおよび権限
58.5.5 リフレッシャが所有者でない場合
マテリアライズド・ビューのリフレッシャが所有者でない場合は、リフレッシャと所有者に権限を付与する必要があります。
これらの権限は、明示的にまたはロールを介して付与できます。
表58-2は、マテリアライズド・ビューのリフレッシャが所有者でない場合に必要な権限を示します。
表58-2 マテリアライズド・ビューのリフレッシュに必要な権限(リフレッシャが所有者でない場合)
リフレッシャ | 所有者 |
---|---|
|
マスター・データベースがローカルの場合、マスター表およびマスター表のマテリアライズド・ビュー・ログに対する マスター・データベースがリモートの場合は、マテリアライズド・ビュー・データベースのユーザーがデータベース・リンクを介して接続するマスター・データベースのユーザーに、 |
親トピック: マテリアライズド・ビュー関連のユーザーおよび権限
58.6 マテリアライズド・ビューを使用したデータのサブセット化
マスター表内のデータのサブセットを反映するマテリアライズド・ビューを構成するために、行のサブセットおよび列のサブセットを使用できます。
- マテリアライズド・ビューを使用したデータのサブセット化について
特定の状況では、マスター表のデータのサブセットをマテリアライズド・ビューに反映することができます。 - 副問合せを使用するマテリアライズド・ビュー
複数の表の情報に基づいてデータをレプリケートする場合、それらのマテリアライズド・ビューのメンテナンスおよび定義は困難である可能性があります。 - 副問合せを使用するマテリアライズド・ビューでの制限事項
副問合せを使用するマテリアライズド・ビューの定義問合せには、マテリアライズド・ビューの高速リフレッシュ機能を保つためのいくつかの制限事項があります。 - 副問合せを含むUNIONを使用するマテリアライズド・ビューでの制限事項
副問合せを含むUNIONを使用する高速リフレッシュのマテリアライズド・ビューには、制限事項があります。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.6.1 マテリアライズド・ビューを使用したデータのサブセット化について
特定の状況では、マスター表のデータのサブセットをマテリアライズド・ビューに反映することができます。
行のサブセット化では、WHERE
句を使用して、マスター表の必要な行のみをマテリアライズド・ビューに含めることができます。列のサブセット化では、マスター表の必要な列のみをマテリアライズド・ビューに含めることができます。これを行うには、マテリアライズド・ビューの作成中にSELECT
文でいくつかのSELECT列を指定します。
データのサブセット化の使用目的には、次のようなものがあります。
-
ネットワークの通信量の軽減: 列のサブセットを含むマテリアライズド・ビューでは、マテリアライズド・ビューの定義問合せの
WHERE
句を満たす変更のみがマテリアライズド・ビュー・データベースに適用されるため、転送データ量が減少し、ネットワーク通信量が軽減されます。 -
機密データの保護: マテリアライズド・ビューの定義問合せを満たすデータ以外は表示できません。
-
リソース要件の削減: マテリアライズド・ビューがラップトップに格納される場合は、一般にハード・ディスクは会社のサーバーよりもはるかに小さくなります。サブセット化したマテリアライズド・ビューにより、使用する記憶領域をかなり小さくすることができます。
-
リフレッシュ時間の改善: マテリアライズド・ビューに適用されるデータが少量であるため、リフレッシュ処理が高速になり、これはラップトップからネットワーク接続を使用してマテリアライズド・ビューをリフレッシュする必要のあるユーザーにとって重要なことです。
たとえば、次の文では、oe.orders@orc1.example.com
マスター表に基づいたマテリアライズド・ビューが作成され、sales_rep_id
番号が173
の営業担当員の行のみが含まれます。
CREATE MATERIALIZED VIEW oe.orders REFRESH FAST AS SELECT * FROM oe.orders@orc1.example.com WHERE sales_rep_id = 173;
受注表でsales_rep_id
番号が173
以外の行は、このマテリアライズド・ビューからは除外されます。
親トピック: マテリアライズド・ビューを使用したデータのサブセット化
58.6.2 副問合せを使用するマテリアライズド・ビュー
複数の表の情報に基づいてデータをレプリケートする場合、それらのマテリアライズド・ビューのメンテナンスおよび定義は困難である可能性があります。
- 多対1副問合せ
多対1の関係を持つ副問合せを含むマテリアライズド・ビューを作成できます。 - 1対多副問合せ
1対多の関係を持つ副問合せを含むマテリアライズド・ビューを作成できます。 - 多対多副問合せ
多対多の関係を持つ副問合せを含むマテリアライズド・ビューを作成できます。 - 副問合せおよびUNIONを使用するマテリアライズド・ビュー
副問合せおよびUNIONを含むマテリアライズド・ビューを作成できます。
親トピック: マテリアライズド・ビューを使用したデータのサブセット化
58.6.2.1 多対1副問合せ
多対1の関係を持つ副問合せを含むマテリアライズド・ビューを作成できます。
oe
スキーマにcustomers
表とorders
表が含まれている場合に、orders
表とcustomers
表の両方のデータに基づいたorders
表のマテリアライズド・ビューを作成するとします。たとえば、営業担当員が、信用限度額が$10,000を超える顧客の注文をすべて調べる必要があるとします。この場合、orders
マテリアライズド・ビューを作成するCREATE
MATERIALIZED
VIEW
文には、多対1関係の副問合せが含まれますが、これは、それぞれの顧客が多数の注文をしている可能性があるためです。
図58-3では、customers
表とorders
表はcustomer_id
列を介して関係していることが示されています。営業担当員の目的は、次の文で達成されます。つまり、次の文では、信用限度額が$10,000より大きい顧客の注文が含まれたマテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW oe.orders REFRESH FAST AS SELECT * FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT * FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.credit_limit > 10000);
注意:
このoe.orders
マテリアライズド・ビューを作成するには、マスター表のマテリアライズド・ビュー・ログにcredit_limit
がログされている必要があります。詳細は、「マテリアライズド・ビュー・ログへの列のロギング」を参照してください。
この文により作成されるマテリアライズド・ビューは、高速リフレッシュが可能です。信用限度額が10,000ドルを超える新規顧客が発生した場合は、後続のリフレッシュ処理中に新規データがこのマテリアライズド・ビュー・データベースに伝播されます。同様に、顧客の信用限度額が$10,000以下になった場合は、後続のリフレッシュ処理中に、その顧客のデータがこのマテリアライズド・ビューから削除されます。
親トピック: 副問合せを使用するマテリアライズド・ビュー
58.6.2.2 1対多副問合せ
1対多の関係を持つ副問合せを含むマテリアライズド・ビューを作成できます。
oe
スキーマにcustomers
表とorders
表が含まれている場合に、customers
表とorders
表の両方のデータに基づいたcustomers
表のマテリアライズド・ビューを作成するとします。たとえば、営業担当員が、注文合計額が20,000ドルを超える注文を持つすべての顧客を調べる必要があるとします。この場合は、マテリアライズド・ビューの定義問合せに1対多の副問合せを含むマテリアライズド・ビューを作成するのが最も効率的な方法です。
customers
表に対するCREATE
MATERIALIZED
VIEW
文の定義問合せには、1対多関係を持つ副問合せが含まれます。つまり、それぞれの顧客が多数の注文をしている可能性があります。
図58-4では、orders
表とcustomers
表はcustomer_id
列を介して関係していることが示されています。営業担当員の目的は、次の文で達成されます。つまり、次の文では、受注合計額が$20,000より大きい全顧客が含まれたマテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW oe.customers REFRESH FAST AS SELECT * FROM oe.customers@orc1.example.com c WHERE EXISTS (SELECT * FROM oe.orders@orc1.example.com o WHERE c.customer_id = o.customer_id AND o.order_total > 20000);
注意:
このoe.customers
マテリアライズド・ビューを作成するには、orders
マスター表のマテリアライズド・ビュー・ログにcustomer_id
とorder_total
をロギングする必要があります。詳細は、「マテリアライズド・ビュー・ログへの列のロギング」を参照してください。
この文により作成されるマテリアライズド・ビューは、高速リフレッシュが可能です。受注合計額が20,000ドルを超える新規顧客が発生した場合は、後続のリフレッシュ処理中に新規データがこのマテリアライズド・ビュー・データベースに伝播されます。同様に、$20,000を超える受注合計額に含まれている注文を顧客が取り消して、受注合計額が$20,000より低くなった場合は、後続のリフレッシュ処理中に、その顧客のデータがこのマテリアライズド・ビューから削除されます。
親トピック: 副問合せを使用するマテリアライズド・ビュー
58.6.2.3 多対多副問合せ
多対多の関係を持つ副問合せを含むマテリアライズド・ビューを作成できます。
oe
スキーマにorder_items
表とinventories
表が含まれている場合に、inventories
表とorder_items
表の両方のデータに基づいたinventories
表のマテリアライズド・ビューを作成するとします。たとえば、営業担当員が、現在のインベントリ数が1以上の各製品で、製品のproduct_id
がorder_items
表に含まれている全製品のインベントリを調べる必要があるとします。つまり、営業担当員は、顧客が注文した全製品について、インベントリが1以上の製品を調べる必要があります。この場合、インベントリとは、特定の倉庫にある製品の数です。このため、特定の製品は多数の受注項目と多数のインベントリに含まれる可能性があります。
この営業担当員の目的を達成するには、order_items
表とinventories
表との間の多対多関係に対する副問合せを使用したマテリアライズド・ビューを作成します。
inventories
マテリアライズド・ビューを作成する場合は、order_items
表に含まれている製品に関して、現在の数量が1以上のインベントリを取り出します。図58-5では、inventories
表とorder_items
表はproduct_id
列を介して関係していることが示されています。次の文によりこのマテリアライズド・ビューが作成されます。
CREATE MATERIALIZED VIEW oe.inventories REFRESH FAST AS SELECT * FROM oe.inventories@orc1.example.com i WHERE i.quantity_on_hand > 0 AND EXISTS (SELECT * FROM oe.order_items@orc1.example.com o WHERE i.product_id = o.product_id);
注意:
このoe.inventories
マテリアライズド・ビューを作成するには、マスター表のマテリアライズド・ビュー・ログにorder_items
マスター表のproduct_id
列がログされている必要があります。詳細は、「マテリアライズド・ビュー・ログへの列のロギング」を参照してください。
この文により作成されるマテリアライズド・ビューは、高速リフレッシュが可能です。製品に対して1以上のインベントリがorder_items
表で見つかった場合は、後続のリフレッシュ処理中に新規データがこのマテリアライズド・ビュー・データベースに伝播されます。同様に、顧客が製品の注文を取り消して、その製品に対する他の注文がorder_items
表にない場合は、後続のリフレッシュ処理中に、その製品のインベントリがこのマテリアライズド・ビューから削除されます。
親トピック: 副問合せを使用するマテリアライズド・ビュー
58.6.2.4 副問合せおよびUNIONを使用するマテリアライズド・ビュー
副問合せおよびUNIONを含むマテリアライズド・ビューを作成できます。
1つのマテリアライズド・ビューに、複数の問合せの結果に完全に一致するデータを含める場合は、UNION
演算子を使用できます。UNION
演算子を使用してマテリアライズド・ビューを作成する場合は、UNION
演算子の前後に1つずつSELECT
文を使用します。結果のマテリアライズド・ビューには、いずれかの問合せにより選択された行が含まれます。
UNION
演算子は、副問合せのWHERE
句にOR
式を使用せずに「OR」条件を満たす高速リフレッシュ可能なマテリアライズド・ビューを作成する方法として使用できます。副問合せのWHERE
句にOR
式を使用すると、場合によっては結果のマテリアライズド・ビューが複合マテリアライズド・ビューになり、高速リフレッシュができなくなることがあります。
関連項目:
副問合せでのOR
式の詳細は、「副問合せを使用するマテリアライズド・ビューでの制限事項」
たとえば、営業担当員が、特定のcategory_id
の製品で、カリフォルニアの倉庫にある製品、または翻訳された製品説明(フランス語翻訳用)に「Rouge」という単語が含まれている製品の製品情報を求めているとします。次の文では、UNION
演算子と副問合せを使用して、category_id
29の製品について、マテリアライズド・ビューにこのデータを取り出します。
CREATE MATERIALIZED VIEW oe.product_information REFRESH FAST AS SELECT * FROM oe.product_information@orc1.example.com pi WHERE pi.category_id = 29 AND EXISTS (SELECT * FROM oe.product_descriptions@orc1.example.com pd WHERE pi.product_id = pd.product_id AND pd.translated_description LIKE '%Rouge%') UNION SELECT * FROM oe.product_information@orc1.example.com pi WHERE pi.category_id = 29 AND EXISTS (SELECT * FROM oe.inventories@orc1.example.com i WHERE pi.product_id = i.product_id AND EXISTS (SELECT * FROM oe.warehouses@orc1.example.com w WHERE i.warehouse_id = w.warehouse_id AND EXISTS (SELECT * FROM hr.locations@orc1.example.com l WHERE w.location_id = l.location_id AND l.state_province = 'California')));
注意:
oe.product_information
マテリアライズド・ビューを作成するには、各マスターのマテリアライズド・ビュー・ログに、oe.product_descriptions
マスター表のtranslated_description
、hr.locations
マスター表のstate_province
およびoe.warehouses
マスター表のlocation_id
列をロギングする必要があります。詳細は、「マテリアライズド・ビュー・ログへの列のロギング」を参照してください。
図58-6に、この文に含まれているマスター表の関係を示します。
この文には、UNION
演算子の他に次の副問合せが含まれています。
-
product_information
表とproduct_descriptions
表を参照する副問合せ。1つの製品には複数の製品説明(異なる言語用)があるため、これは1対多副問合せです。 -
product_information
表とinventories
表を参照する副問合せ。1つの製品は多数のインベントリに含まれることがあるため、これは1対多副問合せです。 -
inventories
表とwarehouses
表を参照する副問合せ。多数のインベントリを1つの倉庫に格納できるため、これは多対1副問合せです。 -
warehouses
表とlocations
表を参照する副問合せ。多数の倉庫を1つの場所に配置できるため、これは多対1副問合せです。
この文により作成されるマテリアライズド・ビューは、高速リフレッシュが可能です。カリフォルニアの倉庫に格納されているか、翻訳された製品説明に文字列「Rouge」を含む新製品が追加されると、後続のリフレッシュ処理中に新規データがproduct_information
マテリアライズド・ビューに伝播されます。
親トピック: 副問合せを使用するマテリアライズド・ビュー
58.6.3 副問合せを使用するマテリアライズド・ビューでの制限事項
副問合せを使用するマテリアライズド・ビューの定義問合せには、マテリアライズド・ビューの高速リフレッシュ機能を保つためのいくつかの制限事項があります。
副問合せを使用する高速リフレッシュ・マテリアライズド・ビューの制限事項は、次のとおりです。
-
マテリアライズド・ビューは、主キー・マテリアライズド・ビューである必要があります。
-
マスター表のマテリアライズド・ビュー・ログに、副問合せで参照されている特定の列が含まれている必要があります。含める列の詳細は、「マテリアライズド・ビュー・ログへの列のロギング」を参照してください。
-
副問合せが多対多または1対多の場合は、主キーの一部ではない結合列をマスター表のマテリアライズド・ビュー・ログに含める必要があります。この制限は、多対1の副問合せには適用されません。
-
副問合せは、肯定副問合せであることが必要です。たとえば、
EXISTS
条件は使用できますが、NOT
EXISTS
条件は使用できません。 -
副問合せは、
EXISTS
を使用して各ネスト・レベルを接続する必要があります(IN
は使用できません)。 -
各表は1つの
EXISTS
式にのみ含められます。 -
各表は副問合せ内で1回のみ結合できます。
-
各ネスト・レベルの各表に、主キーが存在している必要があります。
-
各ネスト・レベルでは、上位のレベルの表のみを参照できます。
-
副問合せには
AND
条件を含められますが、各OR
条件は1行に含まれている列のみを参照できます。1つの副問合せ内の複数のOR
条件は、AND
条件を使用して接続できます。 -
副問合せ内で参照されるすべての表は、同じマスター・データベース内に存在する必要があります。
注意:
CREATE
MATERIALIZED
VIEW
文にON
PREBUILT
TABLE
句および副問合せが含まれている場合、この副問合せは多対多として扱われます。したがって、この場合は、結合列をマテリアライズド・ビュー・ログに記録する必要があります。CREATE
MATERIALIZED
VIEW
文のON
PREBUILT
TABLE
句の詳細は、『Oracle Database SQL言語リファレンス』 を参照してください。
関連項目:
-
主キー・マテリアライズド・ビューの詳細は、「主キー・マテリアライズド・ビュー」
親トピック: マテリアライズド・ビューを使用したデータのサブセット化
58.6.4 副問合せを含むUNIONを使用するマテリアライズド・ビューでの制限事項
副問合せを含むUNIONを使用する高速リフレッシュのマテリアライズド・ビューには、制限事項があります。
副問合せを含むUNIONを使用する高速リフレッシュ・マテリアライズド・ビューには、次の制限事項があります。
-
「副問合せを使用するマテリアライズド・ビューでの制限事項」で説明したすべての制限事項が、各UNIONブロック内の副問合せに適用されます。
-
副問合せが多対1の場合でも、すべての結合列をマスター表のマテリアライズド・ビュー・ログに含める必要があります。
-
「複合マテリアライズド・ビュー」で説明したすべての制限事項が、
UNIONS
を含む句に適用されます。
- 副問合せを含むUNIONSを使用するマテリアライズド・ビューの例
副問合せを含むUNIONSを使用するマテリアライズド・ビューを作成する例を示します。
親トピック: マテリアライズド・ビューを使用したデータのサブセット化
58.6.4.1 副問合せを含むUNIONを使用するマテリアライズド・ビューの例
副問合せを含むUNIONを使用するマテリアライズド・ビューを作成する例を示します。
次の文は、oe.orders
マテリアライズド・ビューを作成します。各UNIONブロック内の副問合せが、「副問合せを使用するマテリアライズド・ビューでの制限事項」で説明した副問合せに関する制限事項を満たしているため、このマテリアライズド・ビューは高速リフレッシュができます。
CREATE MATERIALIZED VIEW oe.orders REFRESH FAST AS SELECT * FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT * FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.credit_limit > 50) UNION SELECT * FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT * FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.account_mgr_id = 30);
副問合せには、各表は1つのEXISTS
式にしか含められないという制限事項があります。ここでは、customers
表が2つのEXISTS
式で使用されていますが、これらのEXISTS
式は別々のUNION
ブロックにあります。「副問合せを使用するマテリアライズド・ビューでの制限事項」で説明した制限事項は、各UNION
ブロックに対してのみ適用されるもので、CREATE
MATERIALIZED
VIEW
文全体に適用されるものではないため、このマテリアライズド・ビューは高速リフレッシュが可能です。
これに対して、次の文で作成されたマテリアライズド・ビューは高速リフレッシュができません。これは、orders
表が同一UNION
ブロック内の2つのEXISTS
式で参照されているためです。
CREATE MATERIALIZED VIEW oe.orders AS SELECT * FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT * FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id -- first reference to orders table AND c.credit_limit > 50 AND EXISTS (SELECT * FROM oe.orders@orc1.example.com o WHERE order_total > 5000 AND o.customer_id = c.customer_id)) -- second reference to orders table UNION SELECT * FROM oe.orders@orc1.example.com o WHERE EXISTS (SELECT * FROM oe.customers@orc1.example.com c WHERE o.customer_id = c.customer_id AND c.account_mgr_id = 30);
58.7 マテリアライズド・ビューのリフレッシュ
マテリアライズド・ビューとマスター表との一貫性を確保するには、マテリアライズド・ビューを定期的にリフレッシュする必要があります。
マテリアライズド・ビューをリフレッシュするには、次の3つの方法があります。
-
マテリアライズド・ビュー・ログを使用して、最後のリフレッシュ以降に変更されている行のみを更新する高速リフレッシュ。
-
マテリアライズド・ビュー全体を更新する完全リフレッシュ。
-
可能なときに高速リフレッシュを実行する強制リフレッシュ。高速リフレッシュが実行できない場合は、完全リフレッシュが実行されます。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.8 リフレッシュ・グループ
マテリアライズド・ビュー間のトランザクションの一貫性を保つことが重要なときは、マテリアライズド・ビューをリフレッシュ・グループに編成できます。
リフレッシュ・グループをリフレッシュすることで、リフレッシュ・グループ内のすべてのマテリアライズド・ビューのデータが、トランザクションの一貫性を保つ特定の時点のデータと確実に一致します。リフレッシュ・グループ内のマテリアライズド・ビューを個別にリフレッシュすることも可能ですが、リフレッシュ・グループ内のその他のマテリアライズド・ビューはリフレッシュされないため、リフレッシュ・グループを編成する意味がなくなります。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.9 マテリアライズド・ビュー・ログ
マテリアライズド・ビュー・ログは、マテリアライズド・ビューのマスター表が含まれているデータベースの表です。マスター表へのすべてのDML変更が記録されます。
マテリアライズド・ビュー・ログは単一のマスター表に関連付けられ、マスター表からリフレッシュされるマテリアライズド・ビューの数とは無関係に、各マスター表のマテリアライズド・ビュー・ログは1つのみです。マテリアライズド・ビューの高速リフレッシュは、マテリアライズド・ビューのマスター表にマテリアライズド・ビュー・ログが存在する場合のみ可能です。マテリアライズド・ビューを高速リフレッシュすると、マテリアライズド・ビューと対応付けられたマテリアライズド・ビュー・ログのエントリで、最後のリフレッシュ以降に追加されたエントリがマテリアライズド・ビューに適用されます。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.10 マテリアライズド・ビューおよびユーザー定義のデータ型
ユーザー定義データ型を含むマテリアライズド・ビューには、特別な考慮事項があります。
- オブジェクト型およびコレクションでのマテリアライズド・ビューの動作方法
レプリケーション環境で、マスター・データベースとマテリアライズド・ビュー・データベース間でオブジェクト型およびオブジェクトをレプリケートできます。 - レプリケーション・データベースでの型の一致
ユーザー定義型には、オブジェクト、ネストした表、VARRAY
、索引タイプなど、CREATE
TYPE
文で作成された型がすべて含まれます。ユーザー定義型に基づいてスキーマ・オブジェクトをレプリケートするには、マスター・データベースおよびマテリアライズド・ビュー・データベースに、それらのユーザー定義型が存在し、それらが同一である必要があります。 - 列オブジェクトを使用したマスターの列のサブセット化
読取り専用マテリアライズド・ビューでは、その他の属性はレプリケートせずに列オブジェクトの特定の属性のみをレプリケートできます。 - オブジェクト表に基づいたマテリアライズド・ビュー
オブジェクト表に基づいてビューを作成できます。 - コレクション列を含むマテリアライズド・ビュー
コレクション列は、varrayおよびネストされた表データのタイプに基づいた列です。Oracleではコレクション列を含むマテリアライズド・ビューの作成をサポートしています。 - REF列を含むマテリアライズド・ビュー
マテリアライズド・ビューにREF
列を含めることができます。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.10.1 オブジェクト型およびコレクションでのマテリアライズド・ビューの動作方法
レプリケーション環境で、マスター・データベースとマテリアライズド・ビュー・データベース間でオブジェクト型およびオブジェクトをレプリケートできます。
Oracleのオブジェクト型はユーザー定義データ型で、これを使用すると現実の複雑なエンティティ(顧客や注文など)をデータベース内に単一エンティティ(オブジェクト)としてモデル化できます。オブジェクト型は、CREATE
TYPE
...
AS
OBJECT
文を使用して作成します。
表の1列を占有するOracleオブジェクトを、列オブジェクトと呼びます。一般に、列オブジェクトが含まれている表にはその他の列も含まれており、このような列のデータ型は組込みデータ型(VARCHAR2
やNUMBER
など)の場合があります。オブジェクト表は、すべての行がオブジェクトを表す特殊な表です。オブジェクト表の各行は行オブジェクトです。
コレクションをレプリケートすることもできます。コレクションとは、VARRAY
データ型およびネストした表のデータ型に基づいたユーザー定義データ型です。VARRAYはCREATE
TYPE
...
AS
VARRAY
文を、ネストした表はCREATE
TYPE
...
AS
TABLE
文を使用して作成します。
関連項目:
-
ユーザー定義型、Oracleオブジェクトおよびコレクションの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。この項では、これらの概念の基本的な理解があることを前提としています。
-
ユーザー定義型およびオラクル社が提供する型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: マテリアライズド・ビューおよびユーザー定義のデータ型
58.10.2 レプリケーション・データベースでの型の一致
ユーザー定義型には、オブジェクト、ネストした表、VARRAY
、索引タイプなど、CREATE
TYPE
文で作成された型がすべて含まれます。ユーザー定義型に基づいてスキーマ・オブジェクトをレプリケートするには、マスター・データベースおよびマテリアライズド・ビュー・データベースに、それらのユーザー定義型が存在し、それらが同一である必要があります。
ユーザー定義型とそれに基づいたスキーマ・オブジェクトをレプリケートする場合は、次の条件が適用されます。
-
マスター・データベースとマテリアライズド・ビュー・データベースでレプリケートされるユーザー定義型は、これらの型に依存するマテリアライズド・ビューを作成する前にマテリアライズド・ビュー・データベースで作成する必要があります。
-
ユーザー定義型を含むマテリアライズド・ビューを作成するには、マテリアライズド・ビューの基になるすべてのマスター表が同一のマスター・データベースに存在する必要があります。
-
ユーザー定義型は、すべてのデータベースで同一である必要があります。
-
レプリケートされる各ユーザー定義型について、オブジェクト識別子(OID)、スキーマ所有者および型の名前を全レプリケーション・データベースで同一にする必要があります。
-
ユーザー定義型がオブジェクト型の場合は、オブジェクト型の属性の順序とデータ型がすべてのデータベースで一致している必要があります。属性の順序とデータ型は、オブジェクト型を作成するときに設定します。たとえば、次のようなオブジェクト型の場合を考えます。
CREATE TYPE cust_address_typ AS OBJECT (street_address VARCHAR2(40), postal_code VARCHAR2(10), city VARCHAR2(30), state_province VARCHAR2(10), country_id CHAR(2)); /
すべてのデータベースで、
street_address
はこの型の最初の属性でVARCHAR2(40)
、postal_code
は2番目の属性でVARCHAR2(10)
、city
は3番目の属性でVARCHAR2(30)
、というようになっている必要があります。 -
すべてのデータベースで、ユーザー定義型のハッシュコードが一致している必要があります。Oracleでは、ユーザー定義型が検査され、ハッシュコードが割り当てられます。この検査では、型の属性、属性の順序および型の名前が調べられます。複数の型についてこれらの項目がすべて同じである場合、型のハッシュコードは同じです。型のハッシュコードは、
DBA_TYPE_VERSIONS
データ・ディクショナリ・ビューを問い合せて表示できます。
-
型を作成するには、マテリアライズド・ビュー・データベースでCREATE
TYPE
文を使用できます。型を使用する読取り専用マテリアライズド・ビュー・を作成するには、これを行うことが必要な場合があります。
この方法を選択する場合は、次のことを確認する必要があります。
-
マテリアライズド・ビュー・データベースとマスター・データベースで型が同一スキーマ内にあること。
-
マテリアライズド・ビュー・データベースとマスター・データベースで型の属性および順序が同一であること。
-
マテリアライズド・ビュー・データベースとマスター・データベースで型の各属性のデータ型が同一であること。
-
マテリアライズド・ビュー・データベースとマスター・でたべで型のオブジェクト識別子が同一であること。
型のオブジェクト識別子は、DBA_TYPES
データ・ディクショナリ・ビューを問い合せると検出できます。たとえば、cust_address_typ
のオブジェクト識別子(OID)を検出するには、次の問合せを入力します。
SELECT TYPE_OID FROM DBA_TYPES WHERE TYPE_NAME = 'CUST_ADDRESS_TYP'; TYPE_OID -------------------------------- 6F9BC33653681B7CE03400400B40A607
たとえば、マスター・データベースでの型のOIDを知ることができたら、次のステップを実行して、マテリアライズド・ビュー・サイトでこの型を作成できます。
-
マスター・データベースでこの型を所有するユーザーとして、マテリアライズド・ビュー・データベースにログインします。このユーザーがマテリアライズド・ビュー・データベースに存在しない場合は、ユーザーを作成します。
-
CREATE
TYPE
文を発行し、OIDを指定します。CREATE TYPE oe.cust_address_typ OID '6F9BC33653681B7CE03400400B40A607' AS OBJECT ( street_address VARCHAR2(40), postal_code VARCHAR2(10), city VARCHAR2(30), state_province VARCHAR2(10), country_id CHAR(2)); /
これで、マテリアライズド・ビュー・データベースでこの型を使用できるようになりました。
親トピック: マテリアライズド・ビューおよびユーザー定義のデータ型
58.10.3 列オブジェクトを使用したマスターの列のサブセット化
読取り専用マテリアライズド・ビューでは、その他の属性はレプリケートせずに列オブジェクトの特定の属性のみをレプリケートできます。
たとえば、前述のcust_address_typ
ユーザー定義データ型を使用して、customers_sub
マスター表がマスター・データベースorc1.example.com
に作成されているとします。
CREATE TABLE oe.customers_sub ( customer_id NUMBER(6) PRIMARY KEY, cust_first_name VARCHAR2(20), cust_last_name VARCHAR2(20), cust_address oe.cust_address_typ);
次の読取り専用マテリアライズド・ビューをリモート・マテリアライズド・ビュー・データベースに作成できます。
CREATE MATERIALIZED VIEW oe.customers_mv1 AS SELECT customer_id, cust_last_name, c.cust_address.postal_code FROM oe.customers_sub@orc1.example.com c;
ここでは、postal_code
属性がcust_address
列オブジェクト内に指定されています。
親トピック: マテリアライズド・ビューおよびユーザー定義のデータ型
58.10.4 オブジェクト表に基づいたマテリアライズド・ビュー
オブジェクト表に基づいてマテリアライズド・ビューを作成できます。
- オブジェクト表に基づいたマテリアライズド・ビューについて
マテリアライズド・ビューがオブジェクト表に基づいてOF
type句を使用して作成されている場合、このマテリアライズド・ビューはオブジェクト・マテリアライズド・ビューと呼ばれます。 - オブジェクト表に基づいてOF type句を使用せずに作成したマテリアライズド・ビュー
OF
type句を使用せずに、オブジェクト表に基づいてマテリアライズド・ビューを作成すると、マテリアライズド・ビューでは、基になるオブジェクト表のオブジェクト・プロパティが失われます。 - オブジェクト・マテリアライズド・ビューでのOIDの保持
オブジェクト・マテリアライズド・ビューは、マスターのオブジェクト識別子(OID)の仕様を継承します。
親トピック: マテリアライズド・ビューおよびユーザー定義のデータ型
58.10.4.1 オブジェクト表に基づいたマテリアライズド・ビューについて
マテリアライズド・ビューがオブジェクト表に基づいてOF
type句を使用して作成されている場合、このマテリアライズド・ビューはオブジェクト・マテリアライズド・ビューと呼ばれます。
オブジェクト・マテリアライズド・ビューは、オブジェクト表と同じ構造です。つまり、オブジェクト・マテリアライズド・ビューは行オブジェクトで構成されます。
オブジェクト表に基づいたマテリアライズド・ビューをOF
type句を使用せずに作成した場合、そのマテリアライズド・ビューはオブジェクト・マテリアライズド・ビューではありません。つまり、このようなマテリアライズド・ビューには、行オブジェクトではなく通常の行が含まれています。
オブジェクト表に基づいたマテリアライズド・ビューを作成するには、マテリアライズド・ビューが依存する型がマテリアライズド・ビュー・データベースに存在する必要があり、それぞれの型はマスター・データベースと同じオブジェクト識別子を持つ必要があります。
関連項目:
オブジェクト・マテリアライズド・ビューを作成する例は、「読取り専用マテリアライズド・ビューの作成」
親トピック: オブジェクト表に基づいたマテリアライズド・ビュー
58.10.4.2 オブジェクト表に基づいてOF type句を使用せずに作成したマテリアライズド・ビュー
OF
type句を使用せずに、オブジェクト表に基づいてマテリアライズド・ビューを作成すると、マテリアライズド・ビューでは、基になるオブジェクト表のオブジェクト・プロパティが失われます。
つまり、作成された読取り専用マテリアライズド・ビューにはマスター表の列が1つ以上含まれますが、それぞれの行はリレーショナル表の行として機能します。行は行オブジェクトではありません。
たとえば、次のSQL文を使用して、categories_tab
マスター表に基づいたマテリアライズド・ビューを作成できます。
CREATE MATERIALIZED VIEW oe.categories_relmv AS SELECT * FROM oe.categories_tab@orc1.example.com;
この場合、このマテリアライズド・ビューの行は、リレーショナル表の行と同様に機能します。
親トピック: オブジェクト表に基づいたマテリアライズド・ビュー
58.10.4.3 オブジェクト・マテリアライズド・ビューでのOIDの保持
オブジェクト・マテリアライズド・ビューは、マスターのオブジェクト識別子(OID)指定を継承します。
マスター表に主キー・ベースのOIDがある場合、マテリアライズド・ビューの行オブジェクトのOIDは主キー・ベースになります。マスター表にシステム生成されたOIDがある場合、マテリアライズド・ビューの行オブジェクトのOIDはシステム生成されたOIDです。また、オブジェクト・マテリアライズド・ビューの各行のOIDは、マスター表内の同じ行のOIDと一致し、マテリアライズド・ビューのリフレッシュ中、OIDは保持されます。その結果、オブジェクト表の行へのREF
は、マテリアライズド・ビュー・データベースで有効なままです。
親トピック: オブジェクト表に基づいたマテリアライズド・ビュー
58.10.5 コレクション列を含むマテリアライズド・ビュー
コレクション列とは、VARRAYデータ型およびネストした表のデータ型に基づいた列です。Oracleではコレクション列を含むマテリアライズド・ビューの作成をサポートしています。
コレクション列がネストした表の場合は、マテリアライズド・ビューの作成中にオプションとしてnested_table_storage_clauseを指定できます。nested_table_storage_clauseを使用すると、ネストした表用の記憶表の名前をマテリアライズド・ビューに指定できます。
たとえば、マスター・データベースorc1.example.com
にマスター表people_reltab
を作成し、この表にネストした表phones_ntab
が含まれているとします。
CREATE TYPE oe.phone_typ AS OBJECT ( location VARCHAR2(15), num VARCHAR2(14)); / CREATE TYPE oe.phone_ntabtyp AS TABLE OF oe.phone_typ; / CREATE TABLE oe.people_reltab ( id NUMBER(4) CONSTRAINT pk_people_reltab PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(20), phones_ntab oe.phone_ntabtyp) NESTED TABLE phones_ntab STORE AS phone_store_ntab ((PRIMARY KEY (NESTED_TABLE_ID, location)));
このSQL文の最後の行のPRIMARY
KEY
指定に注意してください。親表に基づいてマテリアライズド・ビューを作成する場合は、記憶表に主キーを指定する必要があります。この例では、記憶表はphone_store_ntab
で、親表はpeople_reltab
です。
高速リフレッシュ可能なマテリアライズド・ビューを作成する場合は、親表と記憶表の両方にマテリアライズド・ビュー・ログを作成し、ネストした表の列を親表のマテリアライズド・ビュー・ログのフィルタ列として指定します。
CREATE MATERIALIZED VIEW LOG ON oe.people_reltab; ALTER MATERIALIZED VIEW LOG ON oe.people_reltab ADD(phones_ntab); CREATE MATERIALIZED VIEW LOG ON oe.phone_store_ntab WITH PRIMARY KEY;
マテリアライズド・ビュー・データベースで、各型のオブジェクト識別子がマスター・データベースのオブジェクト識別子と同じになるように、必要な型を作成します。この後、people_reltab
に基づいてマテリアライズド・ビューを作成し、次の文を使用してその記憶表を指定できます。
CREATE MATERIALIZED VIEW oe.people_reltab_mv NESTED TABLE phones_ntab STORE AS phone_store_ntab_mv REFRESH FAST AS SELECT * FROM oe.people_reltab@orc1.example.com;
この場合、nested_table_storage_clauseは前述の例の「NESTED
TABLE
」で始まる行であり、これによって記憶表の名前がphone_store_ntab_mv
であることを指定します。nested_table_storage_clauseはオプションです。この句を指定しない場合、Oracleデータベースにより自動的に記憶域表の名前が付けられます。記憶表の名前を表示するには、DBA_NESTED_TABLES
データ・ディクショナリ表を問い合せます。
記憶表には次の特性があります。
-
個別のセカンダリ・マテリアライズド・ビューです。
-
ネストした表を含むマテリアライズド・ビューをリフレッシュすると、自動的にリフレッシュされます。
-
ネストした表を含むマテリアライズド・ビューを削除すると、自動的に削除されます。
-
マスターの記憶表の主キー制約を継承します。
記憶表はマスター表の記憶表の主キー制約を継承するため、STORE
AS
句にはPRIMARY
KEY
を指定しないでください。
マテリアライズド・ビュー内のネストした表の記憶表に対して次のアクションを直接実行することはできません。
-
記憶表のリフレッシュ
-
記憶表の変更
-
記憶表の削除
-
記憶表に対するレプリケーション・サポートの生成
これらのアクションは、ネストした表を含むマテリアライズド・ビューに対する実行時に間接的に発生します。さらに、記憶表内の列のサブセットはレプリケートできません。
- コレクション列を含むマテリアライズド・ビューに関する制限事項
コレクション列を含むマテリアライズド・ビューに制限が適用されます。
関連項目:
nested_table_col_propertiesの詳細は、『Oracle Database SQL言語リファレンス』のCREATE
TABLE
文に関する説明を参照してください。
親トピック: マテリアライズド・ビューおよびユーザー定義のデータ型
58.10.5.1 コレクション列を含むマテリアライズド・ビューに関する制限事項
コレクション列を含むマテリアライズド・ビューに制限が適用されます。
次の制限があります。
-
コレクション列の行のサブセット化はできません。ただし、ネストした表の親表に対しては行のサブセット化を使用でき、その結果、マスター・マテリアライズド・ビューのネストした表がサブセット化されます。
-
コレクション列の列のサブセット化はできません。
-
ネストした表の記憶表には主キーが必要です。
-
ネストした表の親表で高速リフレッシュ可能にするには、親表とネストした表の両方の記憶表にマテリアライズド・ビュー・ログが必要です。
親トピック: コレクション列を含むマテリアライズド・ビュー
58.10.6 REF列を含むマテリアライズド・ビュー
マテリアライズド・ビューにREF
列を含めることができます。
- REF列を含むマテリアライズド・ビューについて
REF
列を含むマテリアライズド・ビューを作成できます。REF
とはOracleの組込みデータ型で、オブジェクト表内の行オブジェクトを指す論理的なポインタです。 - 有効範囲付きREF列
有効範囲付きREF
列を含むマスター表に基づいてマテリアライズド・ビューを作成する場合は、マテリアライズド・ビュー・データベースの別のオブジェクト表またはオブジェクト・マテリアライズド・ビューにREF
の有効範囲を再指定できます。 - 有効範囲なしのREF列
有効範囲なしのREF
列を含むリモート・マスター表に基づいてマテリアライズド・ビューを作成した場合、マテリアライズド・ビューにREF
列は作成されますが、REF
はリモート・データベースを指すため参照先がないとみなされます。 - マテリアライズド・ビュー・ログへのREF列のロギング
必要な場合、マテリアライズド・ビュー・ログにREF
列を記録できます。 - WITH ROWID句を使用して作成されたREF
REF
列にWITH
ROWID
句が指定されている場合、Oracle DatabaseはREF
で参照されているオブジェクトの行IDを維持します。
親トピック: マテリアライズド・ビューおよびユーザー定義のデータ型
58.10.6.1 REF列を含むマテリアライズド・ビューについて
REF
列を含むマテリアライズド・ビューを作成できます。REF
とはOracleの組込みデータ型で、オブジェクト表内の行オブジェクトを指す論理的なポインタです。
有効範囲付きREF
は、指定されたオブジェクト表のみへの参照を含めることができるREF
で、有効範囲なしREF
は、データベース内で対応するオブジェクト型に基づいたすべてのオブジェクト表に対する参照を含めることができます。有効範囲付き REF
は、有効範囲なしREF
と比べて必要とする記憶領域が少なく、より効率的なアクセスを提供します。
マテリアライズド・ビューの作成時に、マテリアライズド・ビュー・データベースのローカル・マテリアライズド・ビューまたは表にREF
列の有効範囲を再指定できます。有効範囲を再指定しない場合、REF
列はリモートのマスター表を指し続けます。有効範囲なしのREF
列は、常にマスター表を指し続けます。マテリアライズド・ビュー・データベースのREF
列がリモート・マスター表を指す場合、REF
は参照先がないとみなされます。SQLでは、参照先がないREF
を参照解除すると、NULL
が返されます。また、PL/SQLではUTL_OBJECT
パッケージを使用したREF
の参照解除のみがサポートされ、参照先がないREF
に対しては例外が発生します。
親トピック: REF列を含むマテリアライズド・ビュー
58.10.6.2 有効範囲付きREF列
有効範囲付きREF
列を含むマスター表に基づいてマテリアライズド・ビューを作成する場合は、マテリアライズド・ビュー・データベースの別のオブジェクト表またはオブジェクト・マテリアライズド・ビューにREF
の有効範囲を再指定できます。
通常、REF
列の有効範囲は、元のリモート・オブジェクト表ではなくローカル・オブジェクト・マテリアライズド・ビューに変更します。マテリアライズド・ビューの有効範囲を変更するには、CREATE
MATERIALIZED
VIEW
文にSCOPE
FOR
句を使用するか、マテリアライズド・ビューを作成した後でALTER
MATERIALIZED
VIEW
文を使用します。REF
列の有効範囲を変更しないと、マテリアライズド・ビューはマスター表のREF
列をそのまま保持します。
たとえば、次の文を使用してorc1.example.com
マスター・データベースにcustomers_with_ref
マスター表を作成するとします。
-- Create the user-defined data type cust_address_typ. CREATE TYPE oe.cust_address_typ AS OBJECT (street_address VARCHAR2(40), postal_code VARCHAR2(10), city VARCHAR2(30), state_province VARCHAR2(10), country_id CHAR(2)); / -- Create the object table cust_address_objtab. CREATE TABLE oe.cust_address_objtab OF oe.cust_address_typ; -- Create table with REF to cust_address_typ. CREATE TABLE oe.customers_with_ref ( customer_id NUMBER(6) PRIMARY KEY, cust_first_name VARCHAR2(20), cust_last_name VARCHAR2(20), cust_address REF oe.cust_address_typ SCOPE IS oe.cust_address_objtab);
マスター・データベースの型と同じオブジェクト識別子を持つcust_address_typ
がマテリアライズド・ビュー・データベースにあると仮定した場合、次の文を使用するとcust_address_objtab_mv
オブジェクト・マテリアライズド・ビューを作成できます。
CREATE MATERIALIZED VIEW oe.cust_address_objtab_mv OF oe.cust_address_typ AS SELECT * FROM oe.cust_address_objtab@orc1.example.com;
これで、次の文を使用してcustomers_with_ref
マスター表のマテリアライズド・ビューを作成し、REF
の有効範囲をcust_address_objtab_mv
マテリアライズド・ビューに変更できます。
CREATE MATERIALIZED VIEW oe.customers_with_ref_mv (SCOPE FOR (cust_address) IS oe.cust_address_objtab_mv) AS SELECT * FROM oe.customers_with_ref@orc1.example.com;
マテリアライズド・ビューを作成するときにSCOPE
FOR
句を使用する場合は、SCOPE
FOR
句に指定するマテリアライズド・ビューまたは表を先に作成する必要があります。そうしないと、マテリアライズド・ビューの作成中にSCOPE
FOR
句を指定できません。たとえば、cust_address_objtab_mv
マテリアライズド・ビューを作成する前に、customers_with_ref_mv
マテリアライズド・ビューを作成すると、customers_with_ref_mv
マテリアライズド・ビューを作成するときにSCOPE
FOR
句を使用できません。この場合、REF
はリモート・マスター・データベースのオブジェクト表を指すため、参照先がないとみなされます。
ただし、マテリアライズド・ビューを作成するときにSCOPE
FOR
句を使用しない場合でも、SCOPE
FOR
句を指定するようにマテリアライズド・ビューを変更できます。たとえば、次の文でcustomers_with_ref_mv
マテリアライズド・ビューを変更できます。
ALTER MATERIALIZED VIEW oe.customers_with_ref_mv MODIFY SCOPE FOR (cust_address) IS oe.cust_address_objtab_mv;
親トピック: REF列を含むマテリアライズド・ビュー
58.10.6.3 有効範囲なしのREF列
有効範囲なしのREF
列を含むリモート・マスター表に基づいてマテリアライズド・ビューを作成した場合、マテリアライズド・ビューにREF
列は作成されますが、REF
はリモート・データベースを指すため参照先がないとみなされます。
親トピック: REF列を含むマテリアライズド・ビュー
58.10.6.5 WITH ROWID句を使用して作成されたREF
REF
列にWITH
ROWID
句が指定されている場合、Oracle DatabaseはREF
で参照されているオブジェクトの行IDを維持します。
Oracleデータベースでは、REF
に含まれている行IDを使用して、参照されているオブジェクトを直接検出できます(OID索引から行IDをフェッチする必要はありません)。したがって、WITH
ROWID
句は行IDヒントを指定するために使用します。WITH
ROWID
句は、有効範囲付きREF
に対してはサポートされていません。
WITH
ROWID
句を使用して作成されたREF
をレプリケートした場合、REF
が最初に作成または変更されたデータベースを除き、各レプリケーション・データベースの行IDヒントは正しくありません。他のデータベースではREF
のROWID
情報は無意味であり、Oracleデータベースでは行IDヒントは自動的に修正されません。無効な行IDヒントは、パフォーマンス上の問題の原因になります。この場合は、ANALYZE
TABLE
文のVALIDATE
STRUCTURE
オプションを使用して、各レプリケーション・データベースの正しくない行IDヒントを判断できます。
関連項目:
ANALYZE
TABLE
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: REF列を含むマテリアライズド・ビュー
58.11 マスター・データベースでのマテリアライズド・ビューの登録
マスター・データベースでは、マスター表に基づいてマテリアライズド・ビューの情報がOracleデータベースにより自動的に登録されます。
- 登録されたマテリアライズド・ビューに関する情報の表示
マテリアライズド・ビューは、そのマスター・データベースに登録されます。 - 内部メカニズム
Oracleデータベースでは、マテリアライズド・ビューが作成されると自動的にマスター・データベースに登録され、マテリアライズド・ビューが削除されると登録解除されます。 - マテリアライズド・ビューの手動による登録
必要な場合は、登録を手動で維持できます。
親トピック: 読取り専用マテリアライズド・ビューの概念
58.11.1 登録されたマテリアライズド・ビューに関する情報の表示
マテリアライズド・ビューは、そのマスター・データベースに登録されます。
マスター・データベースのDBA_REGISTERED_MVIEWS
データ・ディクショナリ・ビューの問合せにより、リモート・マテリアライズド・ビューに関する次の情報が表示されます。
-
所有者、名前およびマテリアライズド・ビューを含むデータベース
-
マテリアライズド・ビューの定義問合せ
-
マテリアライズド・ビューのその他の特性(リフレッシュ方式など)
また、マスター・データベースのDBA_MVIEW_REFRESH_TIMES
ビューの問合せにより、各マテリアライズド・ビューの最後のリフレッシュ時間を取得できます。管理者は、この情報を使用してマテリアライズド・ビューのアクティビティを監視し、マスター表またはマスター・マテリアライズド・ビューの削除、変更または再配置が必要な場合にマテリアライズド・ビュー・データベースへの変更を調整できます。
親トピック: マスター・データベースでのマテリアライズド・ビューの登録
58.11.2 内部メカニズム
Oracleデータベースでは、マテリアライズド・ビューが作成されると自動的にマスター・データベースに登録され、マテリアライズド・ビューが削除されると登録解除されます。
注意:
Oracleデータベースでは、マテリアライズド・ビューの作成時または削除時に、マスター・データベースでマテリアライズド・ビューが登録または登録解除されることを保証できません。作成時にOracleデータベースがマテリアライズド・ビューを正常に登録できない場合は、DBMS_MVIEW
パッケージ内のREGISTER_MVIEW
プロシージャを使用して手動で登録を完了する必要があります。マテリアライズド・ビューの削除時に、Oracleデータベースがマテリアライズド・ビューを正常に登録解除できない場合は、手動で登録を解除するまで、マスター・データベースにマテリアライズド・ビューの登録情報が保持され続けます。複合マテリアライズド・ビューは登録されない場合があります。
親トピック: マスター・データベースでのマテリアライズド・ビューの登録
58.11.3 マテリアライズド・ビューの手動による登録
必要な場合は、登録を手動でメンテナンスできます。
マテリアライズド・ビューの登録情報を追加、変更または削除するには、マスター・データベースのDBMS_MVIEW
パッケージ内のREGISTER_MVIEW
およびUNREGISTER_MVIEW
プロシージャを使用します。
関連項目:
REGISTER_MVIEW
プロシージャおよびUNREGISTER_MVIEW
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: マスター・データベースでのマテリアライズド・ビューの登録