ヘッダーをスキップ
Oracle® Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス
11g リリース2 (11.2)
B72090-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 マテリアライズド・ビュー・レプリケーション環境の管理

マテリアライズド・ビュー・レプリケーションは、ユーザーおよびフロントエンド・アプリケーションの必要を満たすと同時に、セキュリティ構成の要件を満たす、データ・セットの構築に柔軟性を提供します。この章では、レプリケーション・マネージメントAPIを使用したマテリアライズド・ビュー・サイトの管理方法を説明します。

この章には、次の項が含まれます。

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

マテリアライズド・ビューのリフレッシュにより、マテリアライズド・ビューのマスターのデータとマテリアライズド・ビューのデータが同期化されます。リフレッシュ・グループのすべてのマテリアライズド・ビューを一度にリフレッシュすることも、マテリアライズド・ビューを個別にリフレッシュすることもできます。マテリアライズド・ビュー・サイトで複数のマテリアライズド・ビューに依存するアプリケーションがある場合、アプリケーションで使用されるすべてのマテリアライズド・ビューでデータ変換に整合性が保たれるよう、リフレッシュ・グループの使用をお薦めします。

次の例では、hr_refgリフレッシュ・グループがリフレッシュされます。

EXECUTE DBMS_REFRESH.REFRESH ('hr_refg');

次の例では、hr.departments_mvマテリアライズド・ビューがリフレッシュされます。

BEGIN
   DBMS_MVIEW.REFRESH (
     list   =>  'hr.departments_mv', 
     method =>  '?');
END;
/

注意:

レプリケーション環境で使用するマテリアライズド・ビューは、DBMS_MVIEW.REFRESH_ALL_MVIEWSまたはDBMS_MVIEW.REFRESH_DEPENDENTプロシージャを使用してリフレッシュしないでください。レプリケーション環境のマテリアライズド・ビューは、DBMS_REFRESH.REFRESHまたはDBMS_MVIEW.REFRESHプロシージャを使用してリフレッシュします。


関連項目:

DBMS_MVIEWパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

マテリアライズド・ビュー・グループのマスター・サイトの変更

レベル1のマテリアライズド・ビュー・サイトでマテリアライズド・ビュー・グループのマスター・サイトを他のマスター・サイトに変更するには、次の例に示すように、DBMS_REPCATパッケージのSWITCH_MVIEW_MASTERプロシージャをコールします。

BEGIN
   DBMS_REPCAT.SWITCH_MVIEW_MASTER (
      gname  => 'hr_repg',
      master => 'orc3.example.com');
END;
/

ここでは、hr_repgレプリケーション・グループのマスター・サイトがorc3.example.comマスター・サイトに変更されます。このプロシージャは、マスター・サイトを変更するマテリアライズド・ビュー・サイトでコールする必要があります。また、新しいデータベースとして、レプリケーション環境のマスター・サイトを指定する必要があります。このプロシージャをコールすると、新しいマスターを使用して、ローカル・マテリアライズド・ビュー・グループのマテリアライズド・ビューごとに完全リフレッシュが実行されます。SWITCH_MVIEW_MASTERプロシージャを実行する前に、新しいマスター・サイトを使用するためのマテリアライズド・ビュー・サイトを必ず設定しておきます。

切り替えられたマテリアライズド・ビューの古いマスター・サイトにあるSYS.SLOG$表のエントリは削除されません。その結果、古いマスター・サイトにある切り替えられた更新可能マテリアライズド・ビューのマテリアライズド・ビュー・ログ(MLOG$表)は、DBMS_MVIEW.PURGE_LOGをコールしてそれをパージしないかぎり、際限なく増大する可能性があります。


注意:

他のマテリアライズド・ビュー(レベル2以上)に基づくマテリアライズド・ビューのマスターを切り替えることはできません。このようなマテリアライズド・ビューのベースを別のマスターにするには、マテリアライズド・ビューを削除して再作成する必要があります。

マテリアライズド・ビュー・グループおよびオブジェクトの削除

様々な理由によって、マテリアライズド・ビュー・サイトのレプリケーション・アクティビティを削除する必要がある場合があります。たとえば、データ要件が変更されたり、従業員が退職した場合などです。

この項では、次の項について説明します。

デプロイメント・テンプレートで作成されたマテリアライズド・ビュー・グループの削除

マテリアライズド・ビュー・グループがデプロイメント・テンプレートで作成されている場合、リモート・マテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループを削除する前に、マテリアライズド・ビュー・グループのターゲット・マスター・サイトでDROP_SITE_INSTANTIATIONプロシージャを実行する必要があります。このプロシージャは、マテリアライズド・ビュー・グループに関連するメタデータの削除に加え、このサイトに関わる関連するデプロイメント・テンプレート・データも削除します。

DROP_SITE_INSTANTIATIONプロシージャにはパブリック・バージョンとプライベート・バージョンがあります。パブリック・バージョンでは、マテリアライズド・ビュー・グループの所有者がマテリアライズド・ビュー・サイトを削除できる一方、プライベート・バージョンでは、マテリアライズド・ビュー・グループの所有者のかわりにレプリケーション管理者が、マテリアライズド・ビュー・サイトを削除します。

パブリックのDROP_SITE_INSTANTIATIONの使用

これらのアクションを実行するには、次の要件を満たす必要があります。

実行者:

  • マスター・サイトのマテリアライズド・ビュー・グループ所有者

  • マテリアライズド・ビュー・サイトのマテリアライズド・ビュー管理者

実行場所:

  • ターゲット・マテリアライズド・ビュー・サイト用マスター・サイト

  • マテリアライズド・ビュー・サイト

レプリケーションの状態: 通常

次に示す手順に従って、デプロイメント・テンプレートで作成されたマテリアライズド・ビュー・グループを削除します。


注意:

このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。

/************************* BEGINNING OF SCRIPT ******************************
手順1   マテリアライズド・ビュー・グループ所有者としてマスター・サイトに接続します。
*/
SET ECHO ON

SPOOL drop_mv_group_public.out

CONNECT hr@orc3.example.com

/*
手順2   インスタンス化されたマテリアライズド・ビュー・サイトをマスター・サイトから削除します。
*/

BEGIN
   DBMS_REPCAT_INSTANTIATE.DROP_SITE_INSTANTIATION( 
      refresh_template_name =>  'hr_refg_dt',
      site_name => 'mv4.example.com');
END;
/

/*
手順3   マテリアライズド・ビュー管理者としてリモート・マテリアライズド・ビュー・サイトに接続します。
*/
CONNECT mviewadmin@mv4.example.com

/*

リモート・マテリアライズド・ビュー・サイトに接続できない場合は、ターゲット・マテリアライズド・ビュー・グループはリフレッシュできませんが、既存のデータはまだマテリアライズド・ビュー・サイトに残っています。

手順4   マテリアライズド・ビュー・グループを削除します。
*/
BEGIN
   DBMS_REPCAT.DROP_MVIEW_REPGROUP (
      gname => 'hr_repg',
      drop_contents => TRUE);
END;
/

/*

マテリアライズド・ビュー・グループの内容をマテリアライズド・ビュー・データベースから物理的に削除する場合は、drop_contentsパラメータにTRUEを指定します。

手順5   リフレッシュ・グループを削除します。

リフレッシュ・グループ所有者として接続し、リフレッシュ・グループを削除します。

*/

CONNECT hr@mv4.example.com

BEGIN
   DBMS_REFRESH.DESTROY (
       name => 'hr_refg');
END;
/

SET ECHO OFF

SPOOL OFF

/************************* END OF SCRIPT **********************************/

プライベートのDROP_SITE_INSTANTIATIONの使用

次のスナップショットをマテリアライズド・ビュー・グループの所有者のかわりに、レプリケーション管理者が実行します。これらのアクションを実行するには、次の要件を満たす必要があります。

実行者:

  • マスター・サイトのレプリケーション管理者

  • マテリアライズド・ビュー・サイトのマテリアライズド・ビュー管理者

実行場所:

  • ターゲット・マテリアライズド・ビュー・サイト用マスター・サイト

  • マテリアライズド・ビュー・サイト

レプリケーションの状態: 通常

次に示す手順に従って、デプロイメント・テンプレートで作成されたマテリアライズド・ビュー・グループを削除します。


注意:

このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。

/************************* BEGINNING OF SCRIPT ******************************
手順1   レプリケーション管理者としてマスター・サイトに接続します。
*/
SET ECHO ON

SPOOL drop_mv_group_private.out

CONNECT repadmin@orc1.example.com

/*
手順2   インスタンス化されたマテリアライズド・ビュー・サイトをマスター・サイトから削除します。
*/

BEGIN
   DBMS_REPCAT_RGT.DROP_SITE_INSTANTIATION ( 
      refresh_template_name => 'hr_refg_dt',
      user_name             => 'hr',
      site_name             => 'mv4.example.com');
END;
/

/*
手順3   マテリアライズド・ビュー管理者としてリモート・マテリアライズド・ビュー・サイトに接続します。
*/
CONNECT mviewadmin@mv4.example.com

/*

リモート・マテリアライズド・ビュー・サイトに接続できない場合は、ターゲット・マテリアライズド・ビュー・グループはリフレッシュできませんが、既存のデータはまだマテリアライズド・ビュー・サイトに残っています。

手順4   マテリアライズド・ビュー・グループを削除します。
*/
BEGIN
   DBMS_REPCAT.DROP_MVIEW_REPGROUP (
      gname => 'hr_repg',
      drop_contents => TRUE,
      gowner => 'hr');
END;
/

/*

マテリアライズド・ビュー・グループの内容をマテリアライズド・ビュー・データベースから物理的に削除する場合は、drop_contentsパラメータにTRUEを指定します。

手順5   リフレッシュ・グループを削除します。

リフレッシュ・グループ所有者として接続し、リフレッシュ・グループを削除します。

*/

CONNECT hr@mv4.example.com

BEGIN
   DBMS_REFRESH.DESTROY (
       name => 'hr_refg');
END;
/

SET ECHO OFF

SPOOL OFF

/************************* END OF SCRIPT **********************************/

手動で作成されたマテリアライズド・ビュー・グループまたはオブジェクトの削除

マテリアライズド・ビュー・サイトのレプリケーション・サポートを削除する場合の最も安全な方法は、マテリアライズド・ビュー・サイトのレプリケート・オブジェクトまたはグループを物理的に削除することです。次の2つの項では、マテリアライズド・ビュー・グループに接続した状態で、これらのオブジェクトとグループを削除する方法を示します。

ここに示すプロシージャは、マテリアライズド・ビューが、ターゲット・マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続した状態で実行する必要があります。接続していると、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトにあるすべての関連メタデータを、確実に削除できるためです。マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続できない場合は、「マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトのクリーンアップ」の手順を実行して、関連メタデータを手動で削除します。

手動で作成されたマテリアライズド・ビュー・グループの削除

マテリアライズド・ビュー・グループをマテリアライズド・ビュー・サイトから削除することが必要になった場合は、DROP_MVIEW_REPGROUPプロシージャを使用してマテリアライズド・ビュー・グループを削除します。このプロシージャを実行してターゲット・マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続すると、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトにあるターゲット・マテリアライズド・ビュー・グループのメタデータが削除されます。接続できない場合は、「マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトのクリーンアップ」を参照してください。

これらのアクションを実行するには、次の要件を満たす必要があります。

実行者: マテリアライズド・ビュー管理者

実行場所: リモート・マテリアライズド・ビュー・サイト

レプリケーションの状態: 該当せず

次に示す手順に従って、マテリアライズド・ビュー・サイトにあるマテリアライズド・ビュー・グループを削除します。

手順1   マテリアライズド・ビュー管理者としてマテリアライズド・ビュー・サイトに接続します。
CONNECT mviewadmin@mv1.example.com
Enter password: password
手順2   マテリアライズド・ビュー・グループを削除します。
BEGIN
   DBMS_REPCAT.DROP_MVIEW_REPGROUP (
      gname => 'hr_repg',
      drop_contents => TRUE);
END;
/

マテリアライズド・ビュー・グループの内容をマテリアライズド・ビュー・データベースから物理的に削除する場合は、drop_contentsパラメータにTRUEを指定します。

マテリアライズド・ビュー・サイトのオブジェクトの削除

個別のマテリアライズド・ビューをマテリアライズド・ビュー・サイトから削除することが必要になった場合は、DROP_MVIEW_REPOBJECTプロシージャAPIを使用してマテリアライズド・ビューを削除します。このプロシージャを実行してターゲット・マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続すると、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトにあるターゲット・マテリアライズド・ビューのメタデータが削除されます。接続できない場合は、「マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトのクリーンアップ」を参照してください。

これらのアクションを実行するには、次の要件を満たす必要があります。

実行者: マテリアライズド・ビュー管理者

実行場所: リモート・マテリアライズド・ビュー・サイト

レプリケーションの状態: 該当せず

次に示す手順に従って、マテリアライズド・ビュー・サイトにある個別のマテリアライズド・ビューを削除します。

手順1   マテリアライズド・ビュー管理者としてマテリアライズド・ビュー・サイトに接続します。
CONNECT mviewadmin@mv1.example.com
Enter password: password
手順2   マテリアライズド・ビューを削除します。
BEGIN
   DBMS_REPCAT.DROP_MVIEW_REPOBJECT (
      sname => 'hr', 
      oname => 'employees_mv1', 
      type => 'SNAPSHOT', 
      drop_objects => TRUE);
END;
/

マテリアライズド・ビューの内容をマテリアライズド・ビュー・データベースから物理的に削除する場合は、drop_contentsパラメータにTRUEを指定します。

マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトのクリーンアップ

ターゲット・マスター・サイトまたはターゲット・マテリアライズド・ビュー・サイトに接続中に、マテリアライズド・ビュー・グループまたはマテリアライズド・ビュー・オブジェクトを削除できない場合は、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトにある関連メタデータを手動で削除する必要があります。メタデータをクリーンアップすると、マスター表またはマスター・マテリアライズド・ビューに加えられた変更をマテリアライズド・ビュー・ログに保持する必要がなくなります。次の項では、マテリアライズド・ビュー・グループまたはオブジェクトを削除した後、マスター・サイトまたはマテリアライズド・ビュー・サイトをクリーンアップする方法を説明します。

マテリアライズド・ビュー・グループの削除後のクリーンアップ

「手動で作成されたマテリアライズド・ビュー・グループの削除」に示す手順を実行してもマスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続されない場合は、次に示す手順を実行して、ターゲット・マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトをクリーンアップすることをお薦めします。

これらのアクションを実行するには、次の要件を満たす必要があります。

実行者: レプリケーション管理者

実行場所: ターゲット・マテリアライズド・ビュー・サイト用のマスター・サイトまたはマスター・マテリアライズド・ビュー・サイト

レプリケーションの状態: 通常

マテリアライズド・ビュー・グループを削除した後、次に示す手順を実行して、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトをクリーンアップします。


注意:

このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。

/************************* BEGINNING OF SCRIPT ******************************
手順1   レプリケーション管理者としてマスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続します。
*/
SET ECHO ON

SPOOL cleanup_master1.out

CONNECT repadmin@orc1.example.com

/*
手順2   マテリアライズド・ビュー・グループを登録解除します。
*/
BEGIN
   DBMS_REPCAT.UNREGISTER_MVIEW_REPGROUP (
      gname => 'hr_repg',
      mviewsite => 'mv1.example.com');
END;
/

/*
手順3   ターゲット・マテリアライズド・ビューとしてマークされていたエントリのマテリアライズド・ビュー・ログをパージします。

手順2で登録解除したマテリアライズド・ビュー・グループにあった各マテリアライズド・ビューに対し、PURGE_MVIEW_FROM_LOGプロシージャを実行します。


注意:

なんらかの理由でマテリアライズド・ビュー・グループの登録解除が失敗した場合も、この手順は実行する必要があります。


関連項目:

DBMS_MVIEWパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

*/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'countries_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'departments_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'employees_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'jobs_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'job_history_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'locations_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'regions_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

SET ECHO OFF

SPOOL OFF

/************************* END OF SCRIPT **********************************/

個別のマテリアライズド・ビュー・サポートのクリーンアップ

「マテリアライズド・ビュー・サイトのオブジェクトの削除」に示す手順を実行してもマスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続されない場合は、次に示す手順を実行して、ターゲット・マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトをクリーンアップすることをお薦めします。

これらのアクションを実行するには、次の要件を満たす必要があります。

実行者: レプリケーション管理者

実行場所: ターゲット・マテリアライズド・ビュー・サイト用のマスター・サイトまたはマスター・マテリアライズド・ビュー・サイト

レプリケーションの状態: 通常

個別のマテリアライズド・ビューを削除した後、次に示す手順を実行して、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトをクリーンアップします。


注意:

このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。

/************************* BEGINNING OF SCRIPT ******************************
手順1   レプリケーション管理者としてマスター・サイトまたはマスター・マテリアライズド・ビュー・サイトに接続します。
*/
SET ECHO ON

SPOOL cleanup_master2.out

CONNECT repadmin@orc1.example.com

/*
手順2   マテリアライズド・ビューを登録解除します。
*/
BEGIN
   DBMS_MVIEW.UNREGISTER_MVIEW (
      mviewowner => 'hr',
      mviewname => 'employees_mv1',
      mviewsite => 'mv1.example.com');
END;
/

/*

関連項目:

DBMS_MVIEWパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

手順3   ターゲット・マテリアライズド・ビューとしてマークされていたエントリの、関連するマテリアライズド・ビュー・ログをパージします。

注意:

なんらかの理由でマテリアライズド・ビューの登録解除が失敗した場合も、この手順は実行する必要があります。


関連項目:

DBMS_MVIEWパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

*/

BEGIN
   DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
      mviewowner => 'hr',
      mviewname => 'employees_mv1', 
      mviewsite => 'mv1.example.com');
END;
/

SET ECHO OFF

SPOOL OFF

/************************* END OF SCRIPT **********************************/

マテリアライズド・ビュー・ログの管理

次の項では、マテリアライズド・ビュー・ログの管理方法を説明します。

マテリアライズド・ビュー・ログの変更

マテリアライズド・ビュー・ログを作成すると、記憶領域パラメータおよび対応するマテリアライズド・ビューに対するサポートを変更できます。次の項では、マテリアライズド・ビュー・ログの変更方法を説明します。次のユーザーのみが、マテリアライズド・ビュー・ログを変更できます。

  • マスター表またはマスター・マテリアライズド・ビューの所有者。

  • マスター表またはマスター・マテリアライズド・ビューのSELECT権限、およびMLOG$_master_nameALTER権限を持つユーザー。master_nameとは、マテリアライズド・ビュー・ログ用マスターの名前です。たとえば、マスター表がemployeesの場合、マテリアライズド・ビュー・ログ表の名前はMLOG$_employeesとなります。

マテリアライズド・ビュー・ログ記憶域パラメータの変更

マテリアライズド・ビュー・ログの記憶域パラメータを変更するには、ALTER MATERIALIZED VIEW LOG文を使用します。たとえば、次の文では、hrスキーマ内のemployees表のマテリアライズド・ビュー・ログが変更されます。

ALTER MATERIALIZED VIEW LOG ON hr.employees
  PCTFREE 25
  PCTUSED 40;

列の追加のためのマテリアライズド・ビュー・ログの変更

マテリアライズド・ビュー・ログに新しい列を追加するには、SQL文ALTER MATERIALIZED VIEW LOGを使用します。たとえば、次の文では、salesスキーマ内のcustomers表のマテリアライズド・ビュー・ログが変更されます。

ALTER MATERIALIZED VIEW LOG ON hr.employees
  ADD (department_id);

関連項目:

マテリアライズド・ビュー・ログへの列の追加の詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

マテリアライズド・ビュー・ログ領域の管理

マテリアライズド・ビューのリフレッシュ時にマテリアライズド・ビュー・ログ内のどの行が使用されたかが自動的に追跡され、ログが際限なく増大しないよう、不要な行がログからパージされます。複数の単純マテリアライズド・ビューでは同じマテリアライズド・ビュー・ログを使用できるため、あるマテリアライズド・ビューのリフレッシュにすでに使用された行が、まだ別のマテリアライズド・ビューのリフレッシュに必要な場合があります。このため、すべてのマテリアライズド・ビューで使用されるまで行はログから削除されません。

たとえば、マスター・サイトのcustomers表に対して2つのマテリアライズド・ビューが作成されたとします。customersマテリアライズド・ビューは、spdb1データベースでリフレッシュされます。この場合、マスター表および関連するマテリアライズド・ビュー・ログを管理するサーバーでは、このマテリアライズド・ビューのリフレッシュ時に使用されたマテリアライズド・ビュー・ログの行は、spdb2データベースのcustomersマテリアライズド・ビューがこの行を使用してリフレッシュされるまで、パージされません。

マテリアライズド・ビュー・ログから行をパージする前に、すべての依存マテリアライズド・ビューがリフレッシュされるのを待つ必要があるため、複数のマテリアライズド・ビューが同じマスター表またはマスター・マテリアライズド・ビューをベースにしている場合、マテリアライズド・ビュー・ログが際限なく増大する可能性があります。

このような状況は、たとえば1つのマスター表またはマスター・マテリアライズド・ビューが複数のマテリアライズド・ビューのベースとなっており、かつ次の条件のいずれかに該当する場合に発生することがあります。

  • あるマテリアライズド・ビューが自動リフレッシュ用に構成されておらず、手動でのリフレッシュが長期間実行されていない場合

  • あるマテリアライズド・ビューのリフレッシュ間隔が非常に長い場合(たとえば1年ごと)

  • ネットワーク障害によって、マスター表またはマスター・マテリアライズド・ビューをベースとする1つ以上のマテリアライズド・ビューの自動リフレッシュが実行できない場合

  • ネットワークまたはサイト障害によって、マテリアライズド・ビューが削除されたことをマスター表またはマスター・マテリアライズド・ビューが認識できない場合


注意:

マテリアライズド・ビューで削除された変更がリフレッシュされる前にマテリアライズド・ビュー・ログのパージまたはTRUNCATEを行った場合は、マテリアライズド・ビューの完全リフレッシュを実行する必要があります。

マテリアライズド・ビュー・ログからの行のパージ

マテリアライズド・ビュー・ログが使用するデータベース領域を最小にするため、マテリアライズド・ビュー・ログは常にできるかぎり小さくなるようにしてください。マテリアライズド・ビュー・ログから行を削除して、新しいログ・レコード用に領域を解放するには、次のアクションのいずれかを実行します。

  • ログに対応付けられたマテリアライズド・ビューをリフレッシュします。これによって、マテリアライズド・ビュー・ログから行がパージされます。

  • 最も古いn回目のリフレッシュが行われたマテリアライズド・ビューのみに必要な行を削除することにより、ログのレコードを手動でパージします。

マテリアライズド・ビュー・ログから行を手動でパージするには、そのログを含むデータベースで、DBMS_MVIEWパッケージのPURGE_LOGプロシージャを実行します。たとえば、最も前にリフレッシュされたマテリアライズド・ビューのみに必要なエントリをcustomers表のマテリアライズド・ビュー・ログからパージするには、次のプロシージャを実行します。

BEGIN
   DBMS_MVIEW.PURGE_LOG (
      master => 'hr.employees',
      num    => 1,
      flag   => 'DELETE');
END;
/

マテリアライズド・ビュー・ログの所有者またはDBMS_MVIEWパッケージのEXECUTE権限を持つユーザーのみが、PURGE_LOGプロシージャを実行してマテリアライズド・ビュー・ログから行をパージできます。


関連項目:

DBMS_MVIEWパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

マテリアライズド・ビュー・ログの切捨て

マテリアライズド・ビュー・ログが増大し、多数のエクステントが割り当てられた場合、その行のログをパージしても、ログに割り当てられた領域の量は減少しません。このような場合は、マテリアライズド・ビュー・ログを切り捨てる必要があります。マテリアライズド・ビュー・ログの所有者またはDELETE ANY TABLEシステム権限を持つユーザーのみが、マテリアライズド・ビュー・ログを切り捨てることができます。

マテリアライズド・ビュー・ログを切り捨てることによりマテリアライズド・ビュー・ログに割り当てられた領域を減少させるには、次に示す手順を実行します。

手順1   マスター表またはマスター・マテリアライズド・ビューに対する排他ロックを取得して、後続のプロセス中に更新が発生しないようにします。

たとえば、次のような文を実行します。

LOCK TABLE hr.employees IN EXCLUSIVE MODE;
手順2   2番目のデータベース・セッションで、マテリアライズド・ビュー・ログ(MLOG$実表)の行を一時表にコピーします。

たとえば、次のような文を実行します。

CREATE TABLE hr.templog AS SELECT * FROM hr.MLOG$_employees;
手順3    2番目のセッションで、SQL文TRUNCATE TABLEを使用してログを切り捨てます。

たとえば、次のような文を実行します。

TRUNCATE TABLE hr.MLOG$_employees;
手順4   2番目のセッションで、元の行を再挿入します。

この手順を実行すると、依存マテリアライズド・ビューの完全リフレッシュを実行する必要がなくなります。

たとえば、次のような文を実行します。

INSERT INTO hr.MLOG$_employees SELECT * FROM hr.templog;

DROP TABLE hr.templog;
手順5   最初のセッションで、マスター表またはマスター・マテリアライズド・ビューの排他ロックを解除します。

この手順は、ロールバックを実行して行うことができます。

ROLLBACK;

注意:

新しい位置に行をコピーしてからログを切り捨てるまでの間に、マスター表またはマスター・マテリアライズド・ビューに対して行われた変更は、完全リフレッシュを実行するまで表示されません。

マテリアライズド・ビュー・ログが含まれるマスター表の再編成

パフォーマンスを改善し、ディスクの使用率を最適化するために、マスター表を定期的に再編成できます。この項では、マスターの再編成方法および関連するマテリアライズド・ビューの高速リフレッシュ機能の維持方法を説明します。


注意:

これらの項では表のオンライン再定義は説明しません。マテリアライズド・ビュー・ログ、マスター・マテリアライズド・ビューまたはマテリアライズド・ビューが含まれるマスター表のオンライン再定義はできません。オンライン再定義は、マテリアライズド・ビュー・ログを含まないマスター表でのみ可能です。表のオンライン再定義の詳細は、『Oracle Database管理者ガイド』を参照してください。

再編成通知

表を再編成するときに、マテリアライズド・ビュー・ログのROWID情報を無効にする必要があります。表の再編成は、再編成によって表が切り捨てられた場合のみ自動的に検出されます。

表が切り捨てられない場合は、表の再編成を通知する必要があります。表の再編成をサポートするために、DBMS_MVIEWパッケージのBEGIN_TABLE_REORGANIZATIONプロシージャとEND_TABLE_REORGANIZATIONプロシージャによって、表の再編成が通知されます。これらのプロシージャは、クリーンアップ操作を実行し、高速リフレッシュ・メカニズムが必要とするログの整合性とトリガーを検証し、表のマテリアライズド・ビュー・ログ内のROWID情報を無効にします。入力は、再編成されるマスターの名前と所有者です。出力はありません。

マスターの切捨て

表が切り捨てられると、そのマテリアライズド・ビュー・ログも切り捨てられます。ただし、主キー・マテリアライズド・ビューの場合、マテリアライズド・ビュー・ログを切り捨てずに、高速リフレッシュを継続できます。マテリアライズド・ビュー・ログに格納されている情報は保持されますが、マスターが切り捨てられるとマテリアライズド・ビュー・ログはROWIDに関して無効になります。マテリアライズド・ビュー・ログのROWID情報は新しく作成されたことになり、ROWIDマテリアライズド・ビューで高速リフレッシュ用に使用できません。

PRESERVE MATERIALIZED VIEW LOGオプションはデフォルトです。したがって、PRESERVE MATERIALIZED VIEW LOGオプションを指定するか、オプションを指定しない場合、マスターのマテリアライズド・ビュー・ログの情報は保持されますが、現在のROWIDマテリアライズド・ビューはリフレッシュを高速にするために、完全なリフレッシュが行われたにのみログを使用できます。


注意:

以前に高速リフレッシュが可能だったマテリアライズド・ビューのリフレッシュを有効にするには、「データベース表の再編成方法」のガイドラインに従ってください。

PURGE MATERIALIZED VIEW LOGオプションが指定された場合は、マテリアライズド・ビュー・ログがマスターとともにパージされます。

次の2つの文のいずれも、employeesという名前のマスター表が切り捨てられた場合にマテリアライズド・ビュー・ログ情報を保持します。

TRUNCATE TABLE hr.employees PRESERVE MATERIALIZED VIEW LOG;
TRUNCATE TABLE hr.employees;

次の文は、マスター表とともにマテリアライズド・ビュー・ログを切り捨てます。

TRUNCATE TABLE hr.employees PURGE MATERIALIZED VIEW LOG;

データベース表の再編成方法

高速リフレッシュ機能を保持したまま表を再編成する方法が4つ提供されています。これらの方法については、次の項で説明します。他の再編成方法では、後続の高速リフレッシュを使用可能にするために、最初に完全リフレッシュを実行する必要があります。


注意:

マスターの再編成中はダイレクト・ローダーを使用しないでください。ダイレクト・ローダーは列の再順序付けの原因となり、副問合せおよびLOBマテリアライズド・ビューで使用されるログ情報を無効にすることがあります。

表employeesの再編成の方法1

次の手順に従います。

  1. 表employeesに対してDBMS_MVIEW.BEGIN_TABLE_REORGANIZATIONをコールします。

  2. 表名employeesをemployees_oldに変更します。

  3. 表employeesをSELECT * FROM employees_oldとして作成します。

  4. 新しい表employeesに対してDBMS_MVIEW.END_TABLE_REORGANIZATIONをコールします。


注意:

表名を変更すると、対応付けられたPL/SQLのトリガーも表の新しい名前に変更されます。

BEGIN_TABLE_REORGANIZATIONのコールとEND_TABLE_REORGANIZATIONのコールの間に、再編成された表に対してトランザクションが発行されないようにしてください。

表employeesの再編成の方法2

次の手順に従います。

  1. 表employeesに対してDBMS_MVIEW.BEGIN_TABLE_REORGANIZATIONをコールします。

  2. 表employeesをエクスポートします。

  3. 表employeesをPRESERVE MATERIALIZED VIEW LOGオプションで切り捨てます。

  4. 従来型パスを使用して表employeesをインポートします。

  5. 新しい表employeesに対してDBMS_MVIEW.END_TABLE_REORGANIZATIONをコールします。


注意:

再編成中にマスターを切り捨てるときは、切り捨てる表のDDLのPRESERVE MATERIALIZED VIEW LOG句を使用する必要があります。

BEGIN_TABLE_REORGANIZATIONのコールとEND_TABLE_REORGANIZATIONのコールの間に、再編成された表に対してトランザクションが発行されないようにしてください。

表employeesの再編成の方法3

次の手順に従います。

  1. 表employeesに対してDBMS_MVIEW.BEGIN_TABLE_REORGANIZATIONをコールします。

  2. 表employeesをエクスポートします。

  3. 表名employeesをemployees_oldに変更します。

  4. 従来型パスを使用して表employeesをインポートします。

  5. 新しい表employeesに対してDBMS_MVIEW.END_TABLE_REORGANIZATIONをコールします。


注意:

表名を変更すると、対応付けられたPL/SQLのトリガーも表の新しい名前に変更されます。

BEGIN_TABLE_REORGANIZATIONのコールとEND_TABLE_REORGANIZATIONのコールの間に、再編成された表に対してトランザクションが発行されないようにしてください。

表employeesの再編成の方法4

次の手順に従います。

  1. 表employeesに対してDBMS_MVIEW.BEGIN_TABLE_REORGANIZATIONをコールします。

  2. 表employeesの内容を選択してフラット・ファイルに格納します。

  3. 表名employeesをemployees_oldに変更します。

  4. 表employees_oldと同じ形式で表employeesを作成します。

  5. 従来型パスを使用してSQL*Loaderを実行します。

  6. 新しい表employeesに対してDBMS_MVIEW.END_TABLE_REORGANIZATIONをコールします。


注意:

表名を変更すると、対応付けられたPL/SQLのトリガーも表の新しい名前に変更されます。

BEGIN_TABLE_REORGANIZATIONのコールとEND_TABLE_REORGANIZATIONのコールの間に、再編成された表に対してトランザクションが発行されないようにしてください。


関連項目:

DBMS_MVIEWパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

マテリアライズド・ビュー・ログの削除

マテリアライズド・ビュー・ログは、マスターや既存のマテリアライズド・ビューに関係なく削除できます。たとえば、次の条件のいずれかに該当する場合は、マテリアライズド・ビュー・ログを削除できます。

  • マスターのすべてのマテリアライズド・ビューが削除された場合

  • マスターのすべてのマテリアライズド・ビューで、高速リフレッシュではなく、完全リフレッシュを使用する場合

  • マスターが、高速リフレッシュを必要とするマテリアライズド・ビューをサポートしない場合

ここでマスターとは、マスター表またはマスター・マテリアライズド・ビューです。マテリアライズド・ビュー・ログを削除するには、SQL*PlusでDROP MATERIALIZED VIEW LOG文を実行します。たとえば、次の文では、salesスキーマ内のcustomersという名前の表のマテリアライズド・ビュー・ログが削除されます。

DROP MATERIALIZED VIEW LOG ON hr.employees;

マスターの所有者またはDROP ANY TABLEシステム権限を持つユーザーのみが、マテリアライズド・ビュー・ログを削除できます。

エクスポート/インポートによるマテリアライズド・ビュー・サイトのオフライン・インスタンシエーション

レプリケーション環境に新しいマテリアライズド・ビュー・サイトを追加すると、ネットワークの通信量が増大する場合があります。ネットワークの通信量は、ネットワークを通じて、表またはマテリアライズド・ビューの内容全体を新しいマテリアライズド・ビュー・サイトに伝播すると増大します。

このようなネットワークの通信量を最少にするために、オフライン・インスタンシエーション・プロシージャを使用して新しいマテリアライズド・ビュー・サイトを追加できます。オフライン・インスタンシエーションを使用すると、マテリアライズド・ビュー・サイトに新しいマテリアライズド・ビュー・グループを作成できます。オフライン・インスタンシエーションでは、Oracleのエクスポート・ユーティリティおよびインポート・ユーティリティを利用でき、これによって、エクスポート・ファイルを作成し、CD-ROMやテープなどのストレージ・メディアを使用して新しいサイトにデータを転送できます。オフライン・インスタンシエ-ションは、ターゲット・コンピュータがモデム接続を使用するラップトップの可能性があるため、特にマテリアライズド・ビューで役立ちます。

次のスクリプトでは、新しいマテリアライズド・ビュー・サイトで新しいマテリアライズド・ビュー・グループに対するオフライン・インスタンシエーションが実行されます。このマテリアライズド・ビュー・グループは、マスター・サイトの既存のマスター・グループに基づいています。これらのアクションを実行するには、次の要件を満たす必要があります。

実行者:

  • マスター・サイトのレプリケーション管理者

  • 新しいマテリアライズド・ビュー・サイトのマテリアライズド・ビュー管理者

実行場所:

  • ターゲット・マテリアライズド・ビュー・サイト用マスター・サイト

  • 新しいマテリアライズド・ビュー・サイト

レプリケーションの状態: 通常

マテリアライズド・ビュー・サイト:

  • マテリアライズド・ビュー・サイトを設定します。この例では、mview.example.comがマテリアライズド・ビュー・サイトで、orc1.example.comがマスター・サイトです。

  • マテリアライズド・ビュー・サイトのオフライン・インスタンシエーションを実行する前に、適切なスキーマが作成されていることを確認します。

  • マスター・サイトにプロキシ・ユーザーが存在しない場合は作成します。


関連項目:


次に示す手順に従って、mview.example.comというマテリアライズド・ビュー・サイトを設定します。


注意:

このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。

/************************ BEGINNING OF SCRIPT *********************************
手順1   レプリケーション管理者としてマスター・サイトに接続します。
*/
SET ECHO ON

SPOOL offline.out

CONNECT repadmin@orc1.example.com

/*
手順2   必要なマテリアライズド・ビュー・ログが存在しない場合は作成します。

関連マスター表に対するマテリアライズド・ビュー・ログが存在していない場合は、マスター・サイトで作成します。

*/

CREATE MATERIALIZED VIEW LOG ON hr.countries;
CREATE MATERIALIZED VIEW LOG ON hr.departments;
CREATE MATERIALIZED VIEW LOG ON hr.employees;
CREATE MATERIALIZED VIEW LOG ON hr.jobs;
CREATE MATERIALIZED VIEW LOG ON hr.job_history;
CREATE MATERIALIZED VIEW LOG ON hr.locations;
CREATE MATERIALIZED VIEW LOG ON hr.regions;

/*
手順3   マスター・サイトでマテリアライズド・ビュー用の一時スキーマを作成します。

エクスポート用のマテリアライズド・ビューを準備するには、レプリケート・オブジェクトを含むスキーマを作成する必要があります。

次の例では、一時スキーマtemp_schemaを作成します。

*/

CONNECT system@orc1.example.com

CREATE TABLESPACE offline_mview
 DATAFILE 'offline_mview.dbf' SIZE 10M AUTOEXTEND ON
 EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

CREATE TEMPORARY TABLESPACE offline_temp_mview
 TEMPFILE 'offline_temp_mview.dbf' SIZE 5M AUTOEXTEND ON;

ACCEPT password PROMPT 'Enter password for user: ' HIDE

CREATE USER temp_schema IDENTIFIED BY &password;

ALTER USER temp_schema DEFAULT TABLESPACE offline_mview
              QUOTA UNLIMITED ON offline_mview;

ALTER USER temp_schema TEMPORARY TABLESPACE offline_temp_mview;

GRANT ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE,
  CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW, CREATE INDEXTYPE, 
  CREATE OPERATOR, CREATE PROCEDURE, CREATE TRIGGER, CREATE TYPE, 
  CREATE MATERIALIZED VIEW, SELECT ANY TABLE
TO temp_schema;

CONNECT temp_schema@orc1.example.com;

/*
手順4   手順3で作成した個別のスキーマのマスター・サイトにある一時マテリアライズド・ビューを削除します。

このマテリアライズド・ビューには、エクスポート・ユーティリティを使用して新しいマテリアライズド・ビュー・サイトに転送するデータが含まれています。


注意:

SELECT文にデータベース・リンクが含まれていることを確認してください。この例では、データベース・リンクはorc1.example.comです。

*/

CREATE MATERIALIZED VIEW temp_schema.countries
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.countries@orc1.example.com;

CREATE MATERIALIZED VIEW temp_schema.departments 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.departments@orc1.example.com;

CREATE MATERIALIZED VIEW temp_schema.employees 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.employees@orc1.example.com;

CREATE MATERIALIZED VIEW temp_schema.jobs 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.jobs@orc1.example.com;

CREATE MATERIALIZED VIEW temp_schema.job_history 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.job_history@orc1.example.com;

CREATE MATERIALIZED VIEW temp_schema.locations 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.locations@orc1.example.com;

CREATE MATERIALIZED VIEW temp_schema.regions 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT *
      FROM hr.regions@orc1.example.com;

/*
手順5   各データベースにディレクトリ・オブジェクトを作成します。

この操作に含まれる各データベースは、データ・ポンプのダンプ・ファイルを保持するためのディレクトリ・オブジェクトを保有している必要があり、エクスポートまたはインポートを実行するユーザーはこのディレクトリ・オブジェクトに対するREADおよびWRITE権限を持っている必要があります。この例では、データ・ポンプ・エクスポートはマスター・サイトで行われ、データ・ポンプ・インポートはマテリアライズド・ビュー・サイトで行われます。

SQL文CREATE DIRECTORYを使用してディレクトリ・オブジェクトを作成できる管理ユーザーとしてSQL*Plusでデータベースに接続し、データ・ポンプのダンプ・ファイルおよびログ・ファイルを保存するためのディレクトリ・オブジェクトを作成します。次に例を示します。

*/

CONNECT system@orc1.example.com

CREATE DIRECTORY DPUMP_DIR AS '/usr/dpump_dir';

CONNECT system@mview.example.com

CREATE DIRECTORY DPUMP_DIR AS '/usr/dpump_dir';

/*

操作に使用した両方のデータベースでこれらのアクションが完了していることを確認します。この例では、SYSTEMユーザーがディレクトリ・オブジェクトの作成およびすべてのエクスポートとインポートを実行します。ディレクトリ・オブジェクトを所有していないユーザーがエクスポートまたはインポートを実行する場合は、このユーザーにそのディレクトリ・オブジェクトに対するREADおよびWRITE権限を付与します。

手順6   マテリアライズド・ビューを含むスキーマのスキーマレベル・エクスポートを実行します。

コマンドラインで、マテリアライズド・ビュー用のすべてのデータおよびメタデータを含むエクスポートを実行します。この例では、SYSTEMユーザーとして接続します。データ・ポンプ・エクスポート・コマンドの例を次に示します。

expdp system SCHEMAS=temp_schema DIRECTORY=DPUMP_DIR 
DUMPFILE=temp_schema.dmp

関連項目:

データ・ポンプ・エクスポートの実行方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。

*/

PAUSE Press <RETURN> to continue when the export is complete.

/*
手順7   SYSTEMユーザーとして新しいマテリアライズド・ビュー・サイトに接続します。
*/
CONNECT system@mview.example.com

/*
手順8   hrユーザーを削除します。

この例では、マテリアライズド・ビュー・サイトでhrスキーマにマテリアライズド・ビューを作成します。このスキーマは、Oracleのインストール時に作成されます。このスキーマは、この手順を実行すると削除されますが、この例の後半で再作成され、マテリアライズド・ビューが移入されます。

*/

DROP USER hr CASCADE;

/*
手順9   マテリアライズド・ビュー・サイトに必要なスキーマおよびデータベース・リンクが存在しない場合は作成します。

マテリアライズド・ビューのオフライン・インスタンシエーションを実行する前に、新しいマテリアライズド・ビュー・サイトのマテリアライズド・ビューを含むスキーマと、マテリアライズド・ビュー・サイトからマスター・サイトへのデータベース・リンクを作成します。マテリアライズド・ビューは、マスター・サイトのマスター・オブジェクトを含むスキーマと同じスキーマに存在する必要があります。スキーマが存在する場合は、必要な権限を付与してデータベース・リンクを作成します。

*/

CREATE TABLESPACE demo_mview
 DATAFILE 'demo_mview.dbf' SIZE 10M AUTOEXTEND ON
 EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

CREATE TEMPORARY TABLESPACE temp_mview
 TEMPFILE 'temp_mview.dbf' SIZE 5M AUTOEXTEND ON;

CREATE USER hr IDENTIFIED BY &password;

ALTER USER hr DEFAULT TABLESPACE demo_mview
              QUOTA UNLIMITED ON demo_mview;

ALTER USER hr TEMPORARY TABLESPACE temp_mview;

GRANT 
  CREATE SESSION, 
  CREATE TABLE, 
  CREATE PROCEDURE, 
  CREATE SEQUENCE, 
  CREATE TRIGGER, 
  CREATE VIEW, 
  CREATE SYNONYM, 
  ALTER SESSION,
  CREATE MATERIALIZED VIEW,
  ALTER ANY MATERIALIZED VIEW,
  CREATE DATABASE LINK
TO hr;

CONNECT hr@mview.example.com

CREATE DATABASE LINK orc1.example.com CONNECT TO hr IDENTIFIED by &password;

/*
手順10   マテリアライズド・ビュー管理者として新しいマテリアライズド・ビュー・サイトに接続します。
*/
CONNECT mviewadmin@mview.example.com

/*
手順11   空のマテリアライズド・ビュー・グループを作成します。

新しいマテリアライズド・ビュー・サイトでDBMS_REPCAT.CREATE_MVIEW_REPGROUPプロシージャを実行し、マテリアライズド・ビューを追加するための空のマテリアライズド・ビュー・グループを作成します。

*/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
      gname            => 'hr_repg',
      master           => 'orc1.example.com',
      propagation_mode => 'ASYNCHRONOUS');
END;
/

/*
手順12   空のリフレッシュ・グループを作成します。

特定のリフレッシュ・グループに追加されたすべてのマテリアライズド・ビューは、同時にリフレッシュされます。このため、リフレッシュ・グループ内の関連するマテリアライズド・ビュー間では、トランザクション一貫性が保たれます。

*/

BEGIN
   DBMS_REFRESH.MAKE (
      name => 'mviewadmin.hr_refg',
      list => '', 
      next_date => SYSDATE, 
      interval => 'SYSDATE + 1/24',
      implicit_destroy => FALSE, 
      rollback_seg => '',
      push_deferred_rpc => TRUE, 
      refresh_after_errors => FALSE);
END;
/

/*
手順13   個別の端末ウィンドウで、新しいマテリアライズド・ビュー・サイトにエクスポート・ダンプ・ファイルを転送します。

新しいマテリアライズド・ビュー・サイトへは、DBMS_FILE_TRANSFERパッケージ、FTPなどの方法により、エクスポート・ダンプ・ファイルが転送されます。

*/ 

PAUSE Press <RETURN> to continue after transferring the dump file. 

/*
手順14   個別の端末ウィンドウで、新しいマテリアライズド・ビュー・サイトの所有者にマテリアライズド・ビューをインポートします。

コマンドラインで、手順5でエクスポートしたファイルのインポートを実行します。この例では、SYSTEMユーザーとして接続します。

データ・ポンプによってデータをインポートする場合は、REMAP_SCHEMAパラメータを使用して、マスター・サイトに作成した一時ユーザーからマテリアライズド・ビュー・サイトのマテリアライズド・ビューの所有者にデータをインポートします。この例では、temp_schemaがマスター・サイトの一時ユーザーで、hrがマテリアライズド・ビュー・サイトのマテリアライズド・ビューの所有者です。

また、データ・ポンプを使用する場合は、マスター・サイトとマテリアライズド・ビュー・サイトで表領域が異なるときにREMAP_TABLESPACEパラメータを使用できます。この例では、手順3で作成したoffline_mviewがマスター・サイトの表領域で、手順9で作成したdemo_mviewがマテリアライズド・ビュー・サイトの表領域です。

インポート・コマンドの例を次に示します。

impdp system DIRECTORY=DPUMP_DIR DUMPFILE=temp_schema.dmp 
REMAP_SCHEMA=temp_schema:hr REMAP_TABLESPACE=offline_mview:demo_mview

DBAロールまたはIMP_FULL_DATABASEロールを所有するユーザーのみがREMAP_SCHEMAパラメータを使用してインポートできます。


関連項目:

データ・ポンプ・インポートの実行方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。

*/

PAUSE Press <RETURN> to continue when the import is complete.

/*
手順15   マテリアライズド・ビューをマテリアライズド・ビュー・グループに追加します。

DBMS_REPCAT.CREATE_MVIEW_REPOBJECTプロシージャを実行して、手順9で作成したマテリアライズド・ビュー・グループにマテリアライズド・ビューを追加します。

*/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'countries',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'departments',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'employees',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'jobs',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'job_history',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'locations',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname             => 'hr_repg',
      sname             => 'hr',
      oname             => 'regions',
      type              => 'SNAPSHOT',
      min_communication => TRUE);
END;
/

/*
手順16   マテリアライズド・ビューをリフレッシュ・グループに追加します。

リフレッシュ・グループに追加するすべてのマテリアライズド・ビュー・グループ・オブジェクトは同時にリフレッシュされるので、関連するマテリアライズド・ビュー間での参照整合性が保たれます。DBMS_REFRESH.ADDプロシージャを実行して、手順12で作成したリフレッシュ・グループにマテリアライズド・ビューを追加します。

*/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.countries',
      lax => TRUE);
END;
/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.departments',
      lax => TRUE);
END;
/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.employees',
      lax => TRUE);
END;
/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.jobs',
      lax => TRUE);
END;
/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.job_history',
      lax => TRUE);
END;
/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.locations',
      lax => TRUE);
END;
/

BEGIN
   DBMS_REFRESH.ADD (
      name => 'mviewadmin.hr_refg',
      list => 'hr.regions',
      lax => TRUE);
END;
/

/*
手順17   マテリアライズド・ビューをリフレッシュして、マスター・サイトで登録します。

新しいマテリアライズド・ビュー・サイトにあるマテリアライズド・ビューをリフレッシュすると、マスター表からの最新の変更が取得される以外に、ターゲット・マスター・サイトにあるオフライン・インスタンシエーションを行ったマテリアライズド・ビューが登録されます。

*/

EXECUTE DBMS_REFRESH.REFRESH ('hr_refg');

/*
手順18   SYSTEMユーザーとしてマスター・サイトに接続します。
*/
CONNECT system@orc1.example.com

/*
手順19   一時スキーマを削除して、マスター・サイトにある、手順4で作成した一時マテリアライズド・ビューを削除します。
*/
DROP USER temp_schema CASCADE;

SET ECHO OFF

SPOOL OFF

/************************* END OF SCRIPT **********************************/

マテリアライズド・ビュー・グループに対するグループ所有者の使用

新しいマテリアライズド・ビューのグループおよびその関連オブジェクトを定義する際にグループ所有者を指定すると、単一のマテリアライズド・ビュー・サイトにある同じレプリケーション・グループに基づいて複数のマテリアライズド・ビュー・グループを作成できます。また、グループ所有者を指定すると、マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトの同じレプリケーション・グループに基づいた複数のマテリアライズド・ビュー・グループを作成できます。これは、マテリアライズド・ビュー・サイトで、様々なスキーマにマテリアライズド・ビュー・グループを作成することによって行います。この例では、スキーマbobおよびjaneをグループ所有者として使用し、これらのスキーマがマテリアライズド・ビュー・サイトにあることを前提としています。

実行者:

  • 新しいマテリアライズド・ビュー・サイトのマテリアライズド・ビュー管理者

実行場所:

  • マテリアライズド・ビュー・サイト

レプリケーションの状態: 通常

マテリアライズド・ビュー・サイト:

  • マテリアライズド・ビュー・サイトを設定します。この例では、mv1.example.comがマテリアライズド・ビュー・サイトで、orc1.example.comがマスター・サイトです。

  • マスター・サイトにプロキシ・ユーザーが存在しない場合は作成します。

  • マスター・サイトのhrスキーマに表のマテリアライズド・ビュー・ログが存在しない場合は作成します。

次に示す手順に従って、グループ所有者を使用します。


注意:

このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。


関連項目:

  • グループ所有者の使用方法、および複数のデータ・セットを使用するメリットの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

  • マスター・サイトの設定方法、およびマスター・サイトでのプロキシ・ユーザーの作成方法の詳細は、「マスター・サイトの設定」を参照してください。

  • マテリアライズド・ビュー・サイトの設定方法の詳細は、「マテリアライズド・ビュー・サイトの設定」を参照してください。


/************************* BEGINNING OF SCRIPT ******************************
手順1   hrスキーマからマスター・サイトにデータベース・リンクを作成します。

マテリアライズド・ビュー・グループを構築する前に、リモート・マテリアライズド・ビュー・サイトにレプリケート・スキーマが存在して、必要なデータベース・リンクが作成されていることを確認します。

この例で、hrスキーマが存在しない場合は作成します。マテリアライズド・ビュー・サイトにhrスキーマが存在する場合は、必要な権限を付与します。

*/

CONNECT system@mv1.example.com

CREATE TABLESPACE demo_mv1
 DATAFILE 'demo_mv1.dbf' SIZE 10M AUTOEXTEND ON
 EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

CREATE TEMPORARY TABLESPACE temp_mv1
 TEMPFILE 'temp_mv1.dbf' SIZE 5M AUTOEXTEND ON;

ACCEPT password PROMPT 'Enter password for user: ' HIDE

CREATE USER hr IDENTIFIED BY &password;

ALTER USER hr DEFAULT TABLESPACE demo_mv1
              QUOTA UNLIMITED ON demo_mv1;

ALTER USER hr TEMPORARY TABLESPACE temp_mv1;

GRANT 
  CREATE SESSION, 
  CREATE TABLE, 
  CREATE PROCEDURE, 
  CREATE SEQUENCE, 
  CREATE TRIGGER, 
  CREATE VIEW, 
  CREATE SYNONYM, 
  ALTER SESSION,
  CREATE MATERIALIZED VIEW,
  ALTER ANY MATERIALIZED VIEW,
  CREATE DATABASE LINK
 TO hr;

/*


レプリケート・スキーマへのデータベース・リンクが存在しない場合は作成します。

マテリアライズド・ビュー・グループを構築する前に、レプリケーション・スキーマへの必要なデータベース・リンクが存在することを確認します。マテリアライズド・ビューの所有者は、マスター・サイトの設定時に作成したproxy_refresherへのデータベース・リンクが必要です。

*/

SET ECHO ON

SPOOL mv_group_owner.out

CONNECT hr@mv1.example.com

CREATE DATABASE LINK orc1.example.com 
   CONNECT TO proxy_refresher IDENTIFIED BY &password;

/*
手順2   マテリアライズド・ビュー管理者としてマテリアライズド・ビュー・サイトに接続します。
*/
CONNECT mviewadmin@mv1.example.com

/*
手順3   CREATE_MVIEW_REPGROUPプロシージャを使用して、マテリアライズド・ビュー・グループをグループ所有者(gowner)bobで作成します。

gnameパラメータで指定したレプリケーション・グループは、ターゲット・マスター・サイトまたはマスター・マテリアライズド・ビュー・サイトでレプリケートするレプリケーション・グループの名前と一致する必要があります。gownerパラメータを使用すると、同じのマテリアライズド・ビュー・サイトにある同じレプリケーション・グループに基づいて複数のマテリアライズド・ビュー・グループを作成できる、追加の識別子を指定できます。

この例では、グループ所有者bobおよびjane用にマテリアライズド・ビュー・グループが作成され、どちらのマテリアライズド・ビュー・グループも同じレプリケーション・グループをベースとします。

*/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
      gname => 'hr_repg',
      master => 'orc1.example.com',
      propagation_mode => 'ASYNCHRONOUS',
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
      gname => 'hr_repg',
      master => 'orc1.example.com',
      propagation_mode => 'ASYNCHRONOUS',
      gowner => 'jane');
END;
/

/*
手順4   bobが所有するマテリアライズド・ビューを作成します。

マテリアライズド・ビュー・オブジェクトを作成するときに使用されるgowner値は、前のプロシージャでマテリアライズド・ビュー・グループを作成したときに指定したgowner値と一致する必要があります。マテリアライズド・ビュー・グループを作成した後、bobjaneが所有するhr_repgマテリアライズド・ビュー・グループの、同じマスターをベースとするマテリアライズド・ビューを作成できます。この例では、これらのユーザーが存在していることを前提としています。


注意:

各オブジェクトは一意の名前を持つ必要があります。あるgownerを使用して複数のマテリアライズド・ビュー・グループを使用するときは、重複するオブジェクト名は問題になる可能性があります。オブジェクトのネーミングの競合を回避するため、次のプロシージャに示すように、作成するオブジェクト名の末尾にgowner値を追加してもかまいません(CREATEMATERIALIZEDVIEWhr.countries_bobなど)。このようなネーミング・メソッドにより、競合する名前を持つオブジェクトの作成を回避できます。

マテリアライズド・ビューを作成するときは、必ず、マテリアライズド・ビューに対する問合せの中で表の所有者のスキーマ名を指定します。次の例では、各問合せにおける表の所有者としてhrが指定されています。

*/

CREATE MATERIALIZED VIEW hr.countries_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.countries@orc1.example.com;

CREATE MATERIALIZED VIEW hr.departments_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.departments@orc1.example.com;

CREATE MATERIALIZED VIEW hr.employees_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.employees@orc1.example.com;

CREATE MATERIALIZED VIEW hr.jobs_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.jobs@orc1.example.com;

CREATE MATERIALIZED VIEW hr.job_history_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.job_history@orc1.example.com;

CREATE MATERIALIZED VIEW hr.locations_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.locations@orc1.example.com;

CREATE MATERIALIZED VIEW hr.regions_bob 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.regions@orc1.example.com;

/*
手順5   janeが所有するマテリアライズド・ビューを作成します。
*/
CREATE MATERIALIZED VIEW hr.departments_jane 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.departments@orc1.example.com;

CREATE MATERIALIZED VIEW hr.employees_jane 
  REFRESH FAST WITH PRIMARY KEY FOR UPDATE 
  AS SELECT * FROM hr.employees@orc1.example.com;

/*
手順6   bobが所有するマテリアライズド・ビューをマテリアライズド・ビュー・グループに追加します。
*/
BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'countries_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'departments_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'employees_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'jobs_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'job_history_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'locations_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'regions_bob',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'bob');
END;
/

/*
手順7   janeが所有するマテリアライズド・ビューをマテリアライズド・ビュー・グループに追加します。
*/
BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'departments_jane',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'jane');
END;
/

BEGIN
   DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
      gname => 'hr_repg',
      sname => 'hr',
      oname => 'employees_jane',
      type => 'SNAPSHOT',
      min_communication => TRUE,
      gowner => 'jane');
END;
/

SET ECHO OFF

SPOOL OFF

/*
手順8   マテリアライズド・ビューをリフレッシュ・グループに追加します。

関連項目:

リフレッシュ・グループへのマテリアライズド・ビューの追加の詳細は、第5章「マテリアライズド・ビュー・グループの作成」(手順6)を参照してください。

/************************* END OF SCRIPT **********************************/