暗黙的取得とは、取得プロセスまたは同期取得によってデータベースの変更が自動的に取得およびエンキューされることを意味します。取得プロセスではREDOログ内の変更が取得されるのに対し、同期取得では内部メカニズムを使用してデータ操作言語(DML)変更が取得されます。取得プロセスと同期取得の両方で、取得された変更が論理変更レコード(LCR)に再フォーマットされ、LCRがANYDATAキューにエンキューされます。
ここでは、暗黙的取得の構成について説明します。
この章で説明する各タスクは、特に指定がないかぎり、適切な権限を付与されたOracle Streams管理者が実行する必要があります。
変更をソース・データベースでローカルに取得するか、またはダウンストリーム・データベースでリモートに取得する取得プロセスを作成できます。ダウンストリーム取得プロセスはダウンストリーム・データベースで実行され、ソース・データベースからのREDOデータがダウンストリーム・データベースにコピーされます。ダウンストリーム取得プロセスでは、ダウンストリーム・データベースにコピーされたREDOデータの変更が取得されます。
次のどのプロシージャでも、ローカルの取得プロセスを作成できます。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES
DBMS_STREAMS_ADM.ADD_GLOBAL_RULES
DBMS_CAPTURE_ADM.CREATE_CAPTURE
DBMS_STREAMS_ADMパッケージの各プロシージャは、取得プロセスが存在しない場合は名前を指定して取得プロセスを作成し、取得プロセスにポジティブ・ルール・セットまたはネガティブ・ルール・セットがない場合はそれらのルール・セットを作成します。また、ルール・セットに表ルール、スキーマ・ルールまたはグローバル・ルールを追加することもできます。
CREATE_CAPTUREプロシージャは、取得プロセスは作成しますが、その取得プロセスのルール・セットやルールは作成しません。ただし、CREATE_CAPTUREプロシージャを使用すると、取得プロセスにポジティブ・ルール・セットまたはネガティブ・ルール・セットとして関連付ける既存のルール・セット、取得プロセスの先頭SCNおよび開始SCNを指定できます。また、ダウンストリーム取得を実行する取得プロセスを作成するには、CREATE_CAPTUREプロシージャを使用する必要があります。
ここでは、取得プロセスの構成について説明します。
|
注意: 取得プロセスを起動または再起動する場合、開始SCNよりFIRST_CHANGE#値の小さいREDOログ・ファイルをスキャンする必要がある場合があります。取得プロセスによるスキャン前に必要なREDOログ・ファイルを削除すると、取得プロセスが異常終了します。取得プロセスの先頭SCN、開始SCNおよび必須チェックポイントSCNを判断するには、DBA_CAPTUREデータ・ディクショナリ・ビューを問い合せます。取得プロセスには、必須チェックポイントSCNを含むREDOログ・ファイルと、後続のすべてのREDOログ・ファイルが必要です。取得プロセスの先頭SCNと開始SCNの詳細は、『Oracle Streams概要および管理』を参照してください。 |
|
取得プロセスを構成する前に、次のタスクを完了する必要があります。
「Oracle Streamsレプリケーションを構成する前に実行するタスク」で説明されている次のタスクを完了します。
REDO転送サービスを使用してアーカイブREDOログ・ファイルをダウンストリーム・データベースに自動的に転送するリアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを作成する場合は、「ダウンストリーム取得データベースへのログ・ファイルの転送の構成」の手順を実行します。
リアルタイム・ダウンストリーム取得プロセスを作成する場合は、「リアルタイム・ダウンストリーム取得のためのスタンバイREDOログの追加」の手順を実行します。
取得プロセスに関連付けるANYDATAキューを作成します(存在しない場合)。手順については、「ANYDATAキューの作成」を参照してください。この章の例では、取得プロセスで使用されるキューはstrmadmin.streams_queueであると想定しています。取得プロセスを実行するデータベースと同じデータベースでキューを作成します。
ここでは、DBMS_STREAMS_ADMパッケージとDBMS_CAPTURE_ADMパッケージを使用してローカル取得プロセスを作成する方法について説明します。
この項の例は、次のとおりです。
DBMS_STREAMS_ADMパッケージを使用してローカルの取得プロセスを構成するには、次の手順を実行します。
「取得プロセスの構成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者としてソース・データベースに接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
DBMS_STREAMS_ADMパッケージのADD_TABLE_RULESプロシージャを実行して、ローカルの取得プロセスを作成します。
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'hr.employees',
streams_type => 'capture',
streams_name => 'strm01_capture',
queue_name => 'strmadmin.streams_queue',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => FALSE,
source_database => NULL,
inclusion_rule => TRUE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
取得プロセスstrm01_captureが作成されます。この取得プロセスが作成されるのは、それが存在しない場合のみです。新規の取得プロセスが作成される場合、このプロシージャでは開始SCNも作成時点に設定されます。
取得プロセスが、既存のキューstrmadmin.streams_queueに関連付けられます。
取得プロセスにポジティブ・ルール・セットがない場合はポジティブ・ルール・セットが作成され、取得プロセスに関連付けられます。inclusion_ruleパラメータがTRUEに設定されているため、ルール・セットはポジティブ・ルール・セットとなります。このルール・セットでは、SYS.STREAMS$_EVALUATION_CONTEXT評価コンテキストが使用されます。ルール・セット名は、システムによって生成されます。
2つのルールが作成されます。一方のルールはhr.employees表に対するデータ操作言語(DML)変更についてTRUEと評価され、もう一方のルールはhr.employees表に対するデータ定義言語(DDL)変更についてTRUEと評価されます。ルール名は、システムによって生成されます。
この2つのルールが、取得プロセスに関連付けられたポジティブ・ルール・セットに追加されます。inclusion_ruleパラメータがTRUEに設定されているため、ルールはポジティブ・ルール・セットに追加されます。
include_tagged_lcrパラメータがFALSEに設定されているため、変更にNULLタグが付いている場合にのみ、取得プロセスでREDOログ内の変更を取得するように指定されます。この動作は、取得プロセスのシステム作成ルールを介して実行されます。
source_databaseパラメータがNULLに設定されているため、ソース・データベースに対するローカルの変更を取得する取得プロセスが作成されます。ローカルの取得プロセスの場合、このパラメータにローカル・データベースのグローバル名を指定する場合もあります。
hr.employees表がインスタンス化のために準備されます。
hr.employees表の主キー列、一意キー列、ビットマップ索引列および外部キー列に対してサプリメンタル・ロギングが有効化されます。
必要に応じて、「取得プロセスの構成後」で説明されている手順を完了します。
DBMS_CAPTURE_ADMパッケージを使用してローカル取得プロセスを構成するには、次の手順を実行します。
「取得プロセスの構成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者としてソース・データベースに接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
取得プロセスで使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm01_rule_setであると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。
DBMS_CAPTURE_ADMパッケージのCREATE_CAPTUREプロシージャを実行して、ローカルの取得プロセスを作成します。
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
queue_name => 'strmadmin.streams_queue',
capture_name => 'strm02_capture',
rule_set_name => 'strmadmin.strm01_rule_set',
start_scn => NULL,
source_database => NULL,
first_scn => NULL);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
取得プロセスstrm02_captureが作成されます。同じ名前の取得プロセスは存在できません。
取得プロセスが、既存のキューstrmadmin.streams_queueに関連付けられます。
取得プロセスが、既存のルール・セットstrmadmin.strm01_rule_setに関連付けられます。このルール・セットは、取得プロセスのポジティブ・ルール・セットです。
source_databaseパラメータがNULLに設定されているため、ソース・データベースに対するローカルの変更を取得する取得プロセスが作成されます。ローカルの取得プロセスの場合、このパラメータにローカル・データベースのグローバル名を指定する場合もあります。
start_scnパラメータとfirst_scnパラメータの両方がNULLに設定されているため、取得プロセスの開始SCNと先頭SCNをOracle Databaseで決定するように指定されます。
ローカルの変更を取得する取得プロセスがローカル・データベースで他に実行されていない場合は、DBMS_CAPTURE_ADMパッケージのBUILDプロシージャが自動的に実行されます。このプロシージャが実行されると、データ・ディクショナリがREDOログに抽出され、取得プロセスの初回起動時にLogMinerデータ・ディクショナリが作成されるようになります。
必要に応じて、「取得プロセスの構成後」で説明されている手順を完了します。
|
関連項目: ルールの詳細は、『Oracle Streams概要および管理』を参照してください。 |
この例では、DBMS_CAPTURE_ADMパッケージのCREATE_CAPTUREプロシージャを実行して、開始SCNを223525に設定したローカルの取得プロセスを作成します。この例では、データベースに1つ以上のローカルの取得プロセスが存在し、その取得プロセスで1つ以上のチェックポイントが使用されていることを想定しています。新しい取得プロセスには、ソース・データベースの現行のSCN以上の開始SCNを常に指定できます。データベースの現在のSCNより小さい開始SCNを指定するには、既存のローカル取得プロセス(1回以上正常に起動され、1つ以上のチェックポイントが使用されているもの)の最小先頭SCNより大きくなるよう、開始SCNを指定する必要があります。
次の問合せを実行すると、既存の取得プロセスの先頭SCN、およびそれらの取得プロセスでチェックポイントが使用されているかどうかを判断できます。
SELECT CAPTURE_NAME, FIRST_SCN, MAX_CHECKPOINT_SCN FROM DBA_CAPTURE;
出力は次のようになります。
CAPTURE_NAME FIRST_SCN MAX_CHECKPOINT_SCN ------------------------------ ---------- ------------------ CAPTURE_SIMP 223522 230825
これらの結果は、capture_simp取得プロセスの先頭SCNが223522であることを示しています。また、MAX_CHECKPOINT_SCN値はNULL以外であるため、この取得プロセスではチェックポイントが使用されています。したがって、新しい取得プロセスの開始SCNは223522以上に設定できます。
NULL以外の開始SCNを使用してローカル取得プロセスを構成するには、次の手順を実行します。
「取得プロセスの構成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者としてソース・データベースに接続します。
SQL*Plusでデータベースに接続する手順については、『Oracle Database管理者ガイド』を参照してください。
取得プロセスで使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.strm01_rule_setであると想定します。オプションで、ルール・セットにルールを追加することもできます。手順については、『Oracle Streams概要および管理』を参照してください。
次のプロシージャを実行して、取得プロセスを作成します。
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
queue_name => 'strmadmin.streams_queue',
capture_name => 'strm03_capture',
rule_set_name => 'strmadmin.strm01_rule_set',
start_scn => 223525,
source_database => NULL,
first_scn => NULL);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
取得プロセスstrm03_captureが作成されます。同じ名前の取得プロセスは存在できません。
取得プロセスが、既存のキューstrmadmin.streams_queueに関連付けられます。
取得プロセスが、既存のルール・セットstrmadmin.strm01_rule_setに関連付けられます。このルール・セットは、取得プロセスのポジティブ・ルール・セットです。
取得プロセスの開始SCNとして223525が指定されます。新しい取得プロセスでは、既存の取得プロセスのいずれかと同じLogMinerデータ・ディクショナリが使用されます。Oracle Streamsでは、新しい取得プロセスと共有するLogMinerデータ・ディクショナリが自動的に選択されます。first_scnパラメータがNULLに設定されているため、新しい取得プロセスの先頭SCNは、LogMinerデータ・ディクショナリが共有されている既存の取得プロセスの先頭SCNと同じになります。この例では、既存の取得プロセスはcapture_simpです。
source_databaseパラメータがNULLに設定されているため、ソース・データベースに対するローカルの変更を取得する取得プロセスが作成されます。ローカルの取得プロセスの場合、このパラメータにローカル・データベースのグローバル名を指定する場合もあります。
|
注意: この例のプロシージャの実行時にローカルの取得プロセスが存在しない場合は、取得プロセスの作成時にDBMS_CAPTURE_ADM.BUILDプロシージャが自動的に実行され、データ・ディクショナリがREDOログに抽出されます。新しい取得プロセスの初回起動時に、このREDOデータを使用してLogMinerデータ・ディクショナリが作成されます。この場合、指定するstart_scnパラメータの値は、現行のデータベースのSCN以上にする必要があります。 |
必要に応じて、「取得プロセスの構成後」で説明されている手順を完了します。
|
関連項目:
|
この項では、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスの構成について説明します。
この項の内容は次のとおりです。
ダウンストリーム取得を実行する取得プロセスを作成するには、CREATE_CAPTUREプロシージャを使用する必要があります。この項の例では、ソース・データベースへのデータベース・リンクを使用するリアルタイム・ダウンストリーム取得プロセスの作成について説明します。ただし、リアルタイム・ダウンストリーム取得プロセスでは、データベース・リンクは使用されないことがあります。
この例では、次のことを想定しています。
ソース・データベースはdbs1.example.com、ダウンストリーム・データベースはdbs2.example.comです。
dbs2.example.comで作成される取得プロセスでは、strmadmin.streams_queueが使用されます。
取得プロセスでは、hr.departments表に対するDML変更が取得されます。
この項では、DBMS_CAPTURE_ADMパッケージのCREATE_CAPTUREプロシージャを実行して、dbs1.example.comソース・データベースに対する変更を取得するリアルタイム・ダウンストリーム取得プロセスをdbs2.example.comダウンストリーム・データベースに作成する例について説明します。この例の取得プロセスでは、管理目的でdbs1.example.comへのデータベース・リンクが使用されます。データベース・リンクの名前は、ソース・データベースのグローバル名と一致している必要があります。
|
注意: 1つのダウンストリーム・データベースで、同じソース・データベースから変更を取得する複数のリアルタイム・ダウンストリーム取得プロセスを構成することはできますが、複数のソース・データベースに対するリアルタイム・ダウンストリーム取得を構成することはできません。 |
|
関連項目: リアルタイム・ダウンストリーム取得の概念については、『Oracle Streams概要および管理』を参照してください。 |
手順は次のとおりです。
「取得プロセスの構成の準備」で説明されているタスクを完了します。また、「ダウンストリーム取得データベースへのログ・ファイルの転送の構成」と「リアルタイム・ダウンストリーム取得のためのスタンバイREDOログの追加」のタスクが完了していることも確認してください。
SQL*Plusで、Oracle Streams管理者としてダウンストリーム・データベースdbs2.example.comに接続します。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。
dbs2.example.comからdbs1.example.comへのデータベース・リンクを作成します。たとえば、ユーザーstrmadminが両方のデータベースでOracle Streams管理者である場合、次のデータベース・リンクを作成します。
CREATE DATABASE LINK dbs1.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'dbs1.example.com';
この例では、Oracle Streams管理者がソース・データベースdbs1.example.comに存在することを想定しています。ソース・データベースにOracle Streams管理者が存在しない場合は、ダウンストリーム・データベースのOracle Streams管理者が、Oracle Streams管理者からのリモート・アクセスを許可しているユーザーに接続する必要があります。ソース・データベースでDBMS_STREAMS_AUTHパッケージのGRANT_REMOTE_ADMIN_ACCESSプロシージャを実行するときに、ユーザーを権限受領者として指定すると、そのユーザーはリモートでアクセスできるようになります。
CREATE_CAPTUREプロシージャを実行して、取得プロセスを作成します。
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
queue_name => 'strmadmin.streams_queue',
capture_name => 'real_time_capture',
rule_set_name => NULL,
start_scn => NULL,
source_database => 'dbs1.example.com',
use_database_link => TRUE,
first_scn => NULL,
logfile_assignment => 'implicit');
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
ダウンストリーム・データベースdbs2.example.comに取得プロセスreal_time_captureが作成されます。同じ名前の取得プロセスは存在できません。
取得プロセスが、dbs2.example.comの既存のキューstreams_queueに関連付けられ、strmadminによって所有されます。
取得プロセスで取得される変更のソース・データベースがdbs1.example.comとなるように指定されます。
取得プロセスでソース・データベースのグローバル名と同じ名前のデータベース・リンクを使用して、ソース・データベースで管理アクションを実行するように指定されます。
dbs1.example.comからのREDOデータを取得プロセスで暗黙的に受け入れるように指定されます。このため、取得プロセスでは、dbs2.example.comのスタンバイREDOログ内の取得が必要な変更がスキャンされます。取得プロセスが遅延した場合は、スタンバイREDOログから書き込まれたアーカイブREDOログ・ファイルがスキャンされます。
この手順では、取得プロセスreal_time_captureをルール・セットに関連付けません。ルール・セットは、後の手順で作成し、取得プロセスに関連付けます。
dbs2.example.comでdbs1.example.comソース・データベースからの変更を取得する取得プロセスが他にない場合は、データベース・リンクを使用して、DBMS_CAPTURE_ADM.BUILDプロシージャがdbs1.example.comで自動的に実行されます。このプロシージャが実行されると、dbs1.example.comのデータ・ディクショナリがREDOログに抽出され、dbs2.example.comでの取得プロセスreal_time_captureの初回起動時にdbs2.example.comでdbs1.example.comのLogMinerデータ・ディクショナリが作成されるようになります。
dbs2.example.comの複数の取得プロセスでdbs1.example.comソース・データベースからの変更を取得している場合、新しい取得プロセスreal_time_captureでは、既存のアーカイブ・ログ取得プロセスのいずれかと同じLogMinerデータ・ディクショナリがdbs1.example.comに対して使用されます。Oracle Streamsでは、新しい取得プロセスと共有するLogMinerデータ・ディクショナリが自動的に選択されます。
|
注意: ダウンストリーム取得プロセスの作成時に、CREATE_CAPTUREプロシージャでfirst_scnパラメータをNULLに設定した場合、use_database_linkパラメータはTRUEに設定する必要があります。そうしないと、エラーが発生します。 |
|
関連項目: 取得プロセスに関するSCN値の詳細は、『Oracle Streams概要および管理』を参照してください。 |
downstream_real_time_mine取得プロセス・パラメータをYに設定します。
BEGIN
DBMS_CAPTURE_ADM.SET_PARAMETER(
capture_name => 'real_time_capture',
parameter => 'downstream_real_time_mine',
value => 'Y');
END;
/
取得プロセスのポジティブ・ルール・セットを作成し、ルールを追加します。
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'hr.departments',
streams_type => 'capture',
streams_name => 'real_time_capture',
queue_name => 'strmadmin.streams_queue',
include_dml => TRUE,
include_ddl => FALSE,
include_tagged_lcr => FALSE,
source_database => 'dbs1.example.com',
inclusion_rule => TRUE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
dbs2.example.comで取得プロセスreal_time_captureのルール・セットが作成されます。このルール・セットはシステム生成名を持ちます。inclusion_ruleパラメータがTRUEに設定されているため、このルール・セットは取得プロセスのポジティブ・ルール・セットとなります。
hr.departments表に対するデータ操作言語(DML)変更を取得するルールが作成され、取得プロセスのポジティブ・ルール・セットに追加されます。このルールはシステム生成名を持ちます。inclusion_ruleパラメータがTRUEに設定されているため、このルールが取得プロセスのポジティブ・ルール・セットに追加されます。
手順3で作成したデータベース・リンクを使用して、dbs1.example.comのhr.departments表がインスタンス化のために準備されます。
dbs1.example.comにある表の主キー列、一意キー列、ビットマップ索引列および外部キー列に対してサプリメンタル・ロギングが有効化されます。
ログ・ファイルを切り替えるために必要な権限を持つ管理ユーザーとして、ソース・データベースdbs1.example.comに接続します。
ソース・データベースで現行のログ・ファイルをアーカイブします。
ALTER SYSTEM ARCHIVE LOG CURRENT;
ソース・データベースで現行のログ・ファイルをアーカイブすると、ソース・データベースのREDOログのリアルタイム・マイニングが開始されます。
取得プロセスがREDOデータを待機している時間が異常に長い場合は、アラート・ログでエラーを確認してください。詳細は、『Oracle Streams概要および管理』を参照してください。
必要に応じて、「取得プロセスの構成後」で説明されている手順を完了します。
この項では、ログ・ファイルを暗黙的または明示的に割り当てるアーカイブ・ログ・ダウンストリーム取得プロセスの構成について説明します。
この項の内容は次のとおりです。
ダウンストリーム取得を実行する取得プロセスを作成するには、CREATE_CAPTUREプロシージャを使用する必要があります。この項の例では、管理目的でソース・データベースへのデータベース・リンクを使用するアーカイブ・ログ・ダウンストリーム取得プロセスの作成について説明します。データベース・リンクの名前は、ソース・データベースのグローバル名と一致している必要があります。
この例では、次のことを想定しています。
ソース・データベースはdbs1.example.com、ダウンストリーム・データベースはdbs2.example.comです。
dbs2.example.comで作成される取得プロセスでは、strmadminによって所有されるstreams_queueが使用されます。
この取得プロセスでは、dbs1.example.comのhr.departments表に対するデータ操作言語(DML)変更が取得されます。
この取得プロセスでは、ログ・ファイルが暗黙的に割り当てられます。つまり、ダウンストリーム取得プロセスでは、REDO転送サービスまたは手動でソース・データベースからダウンストリーム・データベースに追加されたすべてのREDOログ・ファイルが自動的にスキャンされます。
手順は次のとおりです。
「取得プロセスの構成の準備」で説明されているタスクを完了します。「ダウンストリーム取得データベースへのログ・ファイルの転送の構成」のタスクを完了してください。
SQL*Plusで、Oracle Streams管理者としてダウンストリーム・データベースdbs2.example.comに接続します。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。
dbs2.example.comからdbs1.example.comへのデータベース・リンクを作成します。たとえば、ユーザーstrmadminが両方のデータベースでOracle Streams管理者である場合、次のデータベース・リンクを作成します。
CREATE DATABASE LINK dbs1.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'dbs1.example.com';
この例では、Oracle Streams管理者がソース・データベースdbs1.example.comに存在することを想定しています。ソース・データベースにOracle Streams管理者が存在しない場合は、ダウンストリーム・データベースのOracle Streams管理者が、Oracle Streams管理者からのリモート・アクセスを許可しているユーザーに接続する必要があります。ソース・データベースでDBMS_STREAMS_AUTHパッケージのGRANT_REMOTE_ADMIN_ACCESSプロシージャを実行するときに、ユーザーを権限受領者として指定すると、そのユーザーはリモートでアクセスできるようになります。
CREATE_CAPTUREプロシージャを実行して、取得プロセスを作成します。
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
queue_name => 'strmadmin.streams_queue',
capture_name => 'strm04_capture',
rule_set_name => NULL,
start_scn => NULL,
source_database => 'dbs1.example.com',
use_database_link => TRUE,
first_scn => NULL,
logfile_assignment => 'implicit');
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
ダウンストリーム・データベースdbs2.example.comに取得プロセスstrm04_captureが作成されます。同じ名前の取得プロセスは存在できません。
取得プロセスが、dbs2.example.comの既存のキューstreams_queueに関連付けられ、strmadminによって所有されます。
取得プロセスで取得される変更のソース・データベースがdbs1.example.comとなるように指定されます。
取得プロセスでdbs1.example.comからの新規のREDOログ・ファイルを暗黙的に受け入れるように指定されます。これにより、取得プロセスでは、dbs1.example.comからdbs2.example.comにコピーされた新規のログ・ファイルで取得が必要な変更がスキャンされるようになります。
この手順では、取得プロセスstrm04_captureをルール・セットに関連付けることはありません。ルール・セットは次の手順で作成し、取得プロセスと関連付けます。
dbs2.example.comでdbs1.example.comソース・データベースからの変更を取得する取得プロセスが他にない場合は、データベース・リンクを使用して、DBMS_CAPTURE_ADM.BUILDプロシージャがdbs1.example.comで自動的に実行されます。このプロシージャの実行により、dbs1.example.comのデータ・ディクショナリがREDOログに抽出され、dbs2.example.comでの取得プロセスの初回起動時にdbs2.example.comでdbs1.example.comのLogMinerデータ・ディクショナリが作成されるようになります。
dbs2.example.comの複数の取得プロセスでdbs1.example.comソース・データベースからの変更を取得している場合は、新規の取得プロセスでは既存の取得プロセスと同じdbs1.example.comのLogMinerデータ・ディクショナリが使用されます。Oracle Streamsでは、新しい取得プロセスと共有するLogMinerデータ・ディクショナリが自動的に選択されます。
|
注意: ダウンストリーム取得プロセスの作成時に、CREATE_CAPTUREプロシージャでfirst_scnパラメータをNULLに設定した場合、use_database_linkパラメータはTRUEに設定する必要があります。そうしないと、エラーが発生します。 |
|
関連項目:
|
取得プロセスのポジティブ・ルール・セットを作成し、ルールを追加します。
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'hr.departments',
streams_type => 'capture',
streams_name => 'strm04_capture',
queue_name => 'strmadmin.streams_queue',
include_dml => TRUE,
include_ddl => FALSE,
include_tagged_lcr => FALSE,
source_database => 'dbs1.example.com',
inclusion_rule => TRUE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
dbs2.example.comで取得プロセスstrm04_captureのルール・セットが作成されます。このルール・セットはシステム生成名を持ちます。inclusion_ruleパラメータがTRUEに設定されているため、このルール・セットが取得プロセスのポジティブ・ルール・セットとなります。
hr.departments表に対するDML変更を取得するルールが作成され、取得プロセスのルール・セットに追加されます。このルールはシステム生成名を持ちます。inclusion_ruleパラメータがTRUEに設定されているため、このルールが取得プロセスのポジティブ・ルール・セットに追加されます。
必要に応じて、「取得プロセスの構成後」で説明されている手順を完了します。
ダウンストリーム取得を実行する取得プロセスを作成するには、CREATE_CAPTUREプロシージャを使用する必要があります。この項では、REDOログ・ファイルを明示的に割り当てるアーカイブ・ログ・ダウンストリーム取得プロセスの作成について説明します。つまり、DBMS_FILE_TRANSFERパッケージやFTPなどの方法を使用して、ソース・データベースからダウンストリーム・データベースにREDOログ・ファイルを転送してから、これらのREDOログ・ファイルを手動でダウンストリーム取得プロセスに登録する必要があります。
この例では、次のことを想定しています。
ソース・データベースはdbs1.example.com、ダウンストリーム・データベースはdbs2.example.comです。
dbs2.example.comで作成される取得プロセスでは、strmadminによって所有されるstreams_queueが使用されます。
この取得プロセスでは、dbs1.example.comのhr.departments表に対するデータ操作言語(DML)変更が取得されます。
取得プロセスでは、管理アクション用にソース・データベースへのデータベース・リンクを使用しません。
手順は次のとおりです。
「取得プロセスの構成の準備」で説明されているタスクを完了します。この例ではダウンストリーム・データベースでアーカイブREDOログ・ファイルを明示的に転送および登録しているため、「ダウンストリーム取得データベースへのログ・ファイルの転送の構成」のタスクを完了する必要はありません。
SQL*Plusで、Oracle Streams管理者としてソース・データベースdbs1.example.comに接続します。
ダウンストリーム・データベースからソース・データベースへのデータベース・リンクを使用しない場合は、Oracle Streams管理者がソース・データベースに存在している必要があります。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。
dbs1.example.comからの変更を取得する取得プロセスがdbs2.example.comに存在しない場合は、REDOログのdbs1.example.comデータ・ディクショナリの構築を実行します。dbs2.example.comの取得プロセスがdbs1.example.comソース・データベースからの変更を取得するようにすでに構成されている場合、この手順は省略できます。
SET SERVEROUTPUT ON
DECLARE
scn NUMBER;
BEGIN
DBMS_CAPTURE_ADM.BUILD(
first_scn => scn);
DBMS_OUTPUT.PUT_LINE('First SCN Value = ' || scn);
END;
/
First SCN Value = 409391
このプロシージャにより、dbs2.example.comに作成する取得プロセスの有効な先頭SCN値が表示されます。戻されたSCN値をメモし、dbs2.example.comに取得プロセスを作成するときに使用できるようにしてください。
このプロシージャを実行してREDOログのデータ・ディクショナリを構築する場合は、dbs2.example.comでの取得プロセスの初回起動時に、REDOログのデータ・ディクショナリ情報を使用してLogMinerデータ・ディクショナリが作成されます。
hr.departments表をインスタンス化のために準備します。
BEGIN
DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(
table_name => 'hr.departments',
supplemental_logging => 'keys');
END;
/
この例ではhr.departments表の変更を取得する取得プロセスを作成するため、この表に対して主キーのサプリメンタル・ロギングが必要です。PREPARE_TABLE_INSTANTIATIONプロシージャのsupplemental_loggingパラメータにkeysを指定すると、表の主キー列、一意キー列、ビットマック索引列および外部キー列のサプリメンタル・ロギングが有効化されます。
ソース・データベースの現行のSCNを判別します。
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
iscn NUMBER; -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_OUTPUT.PUT_LINE('Current SCN: ' || iscn);
END;
/
戻されるSCNは、作成する取得プロセスによって取得されるhr.departments表の変更を適用する宛先データベースのインスタンス化SCNとして使用できます。この例では、戻されるSCNは1001656であると想定しています。
Oracle Streams管理者としてダウンストリーム・データベースdbs2.example.comに接続します。
CREATE_CAPTUREプロシージャを実行して、手順3で取得したfirst_scnパラメータの値を指定します。
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
queue_name => 'strmadmin.streams_queue',
capture_name => 'strm05_capture',
rule_set_name => NULL,
start_scn => NULL,
source_database => 'dbs1.example.com',
use_database_link => FALSE,
first_scn => 409391, -- Use value from Step 3
logfile_assignment => 'explicit');
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
ダウンストリーム・データベースdbs2.example.comに取得プロセスstrm05_captureが作成されます。同じ名前の取得プロセスは存在できません。
取得プロセスが、dbs2.example.comの既存のキューstreams_queueに関連付けられ、strmadminによって所有されます。
取得プロセスで取得される変更のソース・データベースがdbs1.example.comとなるように指定されます。
取得プロセスの先頭SCNが409391となるように指定されます。この値は、手順3で取得した値です。先頭SCNとは、取得プロセスで変更を取得できる最小SCNのことです。先頭SCNが指定されるため、取得プロセスの初回起動時に、同じソース・データベースの既存のLogMinerデータ・ディクショナリが存在するかどうかに関係なく、新しいLogMinerデータ・ディクショナリが作成されます。
dbs1.example.comからの新しいREDOログ・ファイルを取得プロセスに明示的に割り当てる必要があるように指定されます。ダウンストリーム・データベースを実行しているコンピュータにREDOログ・ファイルが転送された後、次の文を使用して、ログ・ファイルを取得プロセスに明示的に割り当てます。
ALTER DATABASE REGISTER LOGICAL LOGFILE file_name FOR capture_process;
ここで、file_nameはREDOログ・ファイルの名前、capture_processはダウンストリーム・データベースでREDOログ・ファイルを使用する取得プロセスの名前です。logfile_assignmentパラメータがexplicitに設定されている場合は、REDOログ・ファイルを手動で追加する必要があります。
この手順では、取得プロセスstrm05_captureはルール・セットに関連付けられません。ルール・セットは次の手順で作成し、取得プロセスと関連付けます。
|
関連項目:
|
取得プロセスのポジティブ・ルール・セットを作成し、ルールを追加します。
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'hr.departments',
streams_type => 'capture',
streams_name => 'strm05_capture',
queue_name => 'strmadmin.streams_queue',
include_dml => TRUE,
include_ddl => FALSE,
include_tagged_lcr => FALSE,
source_database => 'dbs1.example.com',
inclusion_rule => TRUE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
dbs2.example.comで取得プロセスstrm05_captureのルール・セットが作成されます。このルール・セットはシステム生成名を持ちます。inclusion_ruleパラメータがTRUEに設定されているため、このルール・セットが取得プロセスのポジティブ・ルール・セットとなります。
hr.departments表に対するDML変更を取得するルールが作成され、取得プロセスのルール・セットに追加されます。このルールはシステム生成名を持ちます。inclusion_ruleパラメータがTRUEに設定されているため、このルールが取得プロセスのポジティブ・ルール・セットに追加されます。
ダウンストリーム取得プロセスの先頭SCNを含むREDOログ・ファイルがソース・データベースdbs1.example.comでアーカイブされた後、ダウンストリーム・データベースを実行しているコンピュータにアーカイブREDOログ・ファイルを転送します。ダウンストリーム取得プロセスの先頭SCNは、手順3のBUILDプロシージャにより判別されています。REDOログ・ファイルがまだアーカイブされていない場合は、データベースでALTER SYSTEM SWITCH LOGFILE文を実行してアーカイブできます。
dbs1.example.comで次の問合せを実行して、ダウンストリーム取得プロセスの先頭SCNを含むアーカイブREDOログ・ファイルを識別できます。
COLUMN NAME HEADING 'Archived Redo Log|File Name' FORMAT A50 COLUMN FIRST_CHANGE# HEADING 'First SCN' FORMAT 999999999 SELECT NAME, FIRST_CHANGE# FROM V$ARCHIVED_LOG WHERE FIRST_CHANGE# IS NOT NULL AND DICTIONARY_BEGIN = 'YES';
ダウンストリーム取得プロセスを実行しているコンピュータに、手順3で戻された先頭SCNと一致する、FIRST_CHANGE#という項目を含むアーカイブ・ログ・ファイルを転送します。
管理ユーザーとしてダウンストリーム・データベースdbs2.example.comに接続します。
転送されたREDOログ・ファイルを取得プロセスに割り当てます。たとえば、REDOログ・ファイルが/oracle/logs_from_dbs1/1_10_486574859.dbfの場合は、次の文を発行します。
ALTER DATABASE REGISTER LOGICAL LOGFILE '/oracle/logs_from_dbs1/1_10_486574859.dbf' FOR 'strm05_capture';
必要に応じて、「取得プロセスの構成後」で説明されている手順を完了します。
新規の取得プロセスによって取得された論理変更レコード(LCR)を処理する伝播および適用プロセスを構成する場合は、次の順序で構成作業を行います。
レプリケーション環境で必須の伝播および適用プロセスとなるすべてのキューを作成します。「ANYDATAキューの作成」を参照してください。
新規の取得プロセスによって取得されたLCRを伝播するすべての伝播を作成します。「ANYDATAキュー間のOracle Streamsの伝播の作成」を参照してください。
新規の取得プロセスによって取得されたLCRをデキューして処理するすべての適用プロセスを作成します。第7章「暗黙的適用の構成」を参照してください。取得されたLCRを適用するように各適用プロセスを構成します。
新規の取得プロセスがすべての宛先データベースで変更を取得する表をインスタンス化します。インスタンス化の詳細は、第8章「インスタンス化とOracle Streamsレプリケーション」を参照してください。
DBMS_APPLY_ADMパッケージのSTART_APPLYプロシージャを使用して、新規の取得プロセスによって取得されたLCRを処理する適用プロセスを起動します。または、Oracle Enterprise Managerを使用して適用プロセスを起動する手順については、『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』を参照してください。
DBMS_CAPTURE_ADMパッケージのSTART_CAPTUREプロシージャを使用して、新規の取得プロセスを起動します。または、Oracle Enterprise Managerを使用して取得プロセスを起動する手順については、『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』を参照してください。
|
注意: Oracle Streams環境には、その他の構成手順が必要となる場合があります。たとえば、Oracle Streams環境には変換、適用ハンドラおよび競合解消が含まれている場合があります。 |
次のいずれかのプロシージャを使用して、同期取得を作成できます。
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_CAPTURE_ADM.CREATE_SYNC_CAPTURE
DBMS_STREAMS_ADMパッケージの両方のプロシージャでは、名前を指定して同期取得を作成したり(存在しない場合)、同期取得にポジティブ・ルール・セットを作成します(存在しない場合)。また、ルール・セットに表ルールまたはサブセット・ルールを追加することもできます。
CREATE_SYNC_CAPTUREプロシージャでは、同期取得は作成しますが、その同期取得のルール・セットやルールは作成しません。ただし、CREATE_SYNC_CAPTUREプロシージャを使用すると、同期取得に関連付ける既存のルール・セットを指定したり、デフォルトの取得ユーザー以外の取得ユーザーを指定できます。
ここでは、同期取得の構成について説明します。
|
関連項目:
|
同期取得を構成する前に、次のタスクを完了する必要があります。
「Oracle Streamsレプリケーションを構成する前に実行するタスク」で説明されている次のタスクを完了します。
同期取得に関連付けるANYDATAキューを作成します(存在しない場合)。手順については、「ANYDATAキューの作成」を参照してください。このキューはコミット時間キューである必要があります。この章の例では、同期取得で使用されるキューはstrmadmin.streams_queueであると想定しています。同期取得を実行するデータベースと同じデータベースでキューを作成します。
同期取得によって取得された論理変更レコード(LCR)を伝播する伝播、および同期取得によって取得されたLCRをデキューして処理する適用プロセスに関連付けるANYDATAキューを作成します(存在しない場合)。手順については、「ANYDATAキューの作成」を参照してください。
新規の同期取得によって取得されたLCRを伝播するすべての伝播を作成します。「ANYDATAキュー間のOracle Streamsの伝播の作成」を参照してください。
新規の同期取得によって取得されたLCRをデキューして処理するすべての適用プロセスを作成します。「DBMS_APPLY_ADMを使用した永続LCRの適用プロセスの作成」を参照してください。DBMS_APPLY_ADM.CREATE_APPLYプロシージャのapply_capturedパラメータをFALSEに設定して、永続LCRを適用するように各適用プロセスを構成します。「同期取得の構成後」で実行したインスタンス化が完了するまで適用プロセスを起動しないでください。
Oracle Streams管理者にDBAロールが付与されていることを確認します。同期取得を作成するには、Oracle Streams管理者にDBAロールが付与されている必要があります。
ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャを実行して同期取得を作成する場合は、これらのプロシージャのstreams_typeパラメータをsync_captureに設定します。ADD_TABLE_RULESプロシージャによって作成されるルールでは、表に対するすべてのデータ操作言語(DML)変更を取得するように同期取得に指示します。ADD_SUBSET_RULESプロシージャによって作成されるルールでは、表に対するDML変更のサブセットを取得するように同期取得に指示します。
この例では、次のことを想定しています。
ソース・データベースはdbs1.example.comです。
作成される同期取得では、strmadmin.streams_queueキューを使用します。
作成される同期取得では、hr.departments表に対するDML変更の結果が取得されます。
作成される同期取得の取得ユーザーはOracle Streams管理者strmadminです。
DBMS_STREAMS_ADMパッケージを使用して同期取得を作成するには、次の手順を実行します。
「同期取得の構成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者としてdbs1.example.comデータベースに接続します。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。
ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャを実行して、同期取得を作成します。次に例を示します。
BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name => 'hr.departments',
streams_type => 'sync_capture',
streams_name => 'sync_capture',
queue_name => 'strmadmin.streams_queue');
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
ソース・データベースに同期取得sync_captureが作成されます。
同期取得が有効化されます。同期取得を無効化することはできません。
同期取得が、既存のキューstrmadmin.streams_queueに関連付けられます。
同期取得にポジティブ・ルール・セットが作成されます。このルール・セットはシステム生成名を持ちます。
hr.departments表に対するDML変更を取得するルールが作成され、同期取得のポジティブ・ルール・セットに追加されます。このルールはシステム生成名を持ちます。
同期取得の取得ユーザーとしてプロシージャを実行するユーザーが構成されます。この場合、ユーザーはstrmadminです。
DBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATIONファンクションが指定された表に対して自動的に実行され、その表がインスタンス化のために準備されます。
|
注意: ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャは、同期取得ルール・セットにルールを追加する際、指定された表の排他ロックを取得する必要があります。指定された表に未解決のトランザクションが存在すると、プロシージャはロックを取得できるまで待機します。 |
必要に応じて、「同期取得の構成後」で説明されている手順を完了します。
この項では、DBMS_CAPTURE_ADMパッケージおよびDBMS_STREAMS_ADMパッケージのプロシージャを実行して同期取得を構成する例を取り上げます。
この例では、次のことを想定しています。
ソース・データベースはdbs1.example.comです。
作成される同期取得では、strmadmin.streams_queueキューを使用します。
作成される同期取得では、strmadminスキーマの既存のルール・セットsync01_rule_setを使用します。
作成される同期取得では、hr.departments表に対するDML変更のサブセットの結果が取得されます。
作成される同期取得の取得ユーザーはhrです。hrユーザーには、streams_queueにエンキューするための権限が必要です。
DBMS_CAPTURE_ADMパッケージを使用して同期取得を作成するには、次の手順を実行します。
「同期取得の構成の準備」で説明されているタスクを完了します。
SQL*Plusで、Oracle Streams管理者としてdbs1.example.comデータベースに接続します。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。
同期取得で使用されるルール・セットを作成します(存在しない場合)。この例では、ルール・セットがstrmadmin.sync01_rule_setであると想定しています。手順については、『Oracle Streams概要および管理』を参照してください。
CREATE_SYNC_CAPTUREプロシージャを実行して、同期取得を作成します。次に例を示します。
BEGIN
DBMS_CAPTURE_ADM.CREATE_SYNC_CAPTURE(
queue_name => 'strmadmin.streams_queue',
capture_name => 'sync01_capture',
rule_set_name => 'strmadmin.sync01_rule_set',
capture_user => 'hr');
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
同期取得sync01_captureが作成されます。同じ名前の同期取得は存在できません。
同期取得が有効化されます。同期取得を無効化することはできません。
同期取得が、既存のキューstrmadmin.streams_queueに関連付けられます。
同期取得が、既存のルール・セットstrmadmin.sync01_rule_setに関連付けられます。
同期取得の取得ユーザーとしてhrが構成されます。
ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャを実行して、同期取得のルール・セットにルールを追加します。たとえば、ADD_SUBSET_RULESプロシージャを実行して、hr.departments表に対するDML変更のサブセットを取得するように同期取得に指示します。
BEGIN
DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
table_name => 'hr.departments',
dml_condition => 'department_id=1700',
streams_type => 'sync_capture',
streams_name => 'sync01_capture',
queue_name => 'strmadmin.streams_queue',
include_tagged_lcr => FALSE);
END;
/
このプロシージャを実行すると、次のアクションが実行されます。
ソース・データベースdbs1.example.comで同期取得sync01_captureのルール・セットにサブセット・ルールが追加されます。サブセット・ルールでは、department_idが1700の行に対する変更を取得するように同期取得に指示します。同期取得では、表の他の行に対する変更は取得されません。
DBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATIONファンクションがhr.departments表に対して自動的に実行され、この表がインスタンス化のために準備されます。
include_tagged_lcrパラメータがFALSEに設定されているため、変更が行われるセッションのタグがNULLの場合にのみ、同期取得で変更を取得するように指定されます。この動作は、同期取得のシステム作成ルールを介して実行されます。
|
注意: CREATE_SYNC_CAPTUREプロシージャは、同期取得を作成する際、変更を取得する各表の排他ロックを取得する必要があります。排他ロックが必要な表は、同期取得に対して指定されたルール・セットのルールによって決定されます。同様に、ADD_TABLE_RULESまたはADD_SUBSET_RULESプロシージャは、同期取得ルール・セットにルールを追加する際、指定された表の排他ロックを取得する必要があります。この場合、同期取得が変更を取得する表に未解決のトランザクションが存在すると、プロシージャはロックを取得できるまで待機します。 |
必要に応じて、「同期取得の構成後」で説明されている手順を完了します。
新規の同期取得によって取得された論理変更レコード(LCR)を処理する伝播と適用プロセスの構成が完了した後、次の手順を実行します。
新規の同期取得がすべての宛先データベースで変更を取得する表をインスタンス化します。インスタンス化の詳細は、第8章「インスタンス化とOracle Streamsレプリケーション」を参照してください。
DBMS_APPLY_ADMパッケージのSTART_APPLYプロシージャを使用して、新規の同期取得によって取得されたLCRを処理する適用プロセスを起動します。または、Oracle Enterprise Managerを使用して適用プロセスを起動する手順については、『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』を参照してください。
|
注意: Oracle Streams環境には、その他の構成手順が必要となる場合があります。たとえば、Oracle Streams環境には変換、適用ハンドラおよび競合解消が含まれている場合があります。 |