5 暗黙的取得の構成
暗黙的取得とは、取得プロセスまたは同期取得によってデータベースの変更が自動的に取得およびエンキューされることを意味します。取得プロセスではREDOログ内の変更が取得されるのに対し、同期取得では内部メカニズムを使用してデータ操作言語(DML)変更が取得されます。取得プロセスと同期取得の両方で、取得された変更が論理変更レコード(LCR)に再フォーマットされ、LCRがANYDATA
キューにエンキューされます。
ここでは、暗黙的取得の構成について説明します。
この章で説明する各タスクは、特に明記されていないかぎり、適切な権限を付与されているOracle Streams管理者が完了する必要があります。
関連項目:
-
暗黙的取得の詳細は、『Oracle Streams概要および管理』を参照してください。
5.1 取得プロセスの構成
変更をソース・データベースでローカルに取得するか、またはダウンストリーム・データベースでリモートに取得する取得プロセスを作成できます。ダウンストリーム取得プロセスはダウンストリーム・データベースで実行され、ソース・データベースからのREDOデータがダウンストリーム・データベースにコピーされます。ダウンストリーム取得プロセスでは、ダウンストリーム・データベースにコピーされたREDOデータの変更が取得されます。
次のどのプロシージャでも、ローカルの取得プロセスを作成できます。
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概要および管理』を参照してください。
注意:
-
DBMS_STREAMS_ADM
パッケージのプロシージャまたはOracle Enterprise Manager Cloud Controlを使用して、Oracle Streams環境全体(取得プロセスを含む)を構成できます。「Oracle Streamsレプリケーションの簡単な構成」を参照してください。 -
取得プロセスの作成後、その取得プロセスのソース・データベースの
DBID
またはグローバル名は変更しないでください。ソース・データベースのDBID
またはグローバル名のいずれかを変更した場合、その取得プロセスを削除して再作成する必要があります。「ソース・データベースのDBIDまたはグローバル名の変更」を参照してください。 -
ダウンストリーム取得を構成するには、ソース・データベースがOracle Database 10g リリース1以上のデータベースである必要があります。
5.1.1 取得プロセスの構成の準備
取得プロセスを構成する前に、次のタスクを完了する必要があります。
-
「Oracle Streamsレプリケーションを構成する前に実行するタスク」で説明されている次のタスクを完了します。
-
REDO転送サービスを使用してアーカイブREDOログ・ファイルをダウンストリーム・データベースに自動的に転送するリアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスを作成する場合は、「ダウンストリーム取得データベースへのログ・ファイルの転送の構成」の手順を実行します。
-
リアルタイム・ダウンストリーム取得プロセスを作成する場合は、「リアルタイム・ダウンストリーム取得のためのスタンバイREDOログの追加」の手順を実行します。
-
取得プロセスに関連付ける
ANYDATA
キューを作成します(存在しない場合)。方法については、「ANYDATAキューの作成」を参照してください。この章の例では、取得プロセスで使用されるキューはstrmadmin.streams_queue
であると想定しています。取得プロセスを実行するデータベースと同じデータベースでキューを作成します。
5.1.2 ローカルの取得プロセスの構成
ここでは、DBMS_STREAMS_ADM
パッケージとDBMS_CAPTURE_ADM
パッケージを使用してローカル取得プロセスを作成する方法について説明します。
この項には次の例が含まれます:
5.1.2.1 DBMS_STREAMS_ADMを使用したローカルの取得プロセスの構成
DBMS_STREAMS_ADM
パッケージを使用してローカルの取得プロセスを構成するには、次の手順を実行します。
関連項目:
-
ルールの詳細は、『Oracle Streams概要および管理』を参照してください。
5.1.2.2 DBMS_CAPTURE_ADMを使用したローカルの取得プロセスの構成
DBMS_CAPTURE_ADM
パッケージを使用してローカル取得プロセスを構成するには、次の手順を実行します。
関連項目:
ルールの詳細は、『Oracle Streams概要および管理』を参照してください。
5.1.2.3 NULL以外の開始SCNを使用したローカルの取得プロセスの構成
この例では、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を使用してローカル取得プロセスを構成するには、次の手順を実行します。
関連項目:
-
CREATE_CAPTURE
プロシージャのfirst_scn
パラメータおよびstart_scn
パラメータの設定の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
5.1.3 ダウンストリーム取得プロセスの構成
この項では、リアルタイム・ダウンストリーム取得プロセスまたはアーカイブ・ログ・ダウンストリーム取得プロセスの構成について説明します。
この項には、次の項目が含まれます。
5.1.3.1 リアルタイム・ダウンストリーム取得プロセスの構成
ダウンストリーム取得を実行する取得プロセスを作成するには、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概要および管理』を参照してください。
手順は次のとおりです。
5.1.3.2 アーカイブ・ログ・ダウンストリーム取得プロセスの構成
この項では、ログ・ファイルを暗黙的または明示的に割り当てるアーカイブ・ログ・ダウンストリーム取得プロセスの構成について説明します。
この項には、次の項目が含まれます。
5.1.3.2.1 ログを暗黙的に割り当てるアーカイブ・ログ・ダウンストリーム取得プロセスの構成
ダウンストリーム取得を実行する取得プロセスを作成するには、CREATE_CAPTURE
プロシージャを使用する必要があります。この項の例では、管理目的でソース・データベースへのデータベース・リンクを使用するアーカイブ・ログ・ダウンストリーム取得プロセスの作成について説明します。データベース・リンクの名前は、ソース・データベースのグローバル名と一致している必要があります。
この例では、次のことを想定しています。
-
ソース・データベースは
dbs1.example.com
、ダウンストリーム・データベースはdbs2.example.com
です。 -
dbs2.example.com
で作成される取得プロセスでは、strmadmin
によって所有されるstreams_queue
が使用されます。 -
この取得プロセスでは、
dbs1.example.com
のhr.departments
表に対するデータ操作言語(DML)変更が取得されます。 -
この取得プロセスでは、ログ・ファイルが暗黙的に割り当てられます。つまり、ダウンストリーム取得プロセスでは、REDO転送サービスまたは手動でソース・データベースからダウンストリーム・データベースに追加されたすべてのREDOログ・ファイルが自動的にスキャンされます。
手順は次のとおりです。
5.1.3.2.2 ログを明示的に割り当てるアーカイブ・ログ・ダウンストリーム取得プロセスの構成
ダウンストリーム取得を実行する取得プロセスを作成するには、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)変更が取得されます。 -
取得プロセスでは、管理アクション用にソース・データベースへのデータベース・リンクを使用しません。
手順は次のとおりです。
5.1.4 取得プロセスの構成後
新規の取得プロセスによって取得された論理変更レコード(LCR)を処理する伝播および適用プロセスを構成する場合は、次の順序で構成作業を行います。
- レプリケーション環境で必須の伝播および適用プロセスとなるすべてのキューを作成します。「ANYDATAキューの作成」を参照してください。
- 新規の取得プロセスによって取得されたLCRを伝播するすべての伝播を作成します。「ANYDATAキュー間のOracle Streamsの伝播の作成」を参照してください。
- 新規の取得プロセスによって取得されたLCRをデキューして処理するすべての適用プロセスを作成します。「暗黙的適用の構成」を参照してください。取得されたLCRを適用するように各適用プロセスを構成します。
- 新規の取得プロセスがすべての宛先データベースで変更を取得する表をインスタンス化します。インスタンス化の詳細は、「インスタンス化とOracle Streamsレプリケーション」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、新規の取得プロセスによって取得されたLCRを処理する適用プロセスを起動します。DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを使用して、新規の取得プロセスを起動します。
注意:
Oracle Streams環境には、その他の構成手順が必要となる場合があります。たとえば、Oracle Streams環境には変換、適用ハンドラおよび競合解消が含まれている場合があります。
5.2 同期取得の構成
次のいずれかのプロシージャを使用して、同期取得を作成できます。
DBMS_STREAMS_ADM
パッケージの両方のプロシージャでは、名前を指定して同期取得を作成したり(存在しない場合)、同期取得にポジティブ・ルール・セットを作成します(存在しない場合)。また、ルール・セットに表ルールまたはサブセット・ルールを追加することもできます。
CREATE_SYNC_CAPTURE
プロシージャでは、同期取得は作成しますが、その同期取得のルール・セットやルールは作成しません。ただし、CREATE_SYNC_CAPTURE
プロシージャを使用すると、同期取得に関連付ける既存のルール・セットを指定したり、デフォルトの取得ユーザー以外の取得ユーザーを指定できます。
ここでは、同期取得の構成について説明します。
5.2.1 同期取得の構成の準備
同期取得を構成する前に、次のタスクを完了する必要があります。
-
「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
ロールが付与されている必要があります。
5.2.2 DBMS_STREAMS_ADMパッケージを使用した同期取得の構成
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
パッケージを使用して同期取得を作成するには、次の手順を実行します。
5.2.3 DBMS_CAPTURE_ADMパッケージを使用した同期取得の構成
この項では、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
パッケージを使用して同期取得を作成するには、次の手順を実行します。
5.2.4 同期取得の構成後
新規の同期取得によって取得された論理変更レコード(LCR)を処理する伝播と適用プロセスの構成が完了した後、次の手順を実行します。
- 新規の同期取得がすべての宛先データベースで変更を取得する表をインスタンス化します。インスタンス化の詳細は、「インスタンス化とOracle Streamsレプリケーション」を参照してください。
DBMS_APPLY_ADM
パッケージのSTART_APPLY
プロシージャを使用して、新規の同期取得によって取得されたLCRを処理する適用プロセスを起動します。
注意:
Oracle Streams環境には、その他の構成手順が必要となる場合があります。たとえば、Oracle Streams環境には変換、適用ハンドラおよび競合解消が含まれている場合があります。