暗黙的取得とは、取得プロセスまたは同期取得によってデータベースの変更が自動的に取得およびエンキューされることを意味します。取得プロセスでは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を処理する適用プロセスを起動します。
DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、新規の取得プロセスを起動します。
注意: 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 Streams環境には、その他の構成手順が必要となる場合があります。たとえば、Oracle Streams環境には変換、適用ハンドラおよび競合解消が含まれている場合があります。 |