60 読取り専用マテリアライズド・ビューの計画

読取り専用マテリアライズド・ビューの計画を開始する前に、マテリアライズド・ビューに関連する概念およびアーキテクチャを理解するのは重要なことです。読取り専用マテリアライズド・ビューの概念およびアーキテクチャを理解した後、読取り専用マテリアライズド・ビュー環境の計画に関する重要な検討事項があります。

60.1 マスター表に関する考慮事項

マスター表では、主キー、外部キーおよびデータ型を考慮する必要があります。

60.1.1 主キーとマスター表

可能であれば、各マスター表が主キーを持つ必要があります。

主キーを設定できない場合、各マスター表に、表の各行の一意の識別子として使用できる列のセットが含まれている必要があります。レプリケーション環境で使用する表に主キーまたは一意の列のセットがない場合は、レプリケート表を必要に応じて修正します。さらに、マスター表に基づいて主キー・マテリアライズド・ビューを作成する場合は、そのマスターに主キーを設定する必要があります。

60.1.2 外部キーとマスター表

親表の更新や削除が許可されていない場合を除き、外部キー参照制約がある表のレプリケーションでは、常に外部キーに索引を作成してからこれらの索引をレプリケートすることをお薦めします。索引は自動でレプリケートされません。

60.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提供の型

注意:

XMLTypeCLOBとして格納することは非推奨です。

マテリアライズド・ビューの定義問合せの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言語リファレンス』を参照してください。

60.1.4 サポートされていない表タイプ

いくつかの表タイプは、マテリアライズド・ビューのベースとして使用できません。

これらの表タイプに基づいてマテリアライズド・ビューを作成することはできません:

  • 表圧縮機能によって圧縮された表

  • 仮想列を含む表

  • 一時表

  • フラッシュバック・データ・アーカイブの表

60.2 マスター・データベースとマテリアライズド・ビュー・データベースの計画

読取り専用マテリアライズド・ビュー環境のデータベース計画には、マテリアライズド・ビューの準備およびマテリアライズド・ビュー・ログの構成が含まれます。

60.2.1 マスター・データベースとマテリアライズド・ビュー・データベースの特性

レプリケーション環境を計画するときは、レプリケーション環境に含める各データベースを、マスター・データベースまたはマテリアライズド・ビュー・データベースにするかどうかを決定する必要があります。

環境内の特定のデータベースをマスター・データベースまたはマテリアライズド・ビュー・データベースにするかどうかを決定するときは、両方のデータベース・タイプの特性と利点を検討してください。マスター・データベースとマテリアライズド・ビュー・データベースの両方を1つのレプリケーション環境でサポートできます。

表60-1 マスター・データベースおよびマテリアライズド・ビュー・データベースの特性

マスター・データベース マテリアライズド・ビュー・データベース

多数のマテリアライズド・ビュー・データベースとの通信の可能性

1つのマスター・データベースとの通信

大量のデータを含む

マスター・データベースのデータのサブセットであることが可能な少量のデータを含む

60.2.2 マスター・データベースの利点

マスター・データベースには、いくつかの利点があります。

マスター・データベースには、次の利点があります。

  • リモート・データベースによる可用性の高いデータのサポート

  • データ操作言語(DML)の変更へのサポートを提供

  • フェイルオーバーによる保護を提供できます。

60.2.3 マテリアライズド・ビュー・データベースの利点

マテリアライズド・ビュー・データベースには、いくつかの利点があります。

マテリアライズド・ビュー・データベースには、次の利点があります。

  • モバイル・コンピューティングのサポート

  • マスター・データベースのデータのサブセットを含めることが可能

60.2.4 マテリアライズド・ビューの準備

マテリアライズド・ビュー・レプリケーションに関する問題の多くは、環境の準備が正しく行われていないことによるものです。

マテリアライズド・ビュー環境を作成する前に、次の前提条件が満たされていることを確認します。

  • 必要なスキーマが存在することを確認します。

  • 必要なデータベース・リンクが存在することを確認します。

  • 必要な権限が付与されていることを確認します。

  • 十分なジョブ・プロセスが存在することを確認します。

60.2.4.1 マテリアライズド・ビュー・データベースに必要なスキーマ

リモート・データベースのマテリアライズド・ビューを含むスキーマは、マスター・データベースのマスター表を含むスキーマに対応している必要があります。

したがって、マテリアライズド・ビューを使用してレプリケートするマスター表を含むスキーマを識別してください。マスター・データベースのターゲット・スキーマを識別した後、リモート・データベースで、対応するアカウントを同じ名前で作成します。たとえば、すべてのマスター表がny.example.comデータベースのsalesスキーマ内にある場合は、対応するsalesスキーマをマテリアライズド・ビュー・データベースsf.example.comに作成します。

60.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;

図60-1 推奨されるスキーマおよびデータベース・リンク構成

図60-1の説明が続きます
「図60-1 推奨されるスキーマおよびデータベース・リンク構成」の説明

マテリアライズド・ビューの定義問合せは、仮想プライベート・データベース(VPD)によって変更できません。VPDは、マテリアライズド・ビューの作成とリフレッシュの両方を実行するスキーマに対してNULLポリシーを戻す必要があります。USING TRUSTED CONSTRAINTS句を指定した場合は、NULL以外のVPDポリシーを持つマテリアライズド・ビューを作成できます。この場合、マテリアライズド・ビューが正しく動作することを確認します。マテリアライズド・ビューの結果は、VPDポリシーによってフィルタ処理された行と列に基づいて計算されます。したがって、正しい結果を得るには、マテリアライズド・ビュー定義をVPDポリシーで調整する必要があります。

関連項目:

60.2.4.3 必要な権限

マテリアライズド・ビューの作成者と所有者は、ともにマテリアライズド・ビューの定義SELECT文を発行できる必要があります。

マテリアライズド・ビューの所有者とは、マテリアライズド・ビューが含まれているスキーマのことです。

60.2.4.4 十分なジョブ・プロセス

レプリケーション環境を自動化できる十分なジョブ・プロセスが割り当てられていることが重要です。ジョブ・プロセスは、自動的にマテリアライズド・ビューをリフレッシュします。

マテリアライズド・ビュー・レプリケーションの特性として、マテリアライズド・ビュー・データベースには、通常、マスター・データベースへのスケジュール・リンクが1つあり、少なくとも1つのジョブ・プロセスが必要です。マテリアライズド・ビュー・データベースで必要なジョブ・プロセスの数は、パージ・スケジュール、ユーザー定義ジョブおよびスケジュール・リンクに依存しますが、通常は1つから3つを必要とします。また、それぞれの並列度に対して少なくとも1つのジョブ・プロセスが必要です。

ユーザーがアプリケーション・インタフェースを使用してマテリアライズド・ビューを手動でリフレッシュする場合は、スケジュール・リンクを作成する必要がなくなり、マテリアライズド・ビュー・データベースで必要なジョブ・プロセスが1つ減ります。

ジョブ・プロセスは、JOB_QUEUE_PROCESSES初期化パラメータを使用して定義します。この初期化パラメータは、変更可能です。そのため、インスタンス実行中に変更できます。Oracleデータベースにより、ジョブ・プロセスの間隔が自動的に決定されます。つまり、Oracleデータベースが、ジョブを実行するためにジョブ・プロセスを「起動する」タイミングを決定します。

60.2.5 マテリアライズド・ビュー・ログの作成

マスター表に基づいたマテリアライズド・ビューの高速リフレッシュを可能にするために、マスター表にマテリアライズド・ビュー・ログを作成します。

リモート・マテリアライズド・ビュー・データベースのマテリアライズド・ビューを作成する前に、マスター・データベースに必要なマテリアライズド・ビュー・ログを作成する必要があります。マテリアライズド・ビュー・ログは、高速リフレッシュ機能付きのマテリアライズド・ビューを1つでもサポートするマスター表に必要です。

マテリアライズド・ビュー・ログを作成するには、次の権限が必要です。

  • CREATE ANY TABLE

  • CREATE ANY TRIGGER

  • SELECT(マテリアライズド・ビュー・ログのマスター表)

  • COMMENT ANY TABLE

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

  1. 目的の表にマテリアライズド・ビュー・ログを作成するために、必要な権限を持つユーザーとしてマスター・データベースに接続します。
  2. CREATE MATERIALIZED VIEW LOG文を実行します。

    オブジェクト表に基づいてマテリアライズド・ビューを作成するときは、WITH OBJECT ID句を指定してオブジェクト識別子をロギングする必要がありますが、オブジェクト識別子が主キー・ベースの場合は、主キーもロギングされるように指定できます。

例60-1 マテリアライズド・ビュー・ログの作成

CREATE MATERIALIZED VIEW LOG ON hr.employees;

例60-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;

60.2.6 マテリアライズド・ビュー・ログの列のロギング

マテリアライズド・ビュー・ログを作成するときに、マテリアライズド・ビューの高速リフレッシュを可能にするために、ログに列を追加できます。

  1. 目的の表にマテリアライズド・ビュー・ログを作成または変更するために、必要な権限を持つユーザーとしてマスター・データベースに接続します。
  2. 次のいずれかを行います:
    • CREATE MATERIALIZED VIEW LOG文を実行し、ログする列を指定します。

    • ALTER MATERIALIZED VIEW LOG文を実行し、ログする列を指定します。

例60-3 マテリアライズド・ビューの作成時の列のロギング

orders.customer_idおよびorders.order_total列が追加されたoe.orders表に対するマテリアライズド・ビュー・ログを作成するには、次の文を発行します。

CREATE MATERIALIZED VIEW LOG ON oe.orders 
  WITH PRIMARY KEY (customer_id,order_total);

例60-4 既存マテリアライズド・ビューの列のロギング

次の文を発行することで、oe.orders表に対するマテリアライズド・ビュー・ログにorders.customer_idおよびorders.order_total列を追加できます。

ALTER MATERIALIZED VIEW LOG ON oe.orders ADD (customer_id,order_total);

例60-5 列オブジェクトの属性のログ

ユーザー定義データ型を使用している場合は、列オブジェクトの属性をマテリアライズド・ビュー・ログにロギングできます。たとえば、oe.customers表にcust_address.postal_code属性がある場合、次の文を発行すると、この属性をマテリアライズド・ビュー・ログにロギングできます。

ALTER MATERIALIZED VIEW LOG ON oe.customers ADD (cust_address.postal_code);