15 Oracle Streams暗黙的取得の管理
取得プロセスと同期取得は両方とも暗黙的取得を実行します。この章では、暗黙的取得の管理の手順を説明します。
次の各項では、Oracle Streams暗黙的取得の管理について説明します。
この章で説明する各タスクは、特に明記されていないかぎり、適切な権限を付与されているOracle Streams管理者が完了する必要があります。
関連項目:
-
Oracle Streams管理者を作成する方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照
15.1 取得プロセスの管理
取得プロセスは、REDOログの変更を取得して、取得した各変更を論理変更レコード(LCR)形式にフォーマットし、LCRをANYDATA
キューにエンキューします。
次の各項では、取得プロセスの管理について説明します。
関連項目:
-
取得プロセスの構成の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照
-
Oracle Enterprise Manager Cloud Controlを使用して取得プロセスを管理する手順については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照
15.1.1 取得プロセスの起動
既存の取得プロセスを起動するには、DBMS_CAPTURE_ADM
パッケージのSTART_CAPTURE
プロシージャを実行します。たとえば、次のプロシージャでは取得プロセスstrm01_capture
が起動されます。
BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'strm01_capture'); END; /
注意:
新しい取得プロセスで新しいLogMinerデータ・ディクショナリが使用される場合は、新しい取得プロセスを初めて起動するときに、新しいLogMinerデータ・ディクショナリの移入に時間がかかる場合があります。新しいLogMinerデータ・ディクショナリは、取得プロセスの作成時にNULL
以外の先頭SCN値を指定した場合に作成されます。
関連項目:
Oracle Enterprise Manager Cloud Controlを使用して取得プロセスを起動する手順については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照
15.1.2 取得プロセスの停止
既存の取得プロセスを停止するには、DBMS_CAPTURE_ADM
パッケージのSTOP_CAPTURE
プロシージャを実行します。たとえば、次のプロシージャでは取得プロセスstrm01_capture
が停止されます。
BEGIN DBMS_CAPTURE_ADM.STOP_CAPTURE( capture_name => 'strm01_capture'); END; /
関連項目:
Oracle Enterprise Manager Cloud Controlを使用して取得プロセスを停止する手順については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照
15.1.3 取得プロセスのルール・セットの管理
この項では、次のタスクの実行手順を説明します。
15.1.3.1 取得プロセスのルール・セットの指定
取得プロセスには、1つのポジティブ・ルール・セットおよび1つのネガティブ・ルール・セットを指定できます。ポジティブ・ルール・セットの1つ以上のルールがTRUE
と評価され、ネガティブ・ルール・セットのすべてのルールがFALSE
と評価された場合、取得プロセスによって変更が取得されます。ネガティブ・ルール・セットは、ポジティブ・ルール・セットの前に評価されます。
15.1.3.1.1 取得プロセスのポジティブ・ルール・セットの指定
既存のルール・セットをポジティブ・ルール・セットとして既存の取得プロセスに指定するには、ALTER_CAPTURE
プロシージャのrule_set_name
パラメータを使用します。このプロシージャは、DBMS_CAPTURE_ADM
パッケージに含まれています。
たとえば、次のプロシージャでは、取得プロセスstrm01_capture
のポジティブ・ルール・セットがstrm02_rule_set
に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', rule_set_name => 'strmadmin.strm02_rule_set'); END; /
15.1.3.1.2 取得プロセスのネガティブ・ルール・セットの指定
既存のルール・セットをネガティブ・ルール・セットとして既存の取得プロセスに指定するには、ALTER_CAPTURE
プロシージャのnegative_rule_set_name
パラメータを使用します。このプロシージャは、DBMS_CAPTURE_ADM
パッケージに含まれています。
たとえば、次のプロシージャでは、取得プロセスstrm01_capture
のネガティブ・ルール・セットがstrm03_rule_set
に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', negative_rule_set_name => 'strmadmin.strm03_rule_set'); END; /
15.1.3.2 取得プロセスのルール・セットへのルールの追加
既存の取得プロセスのルール・セットにルールを追加するには、DBMS_STREAMS_ADM
パッケージの次のいずれかのプロシージャを実行して既存の取得プロセスを指定します。
ADD_SUBSET_RULES
プロシージャ以外のこれらのプロシージャでは、取得プロセスのポジティブ・ルール・セットまたはネガティブ・ルール・セットにルールを追加できます。ADD_SUBSET_RULES
プロシージャでは、取得プロセスのポジティブ・ルール・セットのみにルールを追加できます。
関連項目:
15.1.3.2.1 取得プロセスのポジティブ・ルール・セットへのルールの追加
次の例では、DBMS_STREAMS_ADM
パッケージのADD_TABLE_RULES
プロシージャを実行して、取得プロセスstrm01_capture
のポジティブ・ルール・セットにルールを追加します。
BEGIN DBMS_STREAMS_ADM.ADD_TABLE_RULES( table_name => 'hr.departments', streams_type => 'capture', streams_name => 'strm01_capture', queue_name => 'strmadmin.streams_queue', include_dml => TRUE, include_ddl => TRUE, inclusion_rule => TRUE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
-
2つのルールが作成されます。一方のルールは
hr.departments
表に対するDML変更についてTRUE
と評価され、他方のルールはhr.departments
表に対するDDL変更についてTRUE
と評価されます。ルール名は、システムによって生成されます。 -
inclusion_rule
パラメータがTRUE
に設定されているため、これらの2つのルールは、取得プロセスに関連付けられたポジティブ・ルール・セットに追加されます。 -
DBMS_CAPTURE_ADM
パッケージのPREPARE_TABLE_INSTANTIATION
プロシージャを実行することで、インスタンス化用にhr.departments
表が準備されます。 -
hr.departments
表の主キー、一意キー、ビットマップ索引および外部キー列のサプリメンタル・ロギングが有効になります。PREPARE_TABLE_INSTANTIATION
プロシージャの実行時に、supplemental_logging
パラメータにデフォルト値(keys
)が指定されます。
取得プロセスによってダウンストリーム取得が実行される場合、そのダウンストリーム取得プロセスでソース・データベースへのデータベース・リンクが使用される場合にのみ、表がインスタンス化のために準備され、キー列のサプリメンタル・ロギングが有効になります。ダウンストリーム取得プロセスでソース・データベースへのデータベース・リンクが使用されない場合、インスタンス化のために表を手動で準備し、手動でサプリメンタル・ロギングを有効にする必要があります。
15.1.3.2.2 取得プロセスのネガティブ・ルール・セットへのルールの追加
次の例では、DBMS_STREAMS_ADM
パッケージのADD_TABLE_RULES
プロシージャを実行して、取得プロセスstrm01_capture
のネガティブ・ルール・セットにルールを追加します。
BEGIN DBMS_STREAMS_ADM.ADD_TABLE_RULES( table_name => 'hr.job_history', streams_type => 'capture', streams_name => 'strm01_capture', queue_name => 'strmadmin.streams_queue', include_dml => TRUE, include_ddl => TRUE, inclusion_rule => FALSE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
-
2つのルールが作成されます。一方のルールは
hr.job_history
表に対するDML変更についてTRUE
と評価され、他方のルールはhr.job_history
表に対するDDL変更についてTRUE
と評価されます。ルール名は、システムによって生成されます。 -
inclusion_rule
パラメータがFALSE
に設定されているため、これらの2つのルールは、取得プロセスに関連付けられたネガティブ・ルール・セットに追加されます。
15.1.3.3 取得プロセスのルール・セットからのルールの削除
取得プロセスでルールに指定された変更を取得しない場合には、取得プロセスのルール・セットからルールを削除します。たとえば、ルールdepartments3
でhr.departments
表へのDML変更が取得されるように指定するとします。取得プロセスでhr.departments
表への変更を取得しない場合は、ルール・セットからルールdepartments3
を削除します。
DBMS_STREAMS_ADM
パッケージのREMOVE_RULE
プロシージャを実行して、既存の取得プロセスのルール・セットからルールを削除します。たとえば、次のプロシージャでは、取得プロセスstrm01_capture
のポジティブ・ルール・セットからルールdepartments3
が削除されます。
BEGIN DBMS_STREAMS_ADM.REMOVE_RULE( rule_name => 'departments3', streams_type => 'capture', streams_name => 'strm01_capture', drop_unused_rule => TRUE, inclusion_rule => TRUE); END; /
この例では、REMOVE_RULE
プロシージャのdrop_unused_rule
パラメータがTRUE
に設定されています。これはデフォルトの設定です。したがって、削除するルールが他のどのルール・セットにも含まれていなければ、そのルールはデータベースから削除されます。drop_unused_rule
パラメータがFALSE
に設定されている場合、ルールはルール・セットから削除されますが、データベースからは削除されません。
inclusion_rule
パラメータがFALSE
に設定されている場合、REMOVE_RULE
プロシージャによって、取得プロセスのポジティブ・ルール・セットではなく、ネガティブ・ルール・セットからルールが削除されます。
取得プロセスのルール・セットからすべてのルールを削除するには、REMOVE_RULE
プロシージャの実行時にrule_name
パラメータにNULL
を指定します。
15.1.3.4 取得プロセスのルール・セットの削除
既存の取得プロセスからルール・セットを削除するには、DBMS_CAPTURE_ADM
パッケージのALTER_CAPTURE
プロシージャを使用します。このプロシージャでは、ポジティブ・ルール・セットまたはネガティブ・ルール・セット、あるいはその両方を削除できます。取得プロセスのポジティブ・ルール・セットを削除するには、remove_rule_set
パラメータにTRUE
を指定します。取得プロセスのネガティブ・ルール・セットを削除するには、remove_negative_rule_set
パラメータにTRUE
を指定します。
たとえば、次のプロシージャでは、取得プロセスstrm01_capture
からポジティブ・ルール・セットとネガティブ・ルール・セットの両方が削除されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', remove_rule_set => TRUE, remove_negative_rule_set => TRUE); END; /
注意:
取得プロセスにポジティブ・ルール・セットまたはネガティブ・ルール・セットが存在しない場合、その取得プロセスでは、SYS
スキーマ、SYSTEM
スキーマおよびCTXSYS
スキーマ内のデータベース・オブジェクトを除き、データベース内のすべてのオブジェクトに対するすべてのサポートされる変更が取得されます。
15.1.4 取得プロセス・パラメータの設定
取得プロセスのパラメータを設定するには、DBMS_CAPTURE_ADM
パッケージのSET_PARAMETER
プロシージャを使用します。取得プロセス・パラメータによって、取得プロセスの動作が制御されます。
たとえば、次のプロシージャでは、取得プロセスstrm01_capture
のparallelism
パラメータが4
に設定されます。
BEGIN DBMS_CAPTURE_ADM.SET_PARAMETER( capture_name => 'strm01_capture', parameter => 'parallelism', value => '4'); END; /
注意:
-
parallelism
パラメータを設定すると、取得プロセスが自動的に停止され、再起動されます。 -
value
パラメータは、パラメータ値が数値の場合にも、常にVARCHAR2
値として入力されます。 -
value
パラメータがNULL
に設定されているか、または指定されていない場合、パラメータはデフォルト値に設定されます。
関連項目:
-
Oracle Enterprise Manager Cloud Controlを使用して取得プロセス・パラメータを設定する手順については、Oracle Enterprise Manager Cloud Controlのオンライン・ヘルプを参照
-
取得プロセス・パラメータの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』の
DBMS_CAPTURE_ADM.SET_PARAMETER
プロシージャに関する項を参照
15.1.5 取得プロセスの取得ユーザーの設定
取得ユーザーは、取得プロセスのルール・セットを満たすすべてのDML変更およびDDL変更を取得するユーザーです。取得プロセスの取得ユーザーを設定するには、DBMS_CAPTURE_ADM
パッケージのALTER_CAPTURE
プロシージャでcapture_user
パラメータを使用します。
取得ユーザーを変更するには、ALTER_CAPTURE
プロシージャを起動するユーザーにDBA
ロールが付与されている必要があります。capture_user
をSYS
に設定できるのは、SYS
ユーザーに限られています。
たとえば、次のプロシージャでは、取得プロセスstrm01_capture
の取得ユーザーがhr
に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', capture_user => 'hr'); END; /
このプロシージャを実行すると、新しい取得ユーザーに、取得プロセスで使用するキューのエンキュー権限が付与され、そのユーザーがキューの保護キュー・ユーザーとして構成されます。また、取得ユーザーが次の権限を持っていることを確認する必要があります。
-
取得プロセスで使用するルール・セットの
EXECUTE
権限 -
ルール・セットで使用するすべてのカスタム・ルールベースの変換ファンクションの
EXECUTE
権限
これらの権限は、取得ユーザーに直接付与するか、ロールを介して付与できます。
また、取得ユーザーには、取得プロセスで実行されるルールベースの変換で起動されるすべてのパッケージ(Oracle提供パッケージを含む)に対するEXECUTE
権限を付与する必要があります。これらの権限は、取得ユーザーに直接付与する必要があります。ロールを通して付与することはできません。
注意:
Oracle Database Vaultがインストールされている場合、取得ユーザーを変更するユーザーにBECOME
USER
システム権限を付与する必要があります。Oracle Database Vaultがインストールされていない場合は、ユーザーにこの権限を付与する必要はありません。必要に応じて、取得ユーザーの変更後に、ユーザーからBECOME
USER
システム権限を取り消すことができます。
15.1.6 取得プロセスのチェックポイント保存時間の管理
チェックポイント保存時間は、チェックポイントが取得プロセスによって自動的にパージされるまでの保存期間です。
DBMS_CAPTURE_ADM
パッケージのALTER_CAPTURE
プロシージャのcheckpoint_retention_time
パラメータを使用して、取得プロセスのチェックポイント保存時間を設定します。
この項の内容は次のとおりです。
関連項目:
15.1.6.1 新しい値の取得プロセスのチェックポイント保存時間の設定
チェックポイント保存時間を設定する場合、小数値を使用して日数と時間を指定できます。たとえば、取得プロセスstrm01_capture
によってチェックポイントが10日と12時間ごとに自動的に消去されるように指定するには、次のプロシージャを実行します。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', checkpoint_retention_time => 10.5); END; /
15.1.6.2 無期限の取得プロセスのチェックポイント保存時間の設定
取得プロセスによってチェックポイントが自動的に消去されないように指定するには、チェックポイント保存時間をDBMS_CAPTURE_ADM.INFINITE
に設定します。たとえば、次のプロシージャでは、取得プロセスstrm01_capture
のチェックポイント保存時間が無期限に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', checkpoint_retention_time => DBMS_CAPTURE_ADM.INFINITE); END; /
15.1.7 取得プロセスへのアーカイブREDOログ・ファイルの明示的な追加
取得プロセスにアーカイブREDOログ・ファイルを手動で追加するには、次の文を使用します。
ALTER DATABASE REGISTER LOGICAL LOGFILE file_name FOR capture_process;
ここでは、file_name
は追加するアーカイブREDOログ・ファイルの名前で、capture_process
はダウンストリーム・データベースのREDOログ・ファイルを使用する取得プロセスの名前です。capture_process
には、logminer_session_name
と同じ名前を必ず指定してください。取得プロセスが実行されるサイトには、REDOログ・ファイルが存在する必要があります。
たとえば、取得プロセスstrm03_capture
に/usr/log_files/1_3_486574859.dbf
アーカイブREDOログ・ファイルを追加するには、次の文を発行します。
ALTER DATABASE REGISTER LOGICAL LOGFILE '/usr/log_files/1_3_486574859.dbf' FOR 'strm03_capture';
関連項目:
ALTER
DATABASE
文の詳細は、『Oracle Database SQL言語リファレンス』、REDOログ・ファイルの登録方法の詳細は、『Oracle Data Guard概要および管理』を参照してください。
15.1.8 既存の取得プロセスの先頭SCNの設定
-
取得プロセスの現在の先頭SCNより大きい値である必要があります。
-
取得プロセスの現行の適用済SCN以下であること。ただし、取得プロセスに現在適用されているSCNがゼロである場合は、この条件を満たす必要はありません。
-
取得プロセスの必須チェックポイントSCN以下の値である必要があります。
データベース内の各取得プロセスの現行の先頭SCN、適用済SCNおよび必須チェックポイントSCNを特定するには、次の問合せを使用します。
SELECT CAPTURE_NAME, FIRST_SCN, APPLIED_SCN, REQUIRED_CHECKPOINT_SCN FROM DBA_CAPTURE;
取得プロセスの先頭SCNをリセットすると、新しい先頭SCN設定よりも値が小さい情報が、取得プロセスのLogMinerデータ・ディクショナリから自動的に消去されます。このため、取得プロセスの先頭SCNのリセット後は、その取得プロセスの開始SCNを新しい先頭SCNより小さい値に設定することはできません。また、新しい先頭SCNの設定前の情報を含むREDOログ・ファイルは、取得プロセスでは必要なくなります。
たとえば、次のプロシージャでは、DBMS_CAPTURE_ADM
パッケージのALTER_CAPTURE
プロシージャを使用して、取得プロセスstrm01_capture
の先頭SCNが351232
に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_CAPTURE( capture_name => 'strm01_capture', first_scn => 351232); END; /
注意:
-
指定された最小SCNが取得プロセスに対する現行の開始時SCNより大きい場合は、現行の開始時SCNが自動的に新しい最小SCNに変更されます。
-
過去のある時点でのREDOログ内の変更を取得する必要がある場合、取得プロセスを作成し、REDOログでの以前のデータ・ディクショナリ・ビルドに対応する先頭SCNを指定できます。
DBMS_CAPTURE_ADM
パッケージのBUILD
プロシージャによって、REDOログでデータ・ディクショナリ・ビルドが実行されます。 -
DBA_LOGMNR_PURGED_LOG
データ・ディクショナリ・ビューを問い合せて、取得プロセスに不要なREDOログ・ファイルを特定できます。
関連項目:
-
不要なREDOログ・ファイルを判別する問合せについては、「各取得プロセスで使用される各REDOログ・ファイルのSCN値の表示」を参照
15.1.9 既存の取得プロセスの開始SCNの設定
既存の取得プロセスの開始SCNを設定できます。通常、取得プロセスから変更を受け取る宛先データベースのいずれかでPoint-in-Timeリカバリを実行する必要がある場合、取得プロセスの開始SCNをリセットします。
指定した開始SCNは、取得プロセスの先頭SCNよりも大きいか等しいことが必要です。また、取得プロセスの開始SCNをリセットするときは、必要なREDOログ・ファイルが取得プロセスで使用できることを確認してください。
データベース内の各取得プロセスの先頭SCNを判別するには、次の問合せを使用します。
SELECT CAPTURE_NAME, FIRST_SCN FROM DBA_CAPTURE;
たとえば、取得プロセスstrm01_capture
の開始SCNを750338
に設定するには、次の手順を実行します。
関連項目:
-
Oracle Streams環境において、宛先データベースでPoint-in-Timeリカバリを実行する方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照
15.1.10 ダウンストリーム取得でデータベース・リンクを使用するかどうかの指定
既存のダウンストリーム取得プロセスで、ソース・データベースへの管理用のデータベース・リンクを使用するかどうかを指定するには、DBMS_CAPTURE_ADM
パッケージのALTER_CAPTURE
プロシージャを使用します。ダウンストリーム取得プロセスでデータベース・リンクを使用するように指定するには、use_database_link
パラメータをTRUE
に設定します。ダウンストリーム取得プロセスでデータベース・リンクを使用しないように指定するには、use_database_link
パラメータをFALSE
に設定します。
現在データベース・リンクを使用していない取得プロセスでデータベース・リンクを使用するようにするには、use_database_link
パラメータをTRUE
に設定します。この場合、ソース・データベースのグローバル名と同じ名前を持つデータベース・リンクが、ダウンストリーム・データベースに存在する必要があります。
現在データベース・リンクを使用している取得プロセスでデータベース・リンクを使用しないようにするには、use_database_link
パラメータをFALSE
に設定します。この場合、取得プロセスの変更後に、いくつかの管理操作を手動で行う必要があります。たとえば、DBMS_STREAMS_ADM
パッケージを使用して新しい取得プロセスのルールを追加する場合、ソース・データベースで、そのルールに関連付けられたオブジェクトのインスタンス化の準備を手動で行う必要があります。
use_database_link
パラメータをNULL
に設定した場合、取得プロセスに対するこのパラメータの現行の値は変更されません。
ソース・データベースdbs1.example.com
へのデータベース・リンクを作成し、この取得プロセスがデータベース・リンクを使用するように指定するには、次の手順を実行します。
関連項目:
15.1.11 取得プロセスの削除
既存の取得プロセスを削除するには、DBMS_CAPTURE_ADM
パッケージのDROP_CAPTURE
プロシージャを実行します。たとえば、次のプロシージャでは、取得プロセスstrm02_capture
が削除されます。
BEGIN DBMS_CAPTURE_ADM.DROP_CAPTURE( capture_name => 'strm02_capture', drop_unused_rule_sets => TRUE); END; /
drop_unused_rule_sets
パラメータがTRUE
に設定されているため、このプロシージャでは、取得プロセスstrm02_capture
で使用されているすべてのルール・セットも削除されます。ただし、他のOracle Streamsクライアントで使用されているルール・セットは削除されません。drop_unused_rule_sets
パラメータがTRUE
に設定されている場合は、取得プロセスのポジティブ・ルール・セットとネガティブ・ルール・セットの両方が削除されることがあります。このプロシージャによってルール・セットが削除された場合、そのルール・セット内のルールのうち、他のルール・セットに含まれていないルールも削除されます。
注意:
取得プロセスを削除するには、状態がDISABLED
またはABORTED
であることが必要です。ENABLED
の取得プロセスは削除できません。
15.2 同期取得の管理
同期取得では内部メカニズムを使用して、表へのデータ操作言語(DML)の変更を取得します。同期取得は、取得した各変更を論理変更レコード(LCR)形式に再フォーマットし、LCRをANYDATA
キューにエンキューします。
この項の内容は次のとおりです。
関連項目:
-
「同期取得の監視」
-
同期取得を使用するレプリケーション環境の構成例については、『Oracle Streamsレプリケーション管理者ガイド』を参照
15.2.1 同期取得のルール・セットの管理
この項では、次のタスクの実行手順を説明します。
15.2.1.1 同期取得のルール・セットの指定
同期取得には、1つのポジティブ・ルール・セットを指定できます。ポジティブ・ルール・セットの1つ以上のルールがTRUE
と評価された場合、同期取得によって変更が取得されます。
既存のルール・セットをポジティブ・ルール・セットとして既存の同期取得に指定するには、ALTER_SYNC_CAPTURE
プロシージャのrule_set_name
パラメータを使用します。このプロシージャは、DBMS_CAPTURE_ADM
パッケージに含まれています。
たとえば、次のプロシージャでは、同期取得sync_capture
のポジティブ・ルール・セットがsync_rule_set
に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_SYNC_CAPTURE( capture_name => 'sync_capture', rule_set_name => 'strmadmin.sync_rule_set'); END; /
注意:
同期取得のルール・セットは削除できません。
15.2.1.2 同期取得のルール・セットへのルールの追加
関連項目:
次の例では、DBMS_STREAMS_ADM
パッケージのADD_TABLE_RULES
プロシージャを実行して、同期取得sync_capture
のポジティブ・ルール・セットにルールを追加します。
BEGIN DBMS_STREAMS_ADM.ADD_TABLE_RULES( table_name => 'hr.departments', streams_type => 'sync_capture', streams_name => 'sync_capture', queue_name => 'strmadmin.streams_queue', include_dml => TRUE); END; /
このプロシージャを実行すると、次のアクションが実行されます。
-
ルールが1つ作成されます。このルールは、
hr.departments
表に対するDML変更についてTRUE
と評価されます。ルール名はシステムによって生成されます。 -
ルールは、同期取得に関連付けられたポジティブ・ルール・セットに追加されます。
-
DBMS_CAPTURE_ADM
パッケージのPREPARE_SYNC_INSTANTIATION
ファンクションが実行され、インスタンス化用にhr.departments
表が準備されます。
注意:
-
ADD_TABLE_RULES
プロシージャまたはADD_SUBSET_RULES
プロシージャを使用して、表のルールが同期取得のルール・セットに追加された場合のみ、同期取得によって表への変更が取得されます。DBMS_RULE_ADM
パッケージのADD_RULE
プロシージャを使用して、表ルールまたはサブセット・ルールがルール・セットに追加されると、同期取得によって表への変更は取得されません。また、同期取得では、グローバル・ルールやスキーマ・ルールなど、ルール・セットの表ルール以外およびサブセット・ルール以外のすべてのルールは無視されます。 -
ADD_TABLE_RULES
プロシージャまたはADD_SUBSET_RULES
プロシージャでルールが同期取得のルール・セットに追加される場合、プロシージャは指定した表の排他ロックを取得する必要があります。指定された表に未処理のトランザクションがある場合、プロシージャはロックを取得できるまで待機します。
15.2.1.3 同期取得のルール・セットからのルールの削除
同期取得でルールに指定された変更を取得しない場合、同期取得のルール・セットからルールを削除します。たとえば、ルールdepartments3
でhr.departments
表へのDML変更が取得されるように指定するとします。同期取得でhr.departments
表への変更を取得しない場合は、ルール・セットからルールdepartments3
を削除します。
DBMS_STREAMS_ADM
パッケージのREMOVE_RULE
プロシージャを実行して、既存の同期取得のルール・セットからルールを削除します。たとえば、次のプロシージャでは、同期取得sync_capture
のポジティブ・ルール・セットからルールdepartments3
が削除されます。
BEGIN DBMS_STREAMS_ADM.REMOVE_RULE( rule_name => 'departments3', streams_type => 'sync_capture', streams_name => 'sync_capture', drop_unused_rule => TRUE); END; /
この例では、REMOVE_RULE
プロシージャのdrop_unused_rule
パラメータがTRUE
に設定されています。これはデフォルトの設定です。したがって、削除するルールが他のどのルール・セットにも含まれていなければ、そのルールはデータベースから削除されます。drop_unused_rule
パラメータがFALSE
に設定されている場合、ルールはルール・セットから削除されますが、データベースからは削除されません。
同期取得のルール・セットからすべてのルールを削除するには、REMOVE_RULE
プロシージャの実行時にrule_name
パラメータにNULL
を指定します。
15.2.2 同期取得の取得ユーザーの設定
取得ユーザーは、同期取得のルール・セットを満たすすべてのDML変更を取得するユーザーです。同期取得の取得ユーザーを設定するには、DBMS_CAPTURE_ADM
パッケージのALTER_SYNC_CAPTURE
プロシージャでcapture_user
パラメータを使用します。
取得ユーザーを変更するには、ALTER_SYNC_CAPTURE
プロシージャを起動するユーザーにDBA
ロールが付与されている必要があります。capture_user
をSYS
に設定できるのは、SYS
ユーザーに限られています。
たとえば、次のプロシージャでは、同期取得sync_capture
の取得ユーザーがhr
に設定されます。
BEGIN DBMS_CAPTURE_ADM.ALTER_SYNC_CAPTURE( capture_name => 'sync_capture', capture_user => 'hr'); END; /
このプロシージャを実行すると、新しい取得ユーザーに、同期取得で使用するキューのエンキュー権限が付与され、そのユーザーがキューの保護キュー・ユーザーとして構成されます。また、取得ユーザーが次の権限を持っていることを確認する必要があります。
-
同期取得で使用されるルール・セットの
EXECUTE
権限 -
ルール・セットで使用するすべてのカスタム・ルールベースの変換ファンクションの
EXECUTE
権限
これらの権限は、取得ユーザーに直接付与するか、ロールを介して付与できます。
また、取得ユーザーには、同期取得で実行されるルールベースの変換で起動されるすべてのパッケージ(Oracle提供パッケージを含む)に対するEXECUTE
権限を付与する必要があります。これらの権限は、取得ユーザーに直接付与する必要があります。ロールを通して付与することはできません。
注意:
Oracle Database Vaultがインストールされている場合、取得ユーザーを変更するユーザーにBECOME
USER
システム権限を付与する必要があります。Oracle Database Vaultがインストールされていない場合は、ユーザーにこの権限を付与する必要はありません。必要に応じて、取得ユーザーの変更後に、ユーザーからBECOME
USER
システム権限を取り消すことができます。
15.2.3 同期取得の削除
既存の同期取得を削除するには、DBMS_CAPTURE_ADM
パッケージのDROP_CAPTURE
プロシージャを実行します。たとえば、次のプロシージャでは、同期取得sync_capture
が削除されます。
BEGIN DBMS_CAPTURE_ADM.DROP_CAPTURE( capture_name => 'sync_capture', drop_unused_rule_sets => TRUE); END; /
drop_unused_rule_sets
パラメータがTRUE
に設定されているため、このプロシージャでは、同期取得sync_capture
で使用されているすべてのルール・セットも削除されます(ただし、他のOracle Streamsクライアントで使用されているルール・セットは削除されません)。drop_unused_rule_sets
パラメータがTRUE
に設定されている場合は、同期取得のルール・セットが削除されることがあります。このプロシージャによってルール・セットが削除された場合、そのルール・セット内のルールのうち、他のルール・セットに含まれていないルールも削除されます。
15.3 取得LCRの追加属性の管理
1つ以上の追加属性を取得するように取得プロセスまたは同期取得に指示するには、DBMS_CAPTURE_ADM
パッケージのINCLUDE_EXTRA_ATTRIBUTE
プロシージャを使用します。また、このプロシージャを使用して、現在取得している追加属性を排除するように取得プロセスまたは同期取得に指示することもできます。
追加属性は次のとおりです。
-
row_id
(行LCRのみ) -
serial#
-
session#
-
thread#
-
tx_name
-
ユーザー名
この項では、次のタスクの実行手順を説明します。
関連項目:
-
INCLUDE_EXTRA_ATTRIBUTE
プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照
15.3.1 暗黙的に取得されたLCRへの追加属性の包含
取得プロセスまたは同期取得で取得されたLCRに追加属性を含めるには、INCLUDE_EXTRA_ATTRIBUTES
プロシージャを実行して、include
パラメータをTRUE
に設定します。たとえば、取得された各LCRにトランザクション名を含めるように取得プロセスまたは同期取得strm01_capture
に指示するには、次のプロシージャを実行します。
BEGIN DBMS_CAPTURE_ADM.INCLUDE_EXTRA_ATTRIBUTE( capture_name => 'strm01_capture', attribute_name => 'tx_name', include => TRUE); END; /
15.3.2 暗黙的に取得されたLCRからの追加属性の排除
取得プロセスまたは同期取得で取得されたLCRから追加属性を排除するには、INCLUDE_EXTRA_ATTRIBUTES
プロシージャを実行して、include
パラメータをFALSE
に設定します。たとえば、取得された各LCRからトランザクション名を排除するように取得プロセスまたは同期取得strm01_capture
に指示するには、次のプロシージャを実行します。
BEGIN DBMS_CAPTURE_ADM.INCLUDE_EXTRA_ATTRIBUTE( capture_name => 'strm01_capture', attribute_name => 'tx_name', include => FALSE); END; /
15.4 取得プロセスから同期取得への切替え
この項では、取得プロセスから同期取得への切替え方法について説明します。通常、同期取得は、比較的少数の表へのデータ操作言語(DML)変更を取得するために使用されます。現在、同期取得ではなく取得プロセスを使用して少数の表への変更を取得している場合は、この切替えを決定できます。
次のいずれかの条件に該当する場合は、取得プロセスから同期取得への切替えは行わないでください。
-
取得プロセスで、少数の表への変更を取得するのではなく、データベース全体、1つ以上のスキーマまたは多数の表への変更を取得している場合で、引き続きこれらの変更を取得する場合。
-
取得プロセスでデータ定義言語(DDL)変更を取得している場合で、引き続きDDL変更を取得する場合。同期取得では、DDL変更は取得できません。
-
取得プロセスでネガティブ・ルール・セットを使用しており、引き続きネガティブ・ルール・セットを使用する場合。同期取得では、ネガティブ・ルール・セットは使用できません。
-
取得プロセスがダウンストリーム取得プロセスの場合。同期取得では、ダウンストリーム取得は実行できません。
この項では例を用いて、取得プロセスから同期取得への切替え方法について説明します。表15-1に、サンプル環境での切替え前後のOracle Streamsコンポーネントを示します。
表15-1 取得プロセスから同期取得への切替えの例
Oracle Streamsコンポーネント | 切替え前 | 切替え後 |
---|---|---|
取得プロセス |
|
なし |
取得プロセス・ルール・セット |
|
なし |
同期取得 |
なし |
|
同期取得ルール・セット |
なし |
|
伝播 |
|
|
伝播ルール・セット |
|
|
ソース・キュー |
|
|
宛先キュー |
|
|
適用プロセス |
|
|
適用プロセス・ルール・セット |
|
|
表15-1では、Oracle Streams環境で切替え前と切替え後に同じルール・セットが使用されていることに注意してください。また、この項の例では、ソース・データベースがdb1.example.com
で、宛先データベースがdb2.example.com
であるとします。
注意:
この項の例では、Oracle Streams環境に2つのデータベースのみを含むものとします。有向ネットワークを使用して複数のデータベース経由で変更を送信している場合は、変更の新しい同期取得ストリーム用に追加の伝播およびキューを構成し、取得プロセスのストリームによって使用されていた追加の伝播およびキューを削除することが必要になる場合もあります。
取得プロセスから同期取得に切り替えるには、次の手順を実行します。
双方向レプリケーション環境の場合、これらの手順を個別に実行し、取得プロセスから同期取得に双方向で切り替えることができます。
15.5 同期取得から取得プロセスへの切替え
-
現在は少数の表への変更を取得しているが、使用する環境を拡張して、多数の表、1つ以上のスキーマまたはデータベース全体への変更を取得する場合。
-
変更の取得中に、ネガティブ・ルール・セットを使用する場合。
-
データベース・オブジェクトへのデータ定義言語(DDL)変更を取得する場合。
この項では例を用いて、同期取得から取得プロセスへの切替え方法について説明します。表 15-2に、サンプル環境での切替え前後のOracle Streamsコンポーネントを示します。
表 15-2 同期取得から取得プロセスへの切替えの例
Oracle Streamsコンポーネント | 切替え前 | 切替え後 |
---|---|---|
同期取得 |
|
なし |
同期取得ルール・セット |
|
なし |
取得プロセス |
なし |
|
取得プロセス・ルール・セット |
なし |
|
伝播 |
|
|
伝播ルール・セット |
|
|
ソース・キュー |
|
|
宛先キュー |
|
|
適用プロセス |
|
|
適用プロセス・ルール・セット |
|
|
表15-2では、Oracle Streams環境で切替え前と切替え後に同じルール・セットが使用されていることに注意してください。また、この項の例では、ソース・データベースがdb1.example.com
で、宛先データベースがdb2.example.com
であるとします。
注意:
この項の例では、Oracle Streams環境に2つのデータベースのみを含むものとします。有向ネットワークを使用して複数のデータベースを介して変更を送信している場合、変更の新規取得プロセス・ストリーム用に追加の伝播およびキューを構成し、同期取得のストリームによって使用された追加の伝播およびキューを削除することが必要になる場合もあります。
同期取得から取得プロセスに切り替えるには、次の手順を実行します。
双方向レプリケーション環境の場合、これらの手順を個別に実行して、同期取得から取得プロセスに双方向で切り替えることができます。