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がインストールされている場合、取得ユーザーを変更するユーザーにBECOMEUSERシステム権限を付与する必要があります。Oracle Database Vaultがインストールされていない場合は、ユーザーにこの権限を付与する必要はありません。必要に応じて、取得ユーザーの変更後に、ユーザーからBECOMEUSERシステム権限を取り消すことができます。
                           
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がインストールされている場合、取得ユーザーを変更するユーザーにBECOMEUSERシステム権限を付与する必要があります。Oracle Database Vaultがインストールされていない場合は、ユーザーにこの権限を付与する必要はありません。必要に応じて、取得ユーザーの変更後に、ユーザーからBECOMEUSERシステム権限を取り消すことができます。
                           
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つのデータベースのみを含むものとします。有向ネットワークを使用して複数のデータベースを介して変更を送信している場合、変更の新規取得プロセス・ストリーム用に追加の伝播およびキューを構成し、同期取得のストリームによって使用された追加の伝播およびキューを削除することが必要になる場合もあります。
同期取得から取得プロセスに切り替えるには、次の手順を実行します。
双方向レプリケーション環境の場合、これらの手順を個別に実行して、同期取得から取得プロセスに双方向で切り替えることができます。