ヘッダーをスキップ
Oracle® Database 2日でデータ・レプリケーションおよび統合ガイド
11g リリース2(11.2)
B56305-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 マテリアライズド・ビューを使用したデータのレプリケート

この章では、マテリアライズド・ビューを使用したデータのレプリケートに関する概念情報を示します。また、データベース間のデータの連続的なレプリケート方法を説明します。

この章は次の項で構成されています。

マテリアライズド・ビュー・レプリケーションの概要

レプリケーションは、複数のデータベースでデータベース・オブジェクトとデータを共有するプロセスです。レプリケートされたデータベース・オブジェクトとデータを複数のデータベースでメンテナンスするために、あるデータベースでのこれらのデータベース・オブジェクトの1つに対する変更が他のデータベースと共有されます。このようにして、レプリケーション環境内のすべてのデータベースでデータベース・オブジェクトとデータの同期が維持されます。

外交販売など多くの環境では、データベースがネットワークに接続されていない期間があります。このような環境では、オンデマンドで、または夜間などにスケジュールした一定間隔でレプリカがデータを同期する必要があります。これらのデータベースは、ネットワークに再接続されたときに、同じデータを共有している他のデータベースと同期されます。

これらのニーズに対処するために、Oracle Databaseには、マテリアライズド・ビュー・レプリケーションというレプリケーション・タイプが用意されています。マテリアライズド・ビューには、ある単一の時点での表の完全コピーまたは部分コピーが含まれます。マテリアライズド・ビューは、読取り専用または更新可能にすることができます。

簡単な一括デプロイメントと切断されたコンピューティングがサポートされるため、読取り専用マテリアライズド・ビューと更新可能マテリアライズド・ビューはどちらもモバイル・コンピューティング・アプリケーションに特に適しています。

次の各項で、マテリアライズド・ビュー・レプリケーションの詳細を説明します。

マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要

レプリケーション環境では、マテリアライズド・ビューはデータをマスター・サイトという別のデータベース内の表と共有します。マスター・サイトのマテリアライズド・ビューに関連付けられている表はマスター表と呼ばれます。マテリアライズド・ビューには、ある単一の時点のマスター表の完全コピーまたは部分コピーが含まれます。マテリアライズド・ビューが存在するデータベースはマテリアライズド・ビュー・サイトと呼ばれます。

マテリアライズド・ビューのリフレッシュの概要

マテリアライズド・ビューをリフレッシュすると、マテリアライズド・ビューのデータがそのマスター表のデータと同期します。マテリアライズド・ビューは、固定スケジュールまたはオンデマンドでのリフレッシュの実行時期を制御します。リフレッシュの際には、マスター表の行データがプル・ダウンされ、マテリアライズド・ビュー・サイトに適用されます。Oracle Databaseには、次のリフレッシュ方式があります。

  • 高速リフレッシュは、最後のリフレッシュ以降に変更された行のみプル・ダウンします。

  • 完全リフレッシュでは、マテリアライズド・ビュー全体が更新されます。

  • 強制リフレッシュでは、可能な場合に高速リフレッシュが実行されます。高速リフレッシュが不可能な場合、強制リフレッシュでは、完全リフレッシュが実行されます。

高速リフレッシュは、完全リフレッシュよりも効率的です。マテリアライズド・ビューの高速リフレッシュは、マスター表にマテリアライズド・ビュー・ログがある場合にのみ可能です。マテリアライズド・ビュー・ログは、マスター表に対して実行されたすべての挿入、更新および削除操作を記録するマスター・サイトの表です。

マテリアライズド・ビュー・ログは、単一のマスター表に関連付けられ、各マスター表には、マスター表からリフレッシュするマテリアライズド・ビューの数に関係なく1つのマテリアライズド・ビュー・ログしかありません。マテリアライズド・ビューに高速リフレッシュが実行されると、マテリアライズド・ビューが最後にリフレッシュされた後に追加されたマテリアライズド・ビュー・ログ内のエントリがマテリアライズド・ビューに適用されます。

リフレッシュ・グループの概要

トランザクションで2つ以上のマテリアライズド・ビュー間に一貫性が求められる場合、マテリアライズド・ビューをリフレッシュ・グループに編成できます。リフレッシュ・グループをリフレッシュすることにより、リフレッシュ・グループのマテリアライズド・ビューすべてのデータがトランザクションにおいて同じ一貫した時点に対応付けられます。リフレッシュ・グループ内のマテリアライズド・ビューを個別にリフレッシュすることもできます。ただし、マテリアライズド・ビューを個別にリフレッシュした場合、リフレッシュ・グループ内の残りのマテリアライズド・ビューはリフレッシュされないため、リフレッシュ・グループのメリットがなくなります。

マテリアライズド・ビュー・レプリケーションの準備

マテリアライズド・ビュー・レプリケーションを構成する前に、レプリケーション環境に参加するデータベースを準備します。

マテリアライズド・ビュー・レプリケーションを準備するには: 

  1. 可能な場合は、レプリケートされた各表に主キーがあることを確認します。主キーが可能でない場合は、レプリケートされた各表に、表の各行の一意識別子として使用できる列または列のセットが必要です。レプリケーション環境で使用することを計画している表に主キーまたは一意列のセットがない場合は、これらの表を適宜変更します。

  2. マテリアライズド・ビュー・レプリケーションを構成する前に、レプリケーション環境の各データベースで初期化パラメータを正しく設定します。

    • グローバル名: レプリケーション環境に参加する各データベースでGLOBAL_NAMES初期化パラメータをTRUEに設定します。詳細は、「GLOBAL_NAMES初期化パラメータをTRUEに設定」を参照してください。

    • システム・グローバル領域(SGA)および共有プール: 共有プールが、レプリケーション環境に対して作成されるコンポーネントを十分に収容できる大きさであることを確認します。共有プールは、SGAの一部です。MEMORY_TARGET初期化パラメータ(自動メモリー管理)、SGA_TARGET初期化パラメータ(自動共有メモリー管理)またはSHARED_POOL_SIZE初期化パラメータを設定することにより、共有プールを管理できます。通常、非レプリケーション環境よりもレプリケーション環境の方がOracle Databaseの共有プールが大きくなります。

    初期化パラメータの変更の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  3. ネットワーク接続を構成して、レプリケーション環境内のデータベースが相互に通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。


関連項目:


マテリアライズド・ビュー・サイトの構成

マテリアライズド・ビューを構成する前に、レプリケーション環境のマテリアライズド・ビュー・サイトとして機能するデータベースを構成する必要があります。この項の手順を完了すると、マテリアライズド・ビュー環境で必要なユーザーとデータベース・リンクが構成されます。また、更新可能なマテリアライズド・ビューを構成すると、これらの手順でも更新可能なマテリアライズド・ビューへの変更に対してスケジュールされたリンクおよびパージを構成されます。

Enterprise Managerでマテリアライズド・ビュー・サイトを構成するには: 

  1. 「マテリアライズド・ビュー・レプリケーションの準備」で説明するアクションを完了します。

  2. Oracle Enterprise Managerでは、SYSTEMなどの管理ユーザーとしてマテリアライズド・ビュー・サイトにログインします。

  3. 「データベース」ホームページに移動します。

  4. 「データ移動」をクリックして「データ移動」サブページを開きます。

  5. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

  6. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

  7. 「レプリケーション用のマテリアライズド・ビュー・サイトの構成」を選択します。

  8. 「続行」をクリックして、レプリケーション用のマテリアライズド・ビュー・サイトを構成するウィザードを開きます。

    tdpii_add_rep_sites.gifの説明が続きます。
    tdpii_add_rep_sites.gifの説明

    ウィザードのページに入力して、マテリアライズド・ビュー・サイトを構成します。「ユーザーの作成」ページで、マテリアライズド・ビュー管理者の適切なパスワードを入力します。パスワードの選択の詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。


    ヒント:

    ウィザードの「スキーマの作成」ページでは、レプリケートするデータベース・オブジェクトを含んだスキーマが選択されていることを確認してください。

    ウィザードを終了すると、マテリアライズド・ビュー・サイトを構成するようにEnterprise Managerジョブがスケジュールされます。ジョブが正常に実行されると、マテリアライズド・ビュー・サイトは構成され、それぞれにマテリアライズド・ビュー管理者ができます。デフォルトでは、マテリアライズド・ビュー管理者の名前はmvadminです。ウィザードが完了したら、このユーザーのパスワードを指定します。各マテリアライズド・ビューには、ウィザードの「スキーマの作成」ページで指定した各スキーマが含まれています。

  9. 各マテリアライズド・ビュー・サイトで、レプリケート・スキーマに必要なデータベース・リンクを作成します。

    マテリアライズド・ビュー・サイトのスキーマにマテリアライズド・ビューを作成するには、スキーマは、データベース・リンクを通じて、マスター・サイト内の対応するスキーマに接続する必要があります。

    データベース・リンクを作成するには:

    1. コマンドラインでSQL*Plusを開き、レプリケート・スキーマの所有者としてマテリアライズド・ビュー・データベースに接続します。

      たとえば、ii2.example.comデータベース内のhrスキーマにマテリアライズド・ビューを作成することを計画している場合、次を入力します。

      sqlplus hr@ii2.example.com
      Enter password: password
      

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. マスター・データベースで、対応するレプリケート・スキーマに接続するデータベース・リンクを作成します。

      たとえば、ii1.example.comデータベース内のhrスキーマに接続するデータベースを・リンクを作成して、次を入力します。

      CREATE DATABASE LINK ii1.example.com CONNECT TO hr 
         IDENTIFIED BY password USING 'ii1.example.com';
      
    3. マテリアライズド・ビュー・データベースの各レプリケート・スキーマに対し、手順aからbを繰り返します。

    4. 各マテリアライズド・ビュー・データベースに対して手順aからcを繰り返します。

マスター・サイトでのマテリアライズド・ビュー・ログの構成

マテリアライズド・ビューを高速リフレッシュするには、マスター・サイトのマスター表に対してマテリアライズド・ビュー・ログを構成します。高速リフレッシュは、前回のリフレッシュ後に変更された行のみを更新するので、完全リフレッシュより効率的です。詳細は、「マテリアライズド・ビューのリフレッシュの概要」を参照してください。

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

  1. Oracle Enterprise Managerで、SYSTEMなどの管理ユーザーとしてマスター・サイトにログインします。

  2. 「データベース」ホームページに移動します。

  3. 「データ移動」をクリックして「データ移動」サブページを開きます。

  4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

  5. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

  6. 「高速リフレッシュ用にソース・データベース表にマテリアライズド・ビュー・ログを作成」を選択します。

  7. 「続行」をクリックして「マテリアライズド・ビュー・ログの作成」ページを開きます。

    tdpii_create_mv_log.gifの説明が続きます。
    tdpii_create_mv_log.gifの説明

  8. Schema.Tableフィールドにschema.tableの形式でスキーマ名とマスター表の表名を入力するか、懐中電灯アイコンをクリックして表を検索します。

  9. 「列の移入」をクリックします。

  10. 作成しているマテリアライズド・ビュー・ログの特定の表領域がある場合は、「表領域」フィールドに表領域名を入力します。それ以外の場合は、フィールドを<Default>のままにします。

  11. 「リフレッシュ・タイプ」で「主キー」が選択されていることを確認してください。

  12. 「OK」をクリックしてマテリアライズド・ビュー・ログを作成します。

  13. 各マスター表で手順5から12を繰り返します。


注意:

SQL文CREATE MATERIALIZED VIEW LOGを使用して、マテリアライズド・ビュー・ログを作成することもできます。

マテリアライズド・ビューを使用した読取り専用データのレプリケート

表の読取り専用レプリカは、レプリケートされたデータの変更をアプリケーションに許可することなくレプリケートされたデータへのアクセスを可能にするデータベースに適しています。

次の各項で、マテリアライズド・ビューを使用した読取り専用データのレプリケートを説明します。

マテリアライズド・ビューを使用した読取り専用データのレプリケートの概要

読取り専用マテリアライズド・ビューは、マスター・サイトで発生した表データへの読取り専用アクセスを可能にします。ネットワークの可用性にかかわらず、アプリケーションは読取り専用マテリアライズド・ビューにデータを問い合せて、マスター・サイトへのネットワーク・アクセスを回避できます。ただし、システム全体のアプリケーションは、挿入、更新および削除操作を実行するためにマスター・サイトのデータにアクセスする必要があります。

図7-1に、読取り専用マテリアライズド・ビューの動作を示します。

図7-1 読取り専用マテリアライズド・ビュー

図7-1の説明が続きます。
「図7-1 読取り専用マテリアライズド・ビュー」の説明

図7-1は、クライアント・アプリケーションがマテリアライズド・ビュー・サイトの読取り専用マテリアライズド・ビューに対してローカル問合せを実行できることを示しています。これらのアプリケーションはリモート・マスターのデータを更新できます。マテリアライズド・ビューは、マテリアライズド・ビューがネットワーク上でリフレッシュされる際にマスターでの変更で更新されます。

チュートリアル: マテリアライズド・ビューを使用した読取り専用データ・レプリケーションの構成

この項の例では、マテリアライズド・ビューを使用した読取り専用データ・レプリケーションを構成します。具体的には、この例ではマテリアライズド・ビュー・サイトに次の読取り専用マテリアライズド・ビューを作成します。

  • マスター・サイトのhr.employees表に基づくmvadmin.employees_mvrマテリアライズド・ビュー。

  • マスター・サイトのhr.departments表に基づくmvadmin.departments_mvrマテリアライズド・ビュー。

これらの読取り専用マテリアライズド・ビューを構成するには: 

  1. 次の項で説明するアクションを完了します。

  2. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー・サイトは、マテリアライズド・ビューを作成するデータベースです。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

  3. 「データベース」ホームページに移動します。

  4. 「データ移動」をクリックして「データ移動」サブページを開きます。

  5. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

  6. 「アドバンスト・レプリケーション: 設定」ページで、「読取り専用マテリアライズド・ビュー」を拡張します。

  7. 「マテリアライズド・ビューの作成」を選択します。

  8. 「続行」をクリックして「マテリアライズド・ビューの作成」ページを開きます。

    tdpii_create_mv.gifの説明が続きます。
    tdpii_create_mv.gifの説明

  9. 次のアクションを完了して、hr.employees_mvrマテリアライズド・ビューを作成します。

    1. 「名前」フィールドにemployees_mvrと入力します。

    2. 「スキーマ」フィールドにhrと入力します。

    3. 作成しているマテリアライズド・ビューの特定の表領域がある場合は、「表領域」フィールドに表領域名を入力します。それ以外の場合は、フィールドを<Default>のままにします。

    4. 「マテリアライズド・ビューをクエリー・リライトに対して有効化」を選択解除します。

    5. 次の項目が選択されていないことを確認します。

      • マテリアライズド・ビューを更新可能にする

      • 既存の表からの作成

    6. 「マテリアライズド・ビュー問合せ」フィールドに次のように入力します。

      SELECT employee_id, 
              first_name, 
              last_name, 
              email, 
              phone_number, 
              hire_date, 
              job_id,
              salary, 
              commission_pct, 
              manager_id, 
              department_id
      FROM hr.employees@master_site
      

      master_siteを、マスター表を含むマスター・サイトのグローバル名で置換します。

    7. 「マテリアライズド・ビューを作成後に分析」を選択解除します。

    8. 必要に応じて、他のサブページでマテリアライズド・ビューのオプションを設定します。

    9. 「OK」をクリックしてマテリアライズド・ビューを作成します。

    hr.employees_mvrマテリアライズド・ビューは、マスターhr.employees表の完全なコピーです。データのサブセットを含むマテリアライズド・ビューを作成するには、SELECT文にWHERE句を含めます。

  10. 「アドバンスト・レプリケーション: 設定」ページで、「読取り専用マテリアライズド・ビュー」を拡張します。

  11. 「マテリアライズド・ビューの作成」を選択します。

  12. 「続行」をクリックして「マテリアライズド・ビューの作成」ページを開きます。

  13. 次のアクションを完了して、hr.departments_mvrマテリアライズド・ビューを作成します。

    1. 「名前」フィールドにdepartments_mvrと入力します。

    2. 「スキーマ」フィールドにhrと入力します。

    3. 作成しているマテリアライズド・ビューの特定の表領域がある場合は、「表領域」フィールドに表領域名を入力します。それ以外の場合は、フィールドを<Default>のままにします。

    4. 「マテリアライズド・ビューをクエリー・リライトに対して有効化」を選択解除します。

    5. 次の項目が選択されていないことを確認します。

      • マテリアライズド・ビューを更新可能にする

      • 既存の表からの作成

    6. 「マテリアライズド・ビュー問合せ」フィールドに次のように入力します。

      SELECT department_id, 
              department_name, 
              manager_id, 
              location_id 
      FROM hr.departments@master_site
      

      master_siteを、マスター表を含むマスター・サイトで置換します。

    7. 「マテリアライズド・ビューを作成後に分析」を選択解除します。

    8. 必要に応じて、他のサブページでマテリアライズド・ビューのオプションを設定します。

    9. 「OK」をクリックしてマテリアライズド・ビューを作成します。

  14. リフレッシュ・グループを作成し、それにマテリアライズド・ビューを追加して、リフレッシュされる、ある単一の時点でこれらが一貫するようにします。この例では、hr.employees_mvrおよびhr.departments_mvrマテリアライズド・ビューをリフレッシュ・グループに追加します。詳細は、「リフレッシュ・グループの構成」を参照してください。


注意:

SQL文CREATE MATERIALIZED VIEWを使用して、マテリアライズド・ビューを作成することもできます。

マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート

表の読取り/書込みレプリカは、レプリケートされたデータの変更をアプリケーションに許可するデータベースに適しています。

次の各項で、マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートを説明します。

マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要

更新可能マテリアライズド・ビューでは、ユーザーがマテリアライズド・ビューの行を挿入、更新および削除できます。更新可能マテリアライズド・ビューがリフレッシュされると、これらの変更はマスター・サイトにプッシュされ、マスター表に適用されます。

図7-2に、更新可能マテリアライズド・ビューの動作を示します。

図7-2 更新可能マテリアライズド・ビュー

図7-2の説明が続きます。
「図7-2 更新可能マテリアライズド・ビュー」の説明

図7-2は、クライアント・アプリケーションがマテリアライズド・ビュー・サイトの更新可能マテリアライズド・ビューを問い合せて更新できることを示しています。また、これらのアプリケーションはリモート・マスター・サイトのデータを更新することもできます。マテリアライズド・ビューによってネットワーク上のリフレッシュが初期化されるとき、リフレッシュには主に2つの段階があります。まず、マテリアライズド・ビュー上で実行されたトランザクションがマスター・サイトにプッシュされ、適切に適用されます。次に、更新の競合があればそれを解消した後で、変更された行データをマテリアライズド・ビューがマスター・サイトからプルして適用します。

次の各項で、マテリアライズド・ビューを使用したレプリケーションの詳細を説明します。

レプリケーション・グループと更新可能マテリアライズド・ビューの概要

レプリケーション・グループは、論理的に関連するレプリケーション・オブジェクトのコレクションです。関連するデータベース・オブジェクトをレプリケーション・グループ内で編成することにより、多くのオブジェクトをまとめて管理するのが簡単になります。マスター・サイトでは、レプリケーション・グループはマスター・グループと呼ばれます。マテリアライズド・ビュー・サイトでは、レプリケーション・グループはマテリアライズド・ビュー・グループと呼ばれます。

更新可能マテリアライズド・ビューに対する変更をリフレッシュ中にマスターにプッシュするには、次の条件が満たされている必要があります。

  • 更新可能マテリアライズド・ビューは、マテリアライズド・ビュー・グループに属する必要があります。

  • マテリアライズド・ビュー・グループは、マスター・サイトのマスター・グループに基づいている必要があります。

マテリアライズド・ビュー・グループには、マスター・グループ内のすべての表または表のサブセットのマテリアライズド・ビューを含めることができます。

図7-3は、2つのマテリアライズド・ビュー・グループを示しています。マテリアライズド・ビュー・グループAには、マスター・グループの表のサブセットに対応するマテリアライズド・ビューが含まれ、マテリアライズド・ビュー・グループBには、マスター・グループの各表のマテリアライズド・ビューが含まれます。

図7-3 マスター・グループに対応するマテリアライズド・ビュー・グループ

図7-3の説明が続きます。
「図7-3 マスター・グループに対応するマテリアライズド・ビュー・グループ」の説明

マテリアライズド・ビュー・グループとリフレッシュ・グループを同じサイトで使用している場合、単一リフレッシュ・グループには複数のマテリアライズド・ビュー・グループを含めることができます。マテリアライズド・ビュー・グループは、リフレッシュ・グループと異なりますが、同じマテリアライズド・ビューを含む場合があります。

図7-4に、2つのマテリアライズド・ビュー・グループを含むリフレッシュ・グループを示します。

図7-4 リフレッシュ・グループは複数のマテリアライズド・ビュー・グループのオブジェクトを含むことができる

図7-4の説明が続きます。
「図7-4 リフレッシュ・グループは複数のマテリアライズド・ビュー・グループのオブジェクトを含むことができる」の説明

スケジュールされたリンクと遅延トランザクションの概要

マテリアライズド・ビュー・サイトでは、遅延トランザクションには更新可能マテリアライズド・ビューに対する変更が含まれます。遅延トランザクションは、マテリアライズド・ビュー・サイトに格納されるため、マスター・サイトに送信でき、マスター表に適用できます。

更新可能マテリアライズド・ビューのリフレッシュは、最初にマテリアライズド・ビュー・サイトの遅延トランザクションをマスター・サイトにプッシュします。次に、マスター・サイトのデータがプルされて、マテリアライズド・ビューに適用されます。

オプションとして、リフレッシュとは関係のない定期的な間隔で遅延トランザクションをプッシュすることを選択できます。 スケジュールされたリンクは、遅延トランザクションをプッシュするためのユーザー定義スケジュールがあるデータベース・リンクです。スケジュールされたリンクは、マテリアライズド・ビュー・サイトが遅延トランザクション・キューをそのマスター・サイトに送信する方法を決定します。スケジュールされたリンクを作成する場合、Oracle Databaseはローカル・ジョブ・キューにジョブを作成して、マスター・サイトに遅延トランザクション・キューをプッシュします。

マテリアライズド・ビュー・サイトにマスター・サイトへの常時接続がある場合は、オプションとして、スケジュールされたリンクを使用して遅延トランザクションを定期的な間隔でマスター・サイトにプッシュできます。マテリアライズド・ビュー・サイトが長時間マスター・サイトから切断されている場合、通常はスケジュールどおりに遅延トランザクションをプッシュしないことをお薦めします。この場合は、オンデマンドでリフレッシュするのが最適で、これにより、変更がマスター・サイトにもプッシュされます。

更新可能マテリアライズド・ビューに対する変更がマスター・サイトにプッシュされた後は、マテリアライズド・ビュー・サイトに格納する必要がなくなります。遅延トランザクション・キューのサイズを維持するために、正常に完了した遅延トランザクションをパージする必要があります。これらの遅延トランザクションは、パージ・スケジュールに従って一定の間隔でパージできます。

競合と更新可能マテリアライズド・ビューの概要

更新可能マテリアライズド・ビューを使用する場合は、競合が発生する可能性があります。マスター表とマテリアライズド・ビューの同じ行に変更がほぼ同時に加えられた場合は、競合が発生します。リフレッシュ時に、前回のリフレッシュ後にマスター表および対応するマテリアライズド・ビューで同じ行が変更された場合、マスター・サイトは競合を検出します。

デフォルトでは、Oracle Databaseは競合更新を必ず検出し、ログに記録します。 競合解消を使用して、各競合がビジネス・ルールに従って解消されるようにし、すべてのサイトでデータが正しく収束するようにできます。Oracle Databaseには、マスター・サイトで構成できる組込みの競合解消方法があります。

マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成

この項では、マテリアライズド・ビューを使用した読取り/書込みデータ・レプリケーションを構成する方法を示します。具体的には、この例では次のものを構成します。

  • マスター表を含むマスター・サイトのマスター・グループ。詳細は、「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」を参照してください。

  • マスター・サイトのマスター表に基づく更新可能マテリアライズド・ビューを含むマテリアライズド・ビュー・サイトにあるマテリアライズド・ビュー・グループ。マテリアライズド・ビューを更新可能にするには、そのマテリアライズド・ビューがマテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループ内にあり、マテリアライズド・ビュー・グループがマスター・サイトのマスター・グループに対応している必要があります。詳細は、「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」を参照してください。

  • マスター表のマスター・サイトでの最新のタイムスタンプ競合解消。競合解消により、マスター表および対応する更新可能マテリアライズド・ビュー内の同じ行がほぼ同時に変更された場合に、マスター表とマテリアライズド・ビューの一貫性が保たれます。詳細は、「競合と更新可能マテリアライズド・ビューの概要」を参照してください。

    競合が発生した場合、最新のタイムスタンプ競合解消とは、最新の変更は保持され、古い変更は破棄されることを意味します。ある時点で行がマテリアライズド・ビュー内で更新されると、後でマスター表の行も更新され、マテリアライズド・ビューがリフレッシュされると、マスター表の行は自動的にマテリアライズド・ビューの行に置換されます。マテリアライズド・ビューの行がマスター表の行より先に更新されている場合、マテリアライズド・ビューの行は、リフレッシュ中にマスター表の行を置換します。

これらの更新可能マテリアライズド・ビューを構成するには: 

  1. 次の項で説明するアクションを完了します。

  2. マスター・サイトを構成します。マスター・サイトには、更新可能なマテリアライズド・ビューがベースとなっているマスター表を含みます。

    1. Oracle Enterprise Managerで、SYSTEMなどの管理ユーザーとしてマスター・サイトになるデータベースにログインします。

    2. 「データベース」ホームページに移動します。

    3. 「データ移動」をクリックして「データ移動」サブページを開きます。

    4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

    5. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

    6. 「レプリケーション用のマスター・サイトの構成」を選択します。

    7. 「続行」をクリックして、レプリケーション用のマスター・サイトを構成するウィザードを開きます。

      tdpii_setup_master_sites.gifの説明が続きます。
      tdpii_setup_master_sites.gifの説明

      ウィザードのページに入力して、マスター・サイトを構成します。

      ウィザードを終了すると、マスター・サイトを構成するようにEnterprise Managerジョブがスケジュールされます。ジョブが正常に実行されると、マスター・サイトは構成され、レプリケーション管理者ができます。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。ウィザードが完了したら、このユーザーのパスワードを指定します。

  3. 最新のタイムスタンプ競合解消の各マスター表にtime列を追加します。

    1. SQL*Plusで、SYSTEMなどの管理ユーザーとしてデータベースに接続します。別の方法として、時間列が追加される表を所有しているユーザーとして接続することもできます。

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. SQL文ALTER TABLEを使用して、表にtime列を追加します。たとえば、次のSQL文は、time列をhr.departments表に追加します。

      ALTER TABLE hr.departments ADD (time TIMESTAMP WITH TIME ZONE);
      
  4. トリガーを作成して変更が発生した時刻で各マスター表のtime列を更新します。


    ヒント:

    トリガーを使用してtime列を更新するかわりに、アプリケーションで表に対して列を修正または挿入するたびに、time列を移入できます。

    1. Oracle Enterprise Managerで、SYSTEMなどの管理者ユーザーとしてマスター表を含むデータベースにログインします。

      手順3の完了後にEnterprise Managerからログアウトしなければ、管理ユーザーとしてマスター・サイトにログインした状態を保持できます。

    2. 「データベース」ホームページに移動します。

    3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

    4. 「プログラム」セクションで「トリガー」をクリックします。

    5. 「トリガー」ページで、「作成」をクリックします。

      「トリガーの作成」ページが表示され、「一般」サブページが表示されます。

      tdpii_create_trigger_system.gifの説明が続きます。
      tdpii_create_trigger_system.gifの説明

    6. 「名前」フィールドにトリガーの名前を入力します。

    7. 「スキーマ」フィールドに管理ユーザー名を保持します。

    8. 「トリガー本体」フィールドに次のように入力します。

      BEGIN
         -- The IF/THEN statement ensures that the trigger does not fire during
         -- materialized view refresh.
         IF (DBMS_REPUTIL.FROM_REMOTE = FALSE AND
             DBMS_SNAPSHOT.I_AM_A_REFRESH = FALSE) 
         THEN
            :NEW.TIME := SYSTIMESTAMP;
         END IF;
      END;
      
    9. 「イベント」をクリックして「イベント」サブページを開きます。

    10. 「対象オブジェクト」リストで「表」が選択されていることを確認します。

    11. 「表(Schema.Table)」フィールドにschema.tableの形式で表名を入力するか、懐中電灯アイコンを使用してデータベース・オブジェクトを検索します。

    12. 「起動タイミング」に「前」が選択されていることを確認してください。

    13. 「イベント」に「選択」および「列の更新」を選択します。

      表内の列が表示されます。

    14. 新規のtime列を除く表のすべての列を選択します。

    15. 「詳細」をクリックします。

    16. 「行レベル・トリガー」を選択します。

    17. 「OK」をクリックしてトリガーを作成します。

    18. 各マスター表で手順eからqを繰り返し、トリガーを作成します。

    19. Enterprise Managerからログアウトします。


    注意:

    SQL文CREATE TRIGGERを使用して、トリガーを作成することもできます。

  5. マスター・グループを作成します。

    1. Enterprise Managerで、レプリケーション管理者としてマスター・サイトにログインします。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。

    2. 「データベース」ホームページに移動します。

    3. 「データ移動」をクリックして「データ移動」サブページを開きます。

    4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

      「アドバンスト・レプリケーション: 設定」ページが表示されます。

    5. 「マルチマスター・レプリケーション」を拡張します。

    6. 「マスター・グループの作成」を選択します。

    7. 「続行」をクリックして「マスター・グループの作成」ウィザードを開きます。

      tdpii_create_mg_gen.gifの説明が続きます。
      tdpii_create_mg_gen.gifの説明

      ウィザードのページに入力して、マスター・グループを構成します。


      ヒント:

      • 「オブジェクトの追加」ページで、マテリアライズド・ビューのマスター表になる表を追加します。

      • 「マスター・サイトの追加」ページで、追加のマスター・サイトを追加しないでください。


      ウィザードを終了すると、マスター・グループを構成するようにEnterprise Managerジョブがスケジュールされます。

  6. 各マスター表の競合解消を構成するには:

    1. マスター・サイトにレプリケーション管理者としてログインしながら、新規マスター・グループを含むデータベースの「データベース」ホームページに移動します。

    2. 「データ移動」をクリックして「データ移動」サブページを開きます。

    3. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。

      「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

    4. 「マルチマスター・レプリケーション」セクションで、「マスター・グループ」に関連付けられている数字をクリックします。

    5. 「マスター・グループ」ページで、マスター・グループ・ステータスがNORMALの場合、「停止」をクリックします。ステータスがQUIESCEDの場合、次の手順に移動します。

    6. コマンドラインでSQL*Plusを開き、レプリケーション管理者としてマスター・サイトに接続します。

      たとえば、レプリケーション管理者がrepadminで、マスター・サイトがii1.example.comの場合、次を入力します。

      sqlplus repadmin@ii1.example.com
      Enter password: password
      

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    7. SQL*PlusのDBMS_REPCATパッケージでMAKE_COLUMN_GROUPプロシージャを実行して、レプリケート表の列グループを作成します。

      たとえば、hr.departments表の列グループを作成して、次のプロシージャを実行します。

      BEGIN
         DBMS_REPCAT.MAKE_COLUMN_GROUP(
            sname                => 'hr',
            oname                => 'departments',
            column_group         => 'dep_time_cg',
            list_of_column_names => 'department_id,
                                     department_name,
                                     manager_id,
                                     location_id,
                                     time');
      END;
      /
      

      list_of_columnsパラメータのすべての表列を含みます。

      MAKE_COLUMN_GROUPプロシージャの詳細は、『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』を参照してください。

    8. SQL*PlusのDBMS_REPCATパッケージでADD_UPDATE_RESOLUTIONプロシージャを実行して、表のLATEST TIME競合解消を指定します。

      たとえば、次のプロシージャを実行して、hr.departments表の手順gで作成した列グループを使用してLATEST TIME競合解消を指定します。

      BEGIN
         DBMS_REPCAT.ADD_UPDATE_RESOLUTION (
            sname                 => 'hr',
            oname                 => 'departments',
            column_group          => 'dep_time_cg',
            sequence_no           => 1,
            method                => 'LATEST TIMESTAMP',
            parameter_column_name => 'time');
      END;
      /
      

      column_groupパラメータの手順gで作成した列グループを指定し、parameter_column_name列の時間列を指定します。

      ADD_UPDATE_RESOLUTIONプロシージャの詳細は、『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』を参照してください。

    9. マスター・グループの各表で手順gからhを繰り返します。

    10. Enterprise Managerで、レプリケーション管理者としてマスター・サイトにログインします。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。

    11. 「データベース」ホームページに移動します。

    12. 「データ移動」をクリックして「データ移動」サブページを開きます。

    13. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。

      「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

    14. 「マルチマスター・レプリケーション」セクションで、「マスター・グループ」に関連付けられている数字をクリックします。

    15. 「マスター・グループ」ページで、マスター・グループを選択します。

    16. 「編集」をクリックしてマスター・グループを編集するページを開きます。

    17. 「オブジェクト」をクリックして「オブジェクト」サブページを開きます。

    18. 競合解消に追加した各オブジェクトに関する「レプリケーション・サポートの作成」を選択していることを確認します。

    19. 「適用」をクリックすると変更が保存されます。

    20. ページ上部の「マスター・グループ」をクリックして「マスター・グループ」ページに戻ります。

    21. マスター・グループの「再開」をクリックします。

  7. マテリアライズド・ビュー・グループを作成します。

    1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー・サイトは、マテリアライズド・ビューを作成するデータベースです。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

    2. 「データベース」ホームページに移動します。

    3. 「データ移動」をクリックして「データ移動」サブページを開きます。

    4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

    5. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

    6. 「マテリアライズド・ビュー・グループの作成」を選択します。

    7. 「続行」をクリックして「マテリアライズド・ビュー・グループの作成」ウィザードを開きます。

      tdpii_create_mvg_gen.gifの説明が続きます。
      tdpii_create_mvg_gen.gifの説明

      ウィザードのページに入力して、マテリアライズド・グループを構成します。


      ヒント:

      「マテリアライズド・ビューのカスタマイズ」ページの各マテリアライズド・ビューについて:
      • マスター・サイトで各表が使用する競合解決の「最小通信」を選択します。このオプションは、競合解消メカニズムのサポートに必要なデータ量を削減します。

      • 更新可能にする各マテリアライズド・ビューで「更新可能」を選択します。

      • 高速リフレッシュを実行する各マテリアライズド・ビューで「高速リフレッシュ」を選択します。


      ウィザードを終了すると、マテリアライズド・ビュー・グループを構成するようにEnterprise Managerジョブがスケジュールされます。

  8. 変更が発生したときに最新の時刻を持つ各マテリアライズド・ビューのtime列を更新するトリガーを作成します。トリガーは最新のタイムスタンプ競合解消に必要です。

    1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー・サイトは、マテリアライズド・ビューを作成するデータベースです。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

    2. 各マテリアライズド・ビューに対して手順4bから4qを完了します。

  9. マテリアライズド・ビュー・グループの構成中に既存のリフレッシュ・グループを指定しなかった場合は、リフレッシュ・グループを作成し、マテリアライズド・ビューをそのグループに追加して、リフレッシュされたときにこれらがある時点で一貫するようにします。詳細は、「リフレッシュ・グループの構成」を参照してください。

リフレッシュ・グループの構成

2つ以上のマテリアライズド・ビューをある時点で一致させる必要がある場合は、マテリアライズド・ビューが同じリフレッシュ・グループに属している必要があります。

リフレッシュ・グループを作成し、これにマテリアライズド・ビューを追加するには: 

  1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

  2. 「データベース」ホームページに移動します。

  3. 「データ移動」をクリックして「データ移動」サブページを開きます。

  4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。

    「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

  5. 「マテリアライズド・ビュー・サイト」セクションで、「リフレッシュ・グループ」に関連付けられている数字をクリックします。

  6. 「リフレッシュ・グループ」ページで、「作成」をクリックします。

    「リフレッシュ・グループの作成」ページが表示され、「一般」サブページが表示されます。

    tdpii_create_ref_grp.gifの説明が続きます。
    tdpii_create_ref_grp.gifの説明

  7. 次のアクションを完了します。

    • リフレッシュ・グループの名前を「名前」フィールドに入力します。

    • 「スキーマ」フィールドにリフレッシュ・グループの所有者を入力します。通常は、マテリアライズド・ビュー管理者がリフレッシュ・グループを所有します。

    • 必要に応じて、「次の日付」および「間隔」設定を調整します。「次の日付」設定は、リフレッシュ・グループの次のリフレッシュが発生する時期を決定します。「間隔」設定は、リフレッシュ・グループが自動的にリフレッシュされる頻度を決定します。「変更」をクリックして、各設定を調整する新しいページを開きます。

      マテリアライズド・ビュー・サイトとマスター・サイト間に制限された接続がある場合は、オンデマンドでリフレッシュできます。この場合は、「間隔」フィールドをクリアします。

    • 「リフレッシュ前にマテリアライズド・ビューから変更をマスターに送信」を選択します。このオプションでは、リフレッシュ時に、マテリアライズド・ビュー・サイトがマテリアライズド・ビューのリフレッシュ前に、マスター表の更新可能なマテリアライズド・ビューに対する変更のプッシュを指定します。

  8. 「マテリアライズド・ビュー」サブページを開いて、「マテリアライズド・ビュー」をクリックします。

    tdpii_create_ref_grp_mvs.gifの説明が続きます。
    tdpii_create_ref_grp_mvs.gifの説明

  9. 「追加」をクリックして「検索と選択: マテリアライズド・ビュー」ページを開きます。

  10. 検索ツールを使用して、リフレッシュ・グループに追加するマテリアライズド・ビューをリストします。

  11. リフレッシュ・グループに追加するマテリアライズド・ビューを選択します。

  12. 「OK」をクリックして「マテリアライズド・ビュー」サブページに戻ります。選択したマテリアライズド・ビューがリフレッシュ・グループにリストされます。

  13. 「OK」をクリックして、リフレッシュ・グループを作成します。


注意:

DBMS_REFRESHパッケージの次のプロシージャを使用して、リフレッシュ・グループを作成し、これにオブジェクトを追加することもできます。
  • MAKE

  • ADD