この章では、マスター・レプリケーション・サイトでマスター・グループを作成する方法を説明します。
この章では、次の項目を説明します。
マスター・サイトを設定した後、マスター・グループを作成できます。 レプリケーション環境を正しく構築するには、図3-2に示す手順に従う必要があります。
この章では、hr_repg
マスター・グループを作成して、図3-1に示すオブジェクトをレプリケートします。
この章のスクリプトを設計どおりに動作させるために、orc1.example.com
、orc2.example.com
およびorc3.example.com
にhr
スキーマが存在することを確認してください。hr
スキーマには次のデータベース・オブジェクトが含まれます。
countries
表
departments
表
employees
表
jobs
表
job_history
表
locations
表
regions
表
dept_location_ix
索引
emp_department_ix
索引
emp_job_ix
索引
emp_manager_ix
索引
jhist_department_ix
索引
jhist_employee_ix
索引
jhist_job_ix
索引
loc_country_ix
索引
リストされている索引は、hr
スキーマの外部キー列を基準とした索引です。親表の更新や削除が許可されていない場合を除き、外部キー参照制約がある表のレプリケーションでは、常に外部キーに索引を作成してからこれらの索引をレプリケートすることをお薦めします。索引は自動でレプリケートされません。
デフォルトでは、Oracle Databaseのインストール時に、hr
スキーマが自動的にインストールされます。この章のスクリプト例では、すべてのマスター・サイトにhrスキーマが存在し、そのスキーマには各サイトのデータベース・オブジェクトのすべてが含まれることを前提としています。また、表には、Oracleのインストール時に自動的に挿入されたデータが含まれるものとします。hr
スキーマがレプリケーション・サイトにインストールされていない場合は、手動でインストールできます。
関連項目:
|
次に示す手順に従って、hr_repg
マスター・グループを作成します。
注意: このドキュメントをオンラインで参照している場合は、次の「BEGINNING OF SCRIPT」の行から「END OF SCRIPT」の行までのテキストをテキスト・エディタにコピーして編集し、使用している環境に適したスクリプトを作成します。 |
/************************* BEGINNING OF SCRIPT ******************************/ SET ECHO ON SPOOL create_mg.out CONNECT repadmin@orc1.example.com /*
手順1 マスター・サイトでスキーマを作成します。
マスター・グループに関係するすべてのマスター・サイトに、スキーマがまだ存在しない場合は、スキーマを作成して、必要な権限を付与します。この例では、hr
スキーマを使用します。このスキーマは、Oracleのインストール時にデフォルトでインストールされたスキーマの1つです。したがって、hr
スキーマはすべてのマスター・サイトに存在します。
*/ PAUSE Press <RETURN> to continue when the schema exists at all master sites. /*
新しいマスター・グループを定義するには、CREATE_MASTER_REPGROUP
プロシージャを使用します。オブジェクトをマスター・グループに追加する場合または他のレプリケーション管理タスクを実行する場合は、この手順で定義したマスター・グループ名を参照します。この手順はレプリケーション管理者が実行します。
*/ BEGIN DBMS_REPCAT.CREATE_MASTER_REPGROUP ( gname => 'hr_repg'); END; / /*
オブジェクトをマスター・グループに追加するには、CREATE_MASTER_REPOBJECT
プロシージャを使用します。多くの場合、表と索引をマスター・グループへ追加しますが、プロシージャ、ビューその他も追加できます。
*/ BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'countries', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'departments', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'employees', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'jobs', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'job_history', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'locations', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'TABLE', oname => 'regions', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'dept_location_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'emp_department_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'emp_job_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'emp_manager_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'jhist_department_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'jhist_employee_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'jhist_job_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / BEGIN DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'hr_repg', type => 'INDEX', oname => 'loc_country_ix', sname => 'hr', use_existing_object => TRUE, copy_rows => FALSE); END; / /*
マスター定義サイト(デフォルトではマスター・グループが作成されたサイトがマスター定義サイトになります)でマスター・グループを定義すれば、レプリケーション環境に関係する他のサイトを定義できます。 orc2.example.com
およびorc3.example.com
サイトをレプリケーション環境に追加する場合があります。この例では、すべてのマスター・サイトにマスター・グループを作成します。ただし、データベースを静止することなく、まず1つのマスター・サイトにマスター・グループを作成して、後でマスター・サイトを追加することもできます。この場合には、この手順をスキップします。
この例では、hrスキーマがすべてのマスター・サイトに存在することが前提となっているため、ADD_MASTER_DATABASE
プロシージャのuse_existing_objects
パラメータにTRUE
が設定されています。つまり、hr
スキーマのオブジェクトは、すべてのマスター・サイトで事前に作成されていることが前提となっています。また、各マスター・サイトの表には同一データが格納されていることが前提となるため、copy_rows
パラメータにFALSE
が設定されています。
*/ BEGIN DBMS_REPCAT.ADD_MASTER_DATABASE ( gname => 'hr_repg', master => 'orc2.example.com', use_existing_objects => TRUE, copy_rows => FALSE, propagation_mode => 'ASYNCHRONOUS'); END; / /*
注意:
SELECT DBLINK FROM DBA_REPSITES WHERE GNAME = 'HR_REPG'; |
*/ PAUSE Press <RETURN> to continue. BEGIN DBMS_REPCAT.ADD_MASTER_DATABASE ( gname => 'hr_repg', master => 'orc3.example.com', use_existing_objects => TRUE, copy_rows => FALSE, propagation_mode => 'ASYNCHRONOUS'); END; / /*
注意:
|
*/ PAUSE Press <RETURN> to continue. /*
手順5 競合の可能性がある場合は、競合解消メソッドを設定します。
*/ PAUSE Press <RETURN> to continue after configuring conflict resolution methods or if no conflict resolution methods are required. /*
*/
BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'countries', type => 'TABLE', min_communication => TRUE); END; / BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'departments', type => 'TABLE', min_communication => TRUE); END; / BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'employees', type => 'TABLE', min_communication => TRUE); END; / BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'jobs', type => 'TABLE', min_communication => TRUE); END; / BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'job_history', type => 'TABLE', min_communication => TRUE); END; / BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'locations', type => 'TABLE', min_communication => TRUE); END; / BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'hr', oname => 'regions', type => 'TABLE', min_communication => TRUE); END; / /*
注意:
SELECT COUNT(*) FROM DBA_REPCATLOG WHERE GNAME = 'HR_REPG'; |
*/ PAUSE Press <RETURN> to continue. /*
マスター・グループの作成、レプリケーション・オブジェクトの追加、レプリケーション・サポートの生成および追加マスター・データベースの追加を行った後で、レプリケーション・アクティビティを開始する必要があります。RESUME_MASTER_ACTIVITY
プロシージャを使用して、指定したマスター・グループのレプリケーションをオンにします。
*/ BEGIN DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( gname => 'hr_repg'); END; / SET ECHO OFF SPOOL OFF /************************* END OF SCRIPT **********************************/