38 読取り専用マテリアライズド・ビューの計画
読取り専用マテリアライズド・ビューの計画を開始する前に、マテリアライズド・ビューに関連する概念およびアーキテクチャを理解するのは重要なことです。読取り専用マテリアライズド・ビューの概念およびアーキテクチャを理解した後、読取り専用マテリアライズド・ビュー環境の計画に関する重要な検討事項があります。
- マスター表に関する考慮事項
マスター表では、主キー、外部キーおよびデータ型を考慮する必要があります。 - マスター・データベースとマテリアライズド・ビュー・データベースの計画
読取り専用マテリアライズド・ビュー環境のデータベース計画には、マテリアライズド・ビューの準備およびマテリアライズド・ビュー・ログの構成が含まれます。
親トピック: 読取り専用マテリアライズド・ビューの管理
38.1 マスター表に関する考慮事項
マスター表では、主キー、外部キーおよびデータ型を考慮する必要があります。
- 主キーとマスター表
可能であれば、各マスター表が主キーを持つ必要があります。 - 外部キーとマスター表
外部キー参照制約を持つ表をレプリケートする場合は、親表で更新および削除が許可されていない場合を除き、常に外部キー列に索引を付けて、これらの索引をレプリケートすることをお薦めします。索引は自動でレプリケートされません。 - マスター表のデータ型に関する考慮事項
データ型とマスター表に関するいくつかの考慮事項があります。 - サポートされていない表タイプ
いくつかの表タイプは、マテリアライズド・ビューのベースとして使用できません。
親トピック: 読取り専用マテリアライズド・ビューの計画
38.1.1 主キーとマスター表
可能であれば、各マスター表が主キーを持つ必要があります。
主キーを設定できない場合、各マスター表に、表の各行の一意の識別子として使用できる列のセットが含まれている必要があります。レプリケーション環境で使用する表に主キーまたは一意の列のセットがない場合は、レプリケート表を必要に応じて修正します。さらに、マスター表に基づいて主キー・マテリアライズド・ビューを作成する場合は、そのマスターに主キーを設定する必要があります。
親トピック: マスター表に関する考慮事項
38.1.2 外部キーとマスター表
親表の更新や削除が許可されていない場合を除き、外部キー参照制約がある表のレプリケーションでは、常に外部キーに索引を作成してからこれらの索引をレプリケートすることをお薦めします。索引は自動でレプリケートされません。
親トピック: マスター表に関する考慮事項
38.1.3 マスター表のデータ型に関する考慮事項
データ型とマスター表に関するいくつかの考慮事項があります。
次のデータ型を使用する列を含むマスター表に基づいて読取り専用マテリアライズド・ビューを作成できます。
-
VARCHAR2
-
NVARCHAR2
-
NUMBER
-
DATE
-
TIMESTAMP
-
TIME
WITH
TIME
ZONE
-
TIMESTAMP
LOCAL
TIME
ZONE
-
INTERVAL
YEAR
TO
MONTH
-
INTERVAL
DAY
TO
SECOND
-
RAW
-
ROWID
-
CHAR
-
NCHAR
-
BASICFILE
記憶域を持つCLOB
-
BASICFILE
記憶域を持つNCLOB
-
BASICFILE
記憶域を持つBLOB
-
CLOB
として格納されたXMLType
-
型継承または型進化を使用しないユーザー定義型
-
型継承または型進化を使用しないOracle提供の型
ノート:
XMLType
をCLOB
として格納することは非推奨です。
マテリアライズド・ビューの定義問合せのWHERE
句でLOB列を参照することはできません。
ユーザー定義型(列オブジェクト、オブジェクト表、REF
、VARRAY、ネストした表など)を使用するマテリアライズド・ビューを作成できます。
次のデータ型を使用する列を含むマスター表に基づいてマテリアライズド・ビューを作成することはできません。
-
FLOAT
-
BINARY_FLOAT
-
BINARY_DOUBLE
-
LONG
-
LONG
RAW
-
SECUREFILE
記憶域を持つCLOB
-
SECUREFILE
記憶域を持つNCLOB
-
SECUREFILE
記憶域を持つBLOB
-
BFILE
-
オブジェクト・リレーショナルまたはバイナリXMLとして格納されている
XMLType
-
Expression
型 -
型継承または型進化を使用するユーザー定義型
-
型継承または型進化を使用するOracle提供の型
LONG
データ型は、BASICFILE
記憶域を持つLOBに変換する必要があります。
関連項目:
データ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: マスター表に関する考慮事項
38.1.4 サポートされていない表タイプ
いくつかの表タイプは、マテリアライズド・ビューのベースとして使用できません。
これらの表タイプに基づいてマテリアライズド・ビューを作成することはできません:
-
表圧縮機能によって圧縮された表
-
仮想列を含む表
-
一時表
-
フラッシュバック・データ・アーカイブの表
親トピック: マスター表に関する考慮事項
38.2 マスター・データベースとマテリアライズド・ビュー・データベースの計画
読取り専用マテリアライズド・ビュー環境のデータベース計画には、マテリアライズド・ビューの準備およびマテリアライズド・ビュー・ログの構成が含まれます。
- マスター・データベースとマテリアライズド・ビュー・データベースの特性
レプリケーション環境を計画するときは、レプリケーション環境に含める各データベースを、マスター・データベースまたはマテリアライズド・ビュー・データベースにするかどうかを決定する必要があります。 - マスター・データベースの利点
マスター・データベースには、いくつかの利点があります。 - マテリアライズド・ビュー・データベースの利点
マテリアライズド・ビュー・データベースには、いくつかの利点があります。 - マテリアライズド・ビューの準備
マテリアライズド・ビュー・レプリケーションに関する問題の多くは、環境の準備が正しく行われていないことによるものです。 - マテリアライズド・ビュー・ログの作成
マスター表に基づいたマテリアライズド・ビューの高速リフレッシュを可能にするために、マスター表にマテリアライズド・ビュー・ログを作成します。 - マテリアライズド・ビュー・ログの列のロギング
マテリアライズド・ビュー・ログを作成するときに、マテリアライズド・ビューの高速リフレッシュを可能にするために、ログに列を追加できます。
親トピック: 読取り専用マテリアライズド・ビューの計画
38.2.1 マスター・データベースおよびマテリアライズド・ビュー・データベースの特性
レプリケーション環境を計画するときは、レプリケーション環境に含める各データベースを、マスター・データベースまたはマテリアライズド・ビュー・データベースにするかどうかを決定する必要があります。
環境内の特定のデータベースをマスター・データベースまたはマテリアライズド・ビュー・データベースにするかどうかを決定するときは、両方のデータベース・タイプの特性と利点を検討してください。マスター・データベースとマテリアライズド・ビュー・データベースの両方を1つのレプリケーション環境でサポートできます。
表38-1 マスター・データベースおよびマテリアライズド・ビュー・データベースの特性
マスター・データベース | マテリアライズド・ビュー・データベース |
---|---|
多数のマテリアライズド・ビュー・データベースとの通信の可能性 |
1つのマスター・データベースとの通信 |
大量のデータを含む |
マスター・データベースのデータのサブセットであることが可能な少量のデータを含む |
38.2.2 マスター・データベースの利点
マスター・データベースには、いくつかの利点があります。
マスター・データベースには、次の利点があります。
-
リモート・データベースによる可用性の高いデータのサポート
-
データ操作言語(DML)の変更へのサポートを提供
-
フェイルオーバーによる保護を提供できます。
38.2.3 マテリアライズド・ビュー・データベースの利点
マテリアライズド・ビュー・データベースには、いくつかの利点があります。
マテリアライズド・ビュー・データベースには、次の利点があります。
-
モバイル・コンピューティングのサポート
-
マスター・データベースのデータのサブセットを含めることが可能
38.2.4 マテリアライズド・ビューの準備
マテリアライズド・ビュー・レプリケーションに関する問題の多くは、環境の準備が正しく行われていないことによるものです。
マテリアライズド・ビュー環境を作成する前に、次の前提条件が満たされていることを確認します。
-
必要なスキーマが存在することを確認します。
-
必要なデータベース・リンクが存在することを確認します。
-
必要な権限が付与されていることを確認します。
-
十分なジョブ・プロセスが存在することを確認します。
- マテリアライズド・ビュー・データベースに必要なスキーマ
リモート・データベースのマテリアライズド・ビューを含むスキーマは、マスター・データベースのマスター表を含むスキーマに対応している必要があります。 - マテリアライズド・ビューに必要なデータベース・リンク
マテリアライズド・ビューの定義問合せは、リモート表のデータを参照するために1つ以上のデータベース・リンクを使用することができます。 - 必要な権限
マテリアライズド・ビューの作成者と所有者は、ともにマテリアライズド・ビューの定義SELECT
文を発行できる必要があります。 - 十分なジョブ・プロセス
レプリケーション環境を自動化できる十分なジョブ・プロセスが割り当てられていることが重要です。ジョブ・プロセスは、自動的にマテリアライズド・ビューをリフレッシュします。
38.2.4.1 マテリアライズド・ビュー・データベースに必要なスキーマ
リモート・データベースのマテリアライズド・ビューを含むスキーマは、マスター・データベースのマスター表を含むスキーマに対応している必要があります。
したがって、マテリアライズド・ビューを使用してレプリケートするマスター表を含むスキーマを識別してください。マスター・データベースのターゲット・スキーマを識別した後、リモート・データベースで、対応するアカウントを同じ名前で作成します。たとえば、すべてのマスター表がny.example.com
データベースのsales
スキーマ内にある場合は、対応するsales
スキーマをマテリアライズド・ビュー・データベースsf.example.com
に作成します。
関連項目:
親トピック: マテリアライズド・ビューの準備
38.2.4.2 マテリアライズド・ビューに必要なデータベース・リンク
マテリアライズド・ビューの定義問合せでは、1つ以上のデータベース・リンクを使用してリモート表のデータを参照します。
マテリアライズド・ビューを作成するには、使用する予定のデータベース・リンクが使用可能になっている必要があります。さらに、リモート・データベースにアクセスするためにデータベース・リンクで使用するアカウントには、セキュリティ・コンテキストが定義され、そのコンテキストに基づいてマテリアライズド・ビューが作成され、リフレッシュされます。
正常な動作を保証するために、マテリアライズド・ビューの定義問合せでは、ユーザー名とパスワードが定義に埋め込まれているデータベース・リンクを使用する必要があります(マテリアライズド・ビューを作成するときは、パブリック・データベース・リンクを使用できません)。ユーザー名とパスワードが埋め込まれているデータベース・リンクは常に、指定されたアカウントを使用してリモート・データベースとの接続を確立します。また、リンクで使用するリモート・アカウントには、マテリアライズド・ビューの定義問合せの中で参照されるデータにアクセスするために必要なSELECT
権限が必要です。
マテリアライズド・ビューを作成するには、いくつかの管理データベース・リンクを作成する必要があります。具体的には、マテリアライズド・ビュー・データベースからマスター・データベースへのPUBLIC
データベース・リンクを作成する必要があります。これを作成すると、各プライベート・データベース・リンク内にUSING
句を含める必要がなくなるため、プライベート・データベース・リンクを定義しやすくなります。
たとえば、次の文は、マテリアライズド・ビュー・データベースからマスター・データベースへのパブリック・データベース・リンクを作成します。
CREATE PUBLIC DATABASE LINK orc1.example.com USING 'orc1.example.com';
管理データベース・リンクを作成した後、マテリアライズド・ビュー・データベースの各レプリケート・マテリアライズド・ビュー・スキーマをマスター・データベースの対応するスキーマに接続するプライベート・データベース・リンクを作成する必要があります。マテリアライズド・ビュー・データベースの各プライベート・データベース・リンクには、対応付けられたマスター・データベースのアカウント情報を埋め込むことが必要です。たとえば、マテリアライズド・ビュー・データベースのhr
スキーマには、hr
というユーザー名とパスワードを使用してマスター・データベースに接続するプライベート・データベース・リンクが必要です。
たとえば、次の文は、マテリアライズド・ビュー・データベースからマスター・データベースへのプライベート・データベース・リンクを作成します。
CREATE DATABASE LINK orc1.example.com
CONNECT TO myuser IDENTIFIED BY password;
マテリアライズド・ビューの定義問合せは、仮想プライベート・データベース(VPD)によって変更できません。VPDは、マテリアライズド・ビューの作成とリフレッシュの両方を実行するスキーマに対してNULL
ポリシーを戻す必要があります。USING
TRUSTED
CONSTRAINTS
句を指定した場合は、NULL
以外のVPDポリシーを持つマテリアライズド・ビューを作成できます。この場合、マテリアライズド・ビューが正しく動作することを確認します。マテリアライズド・ビューの結果は、VPDポリシーによってフィルタ処理された行と列に基づいて計算されます。したがって、正しい結果を得るには、マテリアライズド・ビュー定義をVPDポリシーで調整する必要があります。
関連項目:
-
データベース・リンクの詳細は、「分散データベースの概念」
-
VPDの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
-
Oracle Label Securityの詳細は、『Oracle Label Security管理者ガイド』
親トピック: マテリアライズド・ビューの準備
38.2.4.3 必要な権限
マテリアライズド・ビューの作成者と所有者は、ともにマテリアライズド・ビューの定義SELECT
文を発行できる必要があります。
マテリアライズド・ビューの所有者とは、マテリアライズド・ビューが含まれているスキーマのことです。
関連項目:
親トピック: マテリアライズド・ビューの準備
38.2.4.4 十分なジョブ・プロセス
レプリケーション環境を自動化できる十分なジョブ・プロセスが割り当てられていることが重要です。ジョブ・プロセスは、自動的にマテリアライズド・ビューをリフレッシュします。
マテリアライズド・ビュー・レプリケーションの特性として、マテリアライズド・ビュー・データベースには、通常、マスター・データベースへのスケジュール・リンクが1つあり、少なくとも1つのジョブ・プロセスが必要です。マテリアライズド・ビュー・データベースで必要なジョブ・プロセスの数は、パージ・スケジュール、ユーザー定義ジョブおよびスケジュール・リンクに依存しますが、通常は1つから3つを必要とします。また、それぞれの並列度に対して少なくとも1つのジョブ・プロセスが必要です。
ユーザーがアプリケーション・インタフェースを使用してマテリアライズド・ビューを手動でリフレッシュする場合は、スケジュール・リンクを作成する必要がなくなり、マテリアライズド・ビュー・データベースで必要なジョブ・プロセスが1つ減ります。
ジョブ・プロセスは、JOB_QUEUE_PROCESSES
初期化パラメータを使用して定義します。この初期化パラメータは、変更可能です。そのため、インスタンス実行中に変更できます。Oracleデータベースにより、ジョブ・プロセスの間隔が自動的に決定されます。つまり、Oracleデータベースが、ジョブを実行するためにジョブ・プロセスを「起動する」タイミングを決定します。
関連項目:
親トピック: マテリアライズド・ビューの準備
38.2.5 マテリアライズド・ビュー・ログの作成
マスター表に基づいたマテリアライズド・ビューの高速リフレッシュを可能にするために、マスター表にマテリアライズド・ビュー・ログを作成します。
リモート・マテリアライズド・ビュー・データベースのマテリアライズド・ビューを作成する前に、マスター・データベースに必要なマテリアライズド・ビュー・ログを作成する必要があります。マテリアライズド・ビュー・ログは、高速リフレッシュ機能付きのマテリアライズド・ビューを1つでもサポートするマスター表に必要です。
マテリアライズド・ビュー・ログを作成するには、次の権限が必要です。
-
CREATE
ANY
TABLE
-
CREATE
ANY
TRIGGER
-
SELECT
(マテリアライズド・ビュー・ログのマスター表) -
COMMENT
ANY
TABLE
マテリアライズド・ビューを作成するには:
例38-1 マテリアライズド・ビュー・ログの作成
CREATE MATERIALIZED VIEW LOG ON hr.employees;
例38-2 オブジェクト表のマテリアライズド・ビュー・ログの作成
次のSQL文は、categories_typ
ユーザー定義型を作成します。
CREATE TYPE oe.category_typ AS OBJECT (category_name VARCHAR2(50), category_description VARCHAR2(1000), category_id NUMBER(2)); /
この型に基づいてオブジェクト表を作成するとき、オブジェクト識別子がシステム生成のものか主キーに基づいたものかを指定できます。
CREATE TABLE oe.categories_tab_sys OF oe.category_typ (category_id PRIMARY KEY) OBJECT ID SYSTEM GENERATED; CREATE TABLE oe.categories_tab_pkbased OF oe.category_typ (category_id PRIMARY KEY) OBJECT ID PRIMARY KEY;
たとえば、次の文ではcategories_tab_sys
オブジェクト表のマテリアライズド・ビュー・ログを作成し、オブジェクト識別子列をロギングするように指定します。
CREATE MATERIALIZED VIEW LOG ON oe.categories_tab_sys WITH OBJECT ID;
次の文では、categories_tab_pkbased
オブジェクト表のマテリアライズド・ビュー・ログを作成し、オブジェクト識別子列とともに主キー列をロギングするように指定します。
CREATE MATERIALIZED VIEW LOG ON oe.categories_tab_pkbased WITH OBJECT ID, PRIMARY KEY;
38.2.6 マテリアライズド・ビュー・ログの列のロギング
マテリアライズド・ビュー・ログを作成するときに、マテリアライズド・ビューの高速リフレッシュを可能にするために、ログに列を追加できます。
例38-3 マテリアライズド・ビューの作成時の列のロギング
orders.customer_id
およびorders.order_total
列が追加されたoe.orders
表に対するマテリアライズド・ビュー・ログを作成するには、次の文を発行します。
CREATE MATERIALIZED VIEW LOG ON oe.orders WITH PRIMARY KEY (customer_id,order_total);
例38-4 既存マテリアライズド・ビューの列のロギング
次の文を発行することで、oe.orders
表に対するマテリアライズド・ビュー・ログにorders.customer_id
およびorders.order_total
列を追加できます。
ALTER MATERIALIZED VIEW LOG ON oe.orders ADD (customer_id,order_total);
例38-5 列オブジェクトの属性のログ
ユーザー定義データ型を使用している場合は、列オブジェクトの属性をマテリアライズド・ビュー・ログにロギングできます。たとえば、oe.customers
表にcust_address.postal_code
属性がある場合、次の文を発行すると、この属性をマテリアライズド・ビュー・ログにロギングできます。
ALTER MATERIALIZED VIEW LOG ON oe.customers ADD (cust_address.postal_code);