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

前
 
次
 

4 デプロイメント・テンプレートの作成

この章では、レプリケーション・マネージメントAPIを使用して、デプロイメント・テンプレートを作成する方法を説明します。

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

マテリアライズド・ビュー環境を構築する前に、マスター・サイトの設定、マスター・グループの作成および目的のマテリアライズド・ビュー・サイトの設定を行います。また、作成したマテリアライズド・ビュー・サイトでのアクティビティによって、マスター・サイトで競合が発生する可能性がある場合は、マテリアライズド・ビュー・グループを作成する前に、マテリアライズド・ビューのマスター表に対して競合解消を設定します。

Oracleデプロイメント・テンプレートの概念

Oracleで提供されるデプロイメント・テンプレートを使用すると、データベース管理者はマテリアライズド・ビュー環境をパッケージ化して、その配布とインストールを簡単かつ安全に行ったり、カスタマイズしたりできます。デプロイメント・テンプレートは、1つのマテリアライズド・ビューと固定データ・セットのみで単純に構成することも、数百のマテリアライズド・ビューと1つ以上の変数に基づく動的データ・セットで複雑に構成することもできます。この目的は、環境を1回定義して、必要に応じてそのデプロイメント・テンプレートをデプロイすることです。Oracleデプロイメント・テンプレートの特徴を次に示します。

  • 集中管理

  • マテリアライズド・ビュー環境を繰り返しデプロイ可能

  • テンプレート・パラメータを使用したリモート・サイトでのデータのサブセット化

  • テンプレートのインスタンス化とデータ・アクセスの制御を認証されたユーザーのリスト

マテリアライズド・ビュー環境を適用するために、DBAがマスター・サイトにデプロイメント・テンプレートを作成します。このテンプレートには、マテリアライズド・ビュー環境をデプロイするために必要なすべての情報を格納します(たとえば、リモート・サイトとターゲット・リフレッシュ・グループでオブジェクトを作成するためのDDLなどを格納します)。また、このテンプレートには、ユーザーのセキュリティ情報やカスタム・マテリアライズド・ビューを作成するためのテンプレート・パラメータへのリンクも含まれています。

次のオブジェクト型のインスタンス化では、デプロイメント・テンプレートは使用できません。

  • ユーザー定義型

  • ユーザー定義型本体

  • ユーザー定義演算子

  • 索引タイプ

これらのオブジェクト型に基づいたオブジェクトのインスタンス化でも、デプロイメント・テンプレートは使用できません。


関連項目:

デプロイメント・テンプレートの概念については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

デプロイメント・テンプレートを作成する前に

マスター・サイトの1つで、高速リフレッシュのマテリアライズド・ビューをサポートするには、マテリアライズド・ビューにレプリケートされる各マスター表のマテリアライズド・ビュー・ログを作成する必要があります。

この章の例では、hrサンプル・スキーマを使用します。hrスキーマの表のマテリアライズド・ビュー・ログを作成するには、次の命令を入力します。

CONNECT hr@orc3.example.com
Enter password: password

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;

関連項目:

このSQL文の詳細は、『Oracle Database SQL言語リファレンス』CREATE MATERIALIZED VIEW LOG文に関する項を参照してください。

デプロイメント・テンプレートの作成

この項では、レプリケーション・マネージメントAPIを使用してデプロイメント・テンプレートを作成する、完全なスクリプト例を示します。


関連項目:

デプロイメント・テンプレートの概念およびアーキテクチャについては、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

図4-1 デプロイメント・テンプレートの作成

図4-1の説明が続きます。
「図4-1 デプロイメント・テンプレートの作成」の説明

スクリプト内のコメントにも、必ず目を通してください。コメントには、レプリケーション・マネージメントAPIで配置テンプレートを作成するための重要で役立つ情報が記述されています。


注意:

  • 列のサブセットをマスター表とするマテリアライズド・ビューを作成する場合は、Oracle Enterprise ManagerのAdvanced Replicationインタフェースを使用します。列のサブセット化の詳細は、『Oracle Databaseアドバンスト・レプリケーション』およびAdvanced Replicationインタフェースのオンライン・ヘルプを参照してください。

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


/************************* BEGINNING OF SCRIPT ******************************

このスクリプトでは、4つのテンプレート・オブジェクト、2つのテンプレート・パラメータ、ユーザー・パラメータ値セットおよび許可されたユーザーを含むプライベート・デプロイメント・テンプレートが作成されます。次に示す手順に従って、テンプレートを構築します。

手順1   デプロイメント・テンプレートを作成します。

デプロイメント・テンプレートの構成要素を作成する前に、CREATE_RERESH_TEMPLATEプロシージャを使用して、デプロイメント・テンプレートの名前、テンプレートの特性(パブリックまたはプライベートのステータス、ターゲット・リフレッシュ・グループおよび所有者)を定義します。

*/

SET ECHO ON

SPOOL create_dt.out

CONNECT repadmin@orc3.example.com

DECLARE
   a NUMBER;
BEGIN
   a := DBMS_REPCAT_RGT.CREATE_REFRESH_TEMPLATE (
           owner => 'hr',
           refresh_group_name => 'hr_refg',
           refresh_template_name => 'hr_refg_dt',
           template_comment => 'Human Resources Deployment Template',
           public_template => 'N');
END;
/

/*
手順2   テンプレートにオブジェクトを追加します。

countries_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.countries_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      country_id, country_name, region_id 
      FROM hr.countries@:dblink';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'countries_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
END;
/

/*

マテリアライズド・ビューを作成するときは、必ず、マテリアライズド・ビューに対する問合せの中で表の所有者のスキーマ名を指定します。前述の例では、countries表の所有者としてhrを指定しました。

departments_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.departments_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      department_id, department_name, manager_id, location_id
      FROM hr.departments@:dblink';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'departments_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
END;
/

/*

employees_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.employees_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      employee_id, first_name, last_name, email, phone_number, 
      hire_date, job_id, salary, commission_pct, manager_id, 
      department_id
      FROM hr.employees@:dblink WHERE department_id = :dept';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'employees_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
END;
/

/*

jobs_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.jobs_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      job_id, job_title, min_salary, max_salary 
      FROM hr.jobs@:dblink';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'jobs_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
END;
/

/*

job_history_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.job_history_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      employee_id, start_date, end_date, job_id, department_id 
      FROM hr.job_history@:dblink';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'job_history_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
 END;
/

/*

locations_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.locations_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      location_id, street_address, postal_code, city, 
      state_province, country_id 
      FROM hr.locations@:dblink';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'locations_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
END;
/

/*

regions_mvマテリアライズド・ビューを作成します。

*/

DECLARE
   tempstring VARCHAR2(3000);
   a NUMBER;
BEGIN
   tempstring := 'CREATE MATERIALIZED VIEW hr.regions_mv 
      REFRESH FAST WITH PRIMARY KEY FOR UPDATE AS SELECT 
      region_id, region_name 
      FROM hr.regions@:dblink';
   a := DBMS_REPCAT_RGT.CREATE_TEMPLATE_OBJECT (
           refresh_template_name => 'hr_refg_dt',
           object_name => 'regions_mv',
           object_type => 'MATERIALIZED VIEW',
           ddl_text => tempstring,
           master_rollback_seg => 'rbs');
END;
/

/*
手順3   パラメータのデフォルト値を定義します。

他の手順では、CREATE_*ファンクションおよびプロシージャではなく、ALTER_TEMPLATE_PARMプロシージャを使用して、テンプレート・パラメータの値とプロンプト文字列を定義します。実パラメータは、手順1で作成されたので、ALTER_*プロシージャを使用します。:dblinkおよび:deptテンプレート・パラメータはddl_textパラメータで定義済です。OracleはDDL中のこれらのパラメータを検出して、自動的にテンプレート・パラメータを作成します。テンプレート・パラメータ情報の残り(すなわち、デフォルトのパラメータ値とプロンプト文字列)を定義するには、ALTER_TEMPLATE_PARMプロシージャを使用します。

次のタスクを実行して、パラメータのデフォルト値を定義します。

deptパラメータのデフォルト値を定義します。

*/

BEGIN 
   DBMS_REPCAT_RGT.ALTER_TEMPLATE_PARM ( 
      refresh_template_name => 'hr_refg_dt', 
      parameter_name => 'dept', 
      new_default_parm_value => '30', 
      new_prompt_string => 'Enter your department number:', 
      new_user_override => 'Y'); 
END; 
/ 

/*

dblinkパラメータのデフォルト値を定義します。

*/

BEGIN 
   DBMS_REPCAT_RGT.ALTER_TEMPLATE_PARM ( 
      refresh_template_name => 'hr_refg_dt', 
      parameter_name => 'dblink', 
      new_default_parm_value => 'orc3.example.com', 
      new_prompt_string => 'Enter your master site:', 
      new_user_override => 'Y'); 
END; 
/  

/*
手順4   ユーザー・パラメータ値を定義します。

個々のリモート・マテリアライズド・ビュー・サイトにおけるカスタム・データ・セットのインスタンス化を自動的に行うためには、指定したユーザーが、ターゲット・テンプレートをインスタンス化した場合に自動的に使用されるユーザー・パラメータ値を定義します。CREATE_USER_PARM_VALUEプロシージャを使用すると、ユーザー・パラメータに値を割り当てることができます。

次のタスクを実行して、ユーザー・パラメータ値を定義します。

ユーザーhrに対するdeptユーザー・パラメータ値を定義します。

*/

DECLARE
   a NUMBER;
BEGIN
   a := DBMS_REPCAT_RGT.CREATE_USER_PARM_VALUE (
           refresh_template_name => 'hr_refg_dt',
           parameter_name => 'dept',
           user_name => 'hr',
           parm_value => '20');
END;
/

/*

ユーザーhrに対するdblinkユーザー・パラメータ値を定義します。

*/

DECLARE
   a NUMBER;
BEGIN
   a := DBMS_REPCAT_RGT.CREATE_USER_PARM_VALUE (
           refresh_template_name => 'hr_refg_dt',
           parameter_name => 'dblink',
           user_name => 'hr',
           parm_value => 'orc3.example.com');
END;
/

/*
手順5   プライベート・テンプレートに対してユーザーを認証します。

これはプライベート・テンプレート(手順1で定義したDBMS_REPCAT_RGT.CREATE_REFRESH_TEMPLATEファンクションのpublic_template => 'N')であるため、dt_personnelデプロイメント・テンプレートのインスタンス化をユーザーに認証する必要があります。認証ユーザーを作成するには、DBMS_REPCAT_RGTパッケージのCREATE_USER_AUTHORIZATIONファンクションを使用します。

*/

DECLARE
   a NUMBER;
BEGIN
   a := DBMS_REPCAT_RGT.CREATE_USER_AUTHORIZATION (
           user_name => 'hr',
           refresh_template_name => 'hr_refg_dt');
END;
/

COMMIT;

SET ECHO OFF

SPOOL OFF

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

デプロイメント・テンプレートをパッケージ化してインスタンス化

デプロイメント・テンプレートを作成した後、テンプレートをパッケージ化してインスタンス化を行う必要があります。ここでは、オンラインとオフラインのインスタンス化プロシージャの使用例を示します。オンラインとオフラインのインスタンス化プロシージャは非常に類似しており、必要に応じてINSTANTIATE_ONLINEファンクションとINSTANTIATE_OFFLINEファンクションのいずれかを使用します。この項では、インスタンス化スクリプトの作成およびファイルへのそのスクリプトの保存という2つのタスクについて説明します。

図4-2 デプロイメント・テンプレートのパッケージ化およびインスタンス化

図4-2の説明が続きます。
「図4-2 デプロイメント・テンプレートのパッケージ化およびインスタンス化」の説明

デプロイメント・テンプレートのパッケージ化

INSTANTIATE_OFFLINEまたはINSTANTIATE_ONLINEファンクションを実行すると、OracleではUSER_REPCAT_TEMP_OUTPUTデータ・ディクショナリ・ビューにスクリプトが移入されて、リモート・マテリアライズド・ビュー環境が構築されます。オンラインとオフラインのスクリプトのいずれにも、デプロイメント・テンプレートで指定されたオブジェクトを作成するためのSQL文が含まれます。ただし、オフライン・インスタンシエーション・スクリプトには、オブジェクトに移入するデータが含まれます。オンライン・インスタンシエーション・スクリプトには、このデータは含まれません。オンライン・インスタンシエーションでは、マテリアライズド・ビュー・サイトがマスター・サイトに接続して、このデータをダウンロードします。

必要に応じて、「デプロイメント・テンプレートをパッケージ化してオフライン・インスタンシエーション」または「デプロイメント・テンプレートをパッケージ化してオンライン・インスタンシエーション」に示す手順を実行してください。


注意:

INSTANTIATE_OFFLINEまたはINSTANTIATE_ONLINEファンクションのいずれかを、特定のマテリアライズド・ビュー・サイトに対して複数回実行する必要がある場合は、サイトのテンプレートを再パッケージする前に、DBMS_REPCAT_RGTパッケージのDROP_SITE_INSTANTIATIONプロシージャを実行します。このプロシージャを実行しない場合は、テンプレート・サイトの重複を示すエラーがOracleから戻されます。

デプロイメント・テンプレートをパッケージ化してオフライン・インスタンシエーション

INSTANTIATE_OFFLINEファンクションは、指定されたデプロイメント・テンプレートの内容に従って、マテリアライズド・ビュー環境を構築するスクリプトを生成します。このスクリプトには、マテリアライズド・ビュー環境を構築するためのDDL(CREATE文)の他に、マテリアライズド・ビュー環境に適切なデータ・セットを移入するためのDML(INSERT文)が含まれています。


注意:

デプロイメント・テンプレートをパッケージ化するマスター・サイトに、デプロイメント・テンプレート用のターゲット・マスター・オブジェクトが含まれている場合は、ループバック・データベース・リンクを作成する必要があります。

--Use the INSTANTIATE_OFFLINE function to package the 
--template for offline instantiation by a remote materialized view 
--site. Executing this procedure both creates a script that 
--creates that materialized view environment and populates the
--environment with the proper data set. This script is stored
--in the temporary USER_REPCAT_TEMP_OUTPUT view.

CONNECT repadmin@orc3.example.com
Enter password: password

SET SERVEROUTPUT ON
DECLARE
   dt_num NUMBER;
BEGIN
   dt_num := DBMS_REPCAT_RGT.INSTANTIATE_OFFLINE(
               refresh_template_name => 'hr_refg_dt',
               user_name => 'hr',
               site_name => 'mv4.example.com',
               next_date => SYSDATE,
               interval => 'SYSDATE + (1/144)');
   DBMS_OUTPUT.PUT_LINE('Template ID = ' || dt_num);
END;
/
COMMIT;
/

dt_num変数に戻される値を記録しておきます。この値は、USER_REPCAT_TEMP_OUTPUTデータ・ディクショナリ・ビューから選択して、生成されたスクリプトを取り出すときに使用する必要があります。このタスクを実行した後、「インスタンス化スクリプトのファイルへの保存」に示す手順に従ってください。このスクリプトは、個々のマテリアライズド・ビュー・サイトに一意であり、他のマテリアライズド・ビュー・サイトでは使用できません。

デプロイメント・テンプレートをパッケージ化してオンライン・インスタンシエーション

INSTANTIATE_ONLINEファンクションは、指定されたデプロイメント・テンプレートの内容に従って、マテリアライズド・ビュー環境を構築するスクリプトを生成します。このスクリプトがリモート・マテリアライズド・ビュー・サイトで実行されると、スクリプト内のDDL(CREATE文)に従ってマテリアライズド・ビュー・サイトが作成され、マスター・サイトから適切なデータ・セットが移入されます。この処理では、リモート・マテリアライズド・ビュー・サイトが、マスター・サイトにオンラインで接続されている必要があります。


関連項目:

マテリアライズド・ビュー・サイトのその他の要件は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

--Use the INSTANTIATE_ONLINE function to "package" the 
--template for online instantiation by a remote materialized view 
--site. Executing this procedure creates a script which can
--then be used to create a materialized view environment. This script 
--is stored in the temporary USER_REPCAT_TEMP_OUTPUT view.

CONNECT repadmin@orc3.example.com
Enter password: password

SET SERVEROUTPUT ON
DECLARE
   dt_num NUMBER;
BEGIN
   dt_num := DBMS_REPCAT_RGT.INSTANTIATE_ONLINE(
               refresh_template_name => 'hr_refg_dt',
               user_name => 'hr',
               site_name => 'mv4.example.com',
               next_date => SYSDATE,
               interval => 'SYSDATE + (1/144)');
   DBMS_OUTPUT.PUT_LINE('Template ID = ' || dt_num);
END;
/
COMMIT;
/

dt_num変数に戻される値を記録しておきます。この値は、USER_REPCAT_TEMP_OUTPUTデータ・ディクショナリ・ビューから選択して、生成されたスクリプトを取り出すときに使用する必要があります。このタスクを実行した後、「インスタンス化スクリプトのファイルへの保存」に示す手順に従ってください。

インスタンス化スクリプトのファイルへの保存

USER_REPCAT_TEMP_OUTPUTデータ・ディクショナリ・ビューの内容を効率的に保存するには、UTL_FILEパッケージを使用して、USER_REPCAT_TEMP_OUTPUTビューのTEXT列の内容をファイルに保存します。

これらの内容は、ディレクトリ・オブジェクトに対応するディレクトリに保存されます。ディレクトリ・オブジェクトを作成するには、CREATE ANY DIRECTORY権限が必要です。レプリケーション管理者がこの権限を持っていない場合は、権限を付与できる管理ユーザーとして接続します。次に例を示します。

GRANT CREATE ANY DIRECTORY TO repadmin;

注意:

USER_REPCAT_TEMP_OUTPUTデータ・ディクショナリ・ビューの内容は一時的なため、INSTANTIATE_OFFLINEファンクションまたはINSTANTIATE_ONLINEファンクションのいずれかをコールした直後に次のアクションを実行する必要があります。「デプロイメント・テンプレートのパッケージ化」の手順を完了していない場合には、ここで実行し、次のアクションを完了します。


関連項目:

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

次の項目を入力して、デプロイメント・テンプレート・スクリプトをファイルに保存します。

DECLARE 
  fh UTL_FILE.FILE_TYPE; 
  CURSOR ddlcursor(myid NUMBER) IS 
  SELECT TEXT FROM USER_REPCAT_TEMP_OUTPUT WHERE OUTPUT_ID = myid ORDER BY LINE; 
BEGIN 
  fh := UTL_FILE.FOPEN ('file_location', 'file_name', 'w'); 
  UTL_FILE.PUT_LINE (fh, 'SET ECHO OFF;'); 
  FOR myrec IN ddlcursor(template_id) LOOP
    UTL_FILE.PUT_LINE(fh, myrec.text); 
  END LOOP; 
  UTL_FILE.PUT_LINE (fh, 'SET ECHO ON;'); 
  UTL_FILE.FFLUSH(fh); 
  UTL_FILE.FCLOSE(fh); 
END; 
/ 

file_locationfile_nameおよびtemplate_idはプレースホルダであることに注意してください。使用している環境に合わせて正しい値に置換します。

  • file_locationプレースホルダを、テンプレート・スクリプトの保存先ディレクトリを表すディレクトリ・オブジェクトの名前に置換します。

  • file_nameプレースホルダを、テンプレートのスクリプトに使用する名前で置換します。

  • template_idプレースホルダを、以前テンプレートをパッケージ化したときに、INSTANTIATE_OFFLINEまたはINSTANTIATE_ONLINEファンクションから戻された番号で置換します。

たとえば、次のような値があるとします。

プレースホルダ
file_location /home/gen_files/
file_name sf.sql
template_id 18

これらの値を指定した後、レプリケーション管理者としてマスター・サイトに接続します。次のプロシージャを実行してテンプレートのスクリプトをファイルに保存します。

CONNECT repadmin@orc3.example.com
Enter password: password

CREATE DIRECTORY GFILES AS '/home/gen_files';

DECLARE 
  fh UTL_FILE.FILE_TYPE; 
  CURSOR ddlcursor(myid NUMBER) IS 
  SELECT TEXT FROM USER_REPCAT_TEMP_OUTPUT WHERE OUTPUT_ID = myid 
  ORDER BY LINE; 
BEGIN 
  fh := UTL_FILE.FOPEN ('GFILES', 'sf.sql', 'w'); 
  UTL_FILE.PUT_LINE (fh, 'SET ECHO OFF;'); 
  FOR myrec IN ddlcursor(18) LOOP
    UTL_FILE.PUT_LINE(fh, myrec.text); 
  END LOOP; 
  UTL_FILE.PUT_LINE (fh, 'SET ECHO ON;'); 
  UTL_FILE.FFLUSH(fh); 
  UTL_FILE.FCLOSE(fh); 
END; 
/ 

インスタンス化ファイルの配布

インスタンス化スクリプトを作成して、それをファイルに保存した後、テンプレートをインスタンス化するリモート・マテリアライズド・ビュー・サイトにこのファイルを配布する必要があります。ファイルを配布するには、FTPサイトにファイルを送信するか、CD-ROM、フロッピィ・ディスクなどに保存します。ファイルは、DBMS_FILE_TRANSFERパッケージを使用して転送することもできます。

デプロイメント・テンプレートのインスタンス化

インスタンス化スクリプトがリモート・マテリアライズド・ビュー・サイトに配布された後、そこでデプロイメント・テンプレートをインスタンス化できます。デプロイメント・テンプレートをインスタンス化する前に、マテリアライズド・ビュー・サイトが設定されていることを確認してください。次のスクリプトは、リモート・マテリアライズド・ビュー・サイトでインスタンス化処理を実行する方法を示します。


関連項目:

  • デプロイメント・テンプレートをインスタンス化する前に満たす必要があるマテリアライズド・ビュー・サイトの要件は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

  • 「マテリアライズド・ビュー・サイトの設定」



注意:

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

/************************* BEGINNING OF SCRIPT ******************************
手順1   マテリアライズド・ビュー・サイトにスキーマが存在しない場合は作成します。

リモート・マテリアライズド・ビュー・サイトでインスタンス化スクリプトを実行する前に、レプリケート・オブジェクトを含むスキーマを作成します。

次の例は、hrスキーマの作成方法を示します。このスキーマは、データベースに存在する場合があります。その場合、そのスキーマには、CREATE MATERIALIZED VIEWALTER ANY MATERIALIZED VIEWCREATE DATABASE LINKなどの追加の権限が必要な場合があります。

*/

SET ECHO ON

SPOOL instant_mv.out

CONNECT system@mv4.example.com

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

CREATE TEMPORARY TABLESPACE temp_mv
 TEMPFILE 'temp_mv.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_mv
              QUOTA UNLIMITED ON demo_mv;

ALTER USER hr TEMPORARY TABLESPACE temp_mv;

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;

/*
手順2   スキーマへのデータベース・リンクが存在しない場合は作成します。

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

*/

CREATE PUBLIC DATABASE LINK orc3.example.com USING 'orc3.example.com';

CONNECT hr@mv4.example.com

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

/*

関連項目:

プロキシ・マスター・サイト・ユーザーの作成の詳細は、手順7を参照してください。

手順3   インスタンス化スクリプトを実行します。
*/
CONNECT mviewadmin@mv4.example.com

@d:\sf.sql

SET ECHO OFF

SPOOL OFF

/*

構築するマテリアライズド・ビュー環境の規模やロードされるデータ量によっては、インスタンス化処理にかなり時間がかかる場合があります。

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

インスタンス化後のリフレッシュ・グループのリフレッシュ

オフライン・インスタンシエーション・メソッドを使用してデプロイメント・テンプレートをインスタンス化した場合は、次の実行文を発行して、できるだけ早くリフレッシュ・グループをリフレッシュします。

CONNECT hr@mv4.example.com
Enter password: password

EXECUTE DBMS_REFRESH.REFRESH ('hr_refg');