DBMS_APPLY_ADM
パッケージは、Oracle Streams適用プロセス、XStreamアウトバウンド・サーバーおよびXStreamインバウンド・サーバーを構成および管理するサブプログラムを提供しています。
この章では、次の項目について説明します。
概要
セキュリティ・モデル
使用上の注意
関連項目:
|
この項では、DBMS_APPLY_ADM
パッケージの使用に関連する項目について説明します。
このパッケージは、Oracle Streams適用プロセス、XStreamアウトバウンド・サーバーおよびXStreamインバウンド・サーバーを開始、停止および構成するインタフェースを提供します。このパッケージには、適用ハンドラの構成、メッセージのエンキュー先の設定、メッセージの実行ディレクティブの指定を行うサブプログラムが含まれます。また、このパッケージは、接続先データベースのオブジェクトにインスタンス化SCNを設定する管理サブプログラムも提供します。さらには、適用エラーを管理するサブプログラムもあります。
Xstreamインバウンド・サーバーおよびアウトバウンド・サーバーは、マルチテナント・コンテナ・データベース(CDB)のXStream構成で使用できます。CDBは、ユーザーが作成した0以上のプラガブル・データベース(PDB)を含むOracle Databaseです。
注意:
|
関連項目:
|
このパッケージのセキュリティは、次のいずれかの方法で制御できます。
選択したユーザーまたはロールに、このパッケージのEXECUTE
を付与する方法
選択したユーザーまたはロールに、EXECUTE_CATALOG_ROLE
を付与する方法
パッケージのサブプログラムをストアド・プロシージャ内から実行する場合、そのサブプログラムを実行するユーザーには、パッケージのEXECUTE
権限を直接付与する必要があります。ロールを通して付与することはできません。
DBMS_APPLY_ADM
パッケージを使用してOracle Streams構成を管理する場合、ユーザーには、Oracle Streams管理者の権限を付与する必要があります。
DBMS_APPLY_ADM
パッケージを使用してXStream構成を管理する場合、ユーザーには、XStream管理者の権限を付与する必要があります。
注意: ユーザーには、このパッケージ内のサブプログラムを使用して複数の管理タスク(適用ユーザーの設定など)を実行するための追加の権限を付与する必要があります。サブプログラムのために追加の権限が必要な場合、その権限は、サブプログラムを説明する項に記載されています。 |
関連項目:
|
表23-1 DBMS_APPLY_ADMパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
特定のデータベース・オブジェクトに対して指定された操作の文DMLハンドラを単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントに追加します。 |
|
適用コンポーネントを変更します。 |
|
適用時に、行論理変更レコード(行LCR)内に存在する1つ以上の列の元の値を、宛先サイトの対応する列の現在の値と比較するかどうかを指定します。 |
|
適用コンポーネントを作成します。 |
CREATE_OBJECT_DEPENDENCYプロシージャ |
オブジェクトの依存性を作成します。 |
|
指定した適用コンポーネントに対するすべてのエラー・トランザクションを削除します。 |
|
指定したエラー・トランザクションを削除します。 |
|
適用コンポーネントを削除します。 |
|
オブジェクトの依存性を削除します。 |
|
指定した適用コンポーネントに対するエラー・トランザクションを再実行します。 |
|
指定したエラー・トランザクションを再実行します。 |
|
指定したメッセージ番号とトランザクション識別子に対するメッセージ・ペイロードをエラー・キューから返します。 |
|
特定のデータベース・オブジェクトに対して指定された操作の文DMLハンドラを単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントから削除します。 |
|
特定のデータベース・オブジェクトに対して指定された操作の変更を追跡する文DMLハンドラを、単一の適用コンポーネントで設定または設定解除します。 |
|
ユーザー・プロシージャを、特定のデータベース・オブジェクトに対して指定された操作のプロシージャDMLハンドラとして単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントに設定します。 |
|
指定したルールを満たすメッセージが適用コンポーネントによって自動的にエンキューされるキューを設定します。 |
|
指定したルールを満たすメッセージを適用コンポーネントによって実行するかどうかを指定します。 |
SET_GLOBAL_INSTANTIATION_SCNプロシージャ |
指定したソース・データベースに対して、およびオプションで、ソース・データベースのスキーマとそのスキーマが所有する表に対して、指定したインスタンス化SCNを記録します。 |
|
ローカル適用の目的で代替主キーとして使用される列セットを記録し、指定オブジェクトに対する既存の代替主キー列が存在する場合は、それを削除します。 |
|
適用パラメータを指定した値に設定します。 |
SET_SCHEMA_INSTANTIATION_SCNプロシージャ |
指定したソース・データベース内の指定のスキーマに対して、およびオプションで、ソース・データベースのスキーマが所有する表に対して、指定したインスタンス化SCNを記録します。 |
SET_TABLE_INSTANTIATION_SCNプロシージャ |
指定したソース・データベース内の指定表に対する指定インスタンス化SCNを記録します。 |
SET_UPDATE_CONFLICT_HANDLERプロシージャ |
指定オブジェクトに対する更新競合ハンドラを追加、更新または削除します。 |
|
値の依存性を設定または削除します。 |
|
適用コンポーネントにメッセージの適用開始を指示します。 |
|
適用コンポーネントを停止してメッセージの適用を中断し、適用が終了していないトランザクションをロールバックします。 |
注意: 特に指定がないかぎり、すべてのプロシージャがコミットされます。ただし、GET_ERROR_MESSAGE ファンクションはコミットされません。 |
このプロシージャは、特定のデータベース・オブジェクトに対して指定された操作の文DMLハンドラを追加します。このプロシージャは、文DMLハンドラを単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントに追加します。
このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンではstatement
およびcomment
パラメータを使用しますが、もう一方のバージョンでは使用しません。statement
パラメータを使用すると、文DMLハンドラを作成して、1つ以上のプロセスに1ステップで追加できます。それ以外の場合は、DBMS_STREAMS_HANDLER_ADM
パッケージを使用して、文DMLハンドラを作成してから1つ以上のプロセスに追加します。
構文
DBMS_APPLY_ADM.ADD_STMT_HANDLER( object_name IN VARCHAR2, operation_name IN VARCHAR2, handler_name IN VARCHAR2, statement IN CLOB, apply_name IN VARCHAR2 DEFAULT NULL, comment IN VARCHAR2 DEFAULT NULL); DBMS_APPLY_ADM.ADD_STMT_HANDLER( object_name IN VARCHAR2, operation_name IN VARCHAR2, handler_name IN VARCHAR2, apply_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-2 ADD_STMT_HANDLERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
操作名。次の操作名を指定できます。
注意: 文DMLハンドラはLOB操作には指定できません。 |
|
文DMLハンドラの名前。 指定された文DMLハンドラが存在する場合は、 指定された文DMLハンドラが存在せず、 指定された文DMLハンドラが存在せず、
|
|
文DMLハンドラに追加するSQL文のテキスト。
|
|
文DMLハンドラを使用する適用コンポーネントの名前。
|
|
文DMLハンドラのコメント。
|
このプロシージャでは、適用コンポーネントを変更します。
構文
DBMS_APPLY_ADM.ALTER_APPLY( apply_name IN VARCHAR2, rule_set_name IN VARCHAR2 DEFAULT NULL, remove_rule_set IN BOOLEAN DEFAULT FALSE, message_handler IN VARCHAR2 DEFAULT NULL remove_message_handler IN BOOLEAN DEFAULT FALSE, ddl_handler IN VARCHAR2 DEFAULT NULL, remove_ddl_handler IN BOOLEAN DEFAULT FALSE, apply_user IN VARCHAR2 DEFAULT NULL, apply_tag IN RAW DEFAULT NULL, remove_apply_tag IN BOOLEAN DEFAULT FALSE, precommit_handler IN VARCHAR2 DEFAULT NULL, remove_precommit_handler IN BOOLEAN DEFAULT FALSE, negative_rule_set_name IN VARCHAR2 DEFAULT NULL, remove_negative_rule_set IN BOOLEAN DEFAULT FALSE);
パラメータ
表23-3 ALTER_APPLYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
変更する適用コンポーネントの名前。既存の適用コンポーネントの名前を指定する必要があります。所有者を指定しないでください。 |
|
適用コンポーネントのポジティブ・ルール・セットの名前。ポジティブ・ルール・セットには、適用コンポーネントにメッセージの適用を指示するルールが含まれます。 適用コンポーネントに対してポジティブ・ルール・セットを使用する場合は、既存のルール・セットを 指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、
|
|
適用コンポーネントのポジティブ・ルール・セットを削除し、ネガティブ・ルール・セットが適用コンポーネントに存在する場合は、そのネガティブ・ルール・セットによって廃棄されなかった該当キュー内のメッセージすべてが、適用コンポーネントによってデキューされます。
|
|
適用コンポーネントに対する、キュー内の非LCRメッセージを処理するユーザー定義プロシージャ。 メッセージ・ハンドラ・プロシージャの詳細は、「CREATE_APPLYプロシージャ」の「使用上の注意」を参照してください。 |
|
|
|
適用コンポーネントに対する、キュー内のDDL論理変更レコード(DDL LCR)を処理するユーザー定義プロシージャ。 適用されたDDL LCRはすべて自動的にコミットします。したがって、DDLハンドラが、DDL LCRの DDLハンドラ・プロシージャの詳細は、「CREATE_APPLYプロシージャ」の「使用上の注意」を参照してください。 |
|
|
|
適用コンポーネントが、そのユーザーのセキュリティ・ドメイン内で適用コンポーネントのルール・セットを満たすメッセージをデキューし、データベース・オブジェクトにメッセージを直接適用し、カスタム・ルールベースの変換を実行して、適用ハンドラを実行するユーザーを指定します。
適用ユーザーを変更すると、このプロシージャは、適用コンポーネントで使用されるキューのデキュー権限を新しい適用ユーザーに付与します。また、そのユーザーをキューの保護キュー・ユーザーとして構成します。 適用ユーザーには、このプロシージャによって付与される権限の他に、次の権限も付与する必要があります。
これらの権限は適用ユーザーに直接付与するか、またはロールによって付与できます。 また、適用ユーザーには、適用コンポーネントによって実行されるサブプログラムで起動されるすべてのパッケージ(オラクル社が提供するパッケージを含む)の デフォルトでは、このパラメータは、このパッケージの 注意: 適用コンポーネントの適用ユーザーが |
|
指定した適用コンポーネントによって生成されたREDOエントリに追加されるバイナリ・タグ。タグは、LCRの追跡に使用できるバイナリ値です。 タグは、適用コンポーネントを実行しているデータベースの取得プロセスが、適用コンポーネントによって加えられた変更を取得した場合にのみ関係します。この場合、取得した変更に、このパラメータで指定されたタグが含まれます。
次は、16進値
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
|
|
|
適用コンポーネントのキュー内の内部コミット・ディレクティブを適用コンポーネントによって処理される前に受け取ることができるユーザー定義のプロシージャ。通常は、適用コンポーネントによって処理されるトランザクションのコミット情報を監査するために、プリコミット・ハンドラを使用します。 内部コミット・ディレクティブは、次のようにエンキューされます。
取得された行LCRの場合、コミット・ディレクティブにソース・データベースからのトランザクションのコミットSCNが含まれます。ユーザー・メッセージの場合、コミットSCNは適用コンポーネントによって生成されます。 プリコミット・ハンドラ・プロシージャでは、次の制限に従ってください。
プリコミット・ハンドラで例外が発生した場合は、適用トランザクション全体がロールバックされ、トランザクション内のすべてのメッセージがエラー・キューに移動されます。 プリコミット・ハンドラ・プロシージャの詳細は、「CREATE_APPLYプロシージャ」の「使用上の注意」を参照してください。 |
|
|
|
適用コンポーネントのネガティブ・ルール・セットの名前。ネガティブ・ルール・セットには、適用コンポーネントにメッセージの廃棄を指示するルールが含まれます。 適用コンポーネントに対してネガティブ・ルール・セットを使用する場合は、既存のルール・セットを 指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、
適用コンポーネントに対してポジティブ・ルール・セットとネガティブ・ルール・セットの両方を指定した場合は、ネガティブ・ルール・セットが常に最初に評価されます。 |
|
適用コンポーネントのネガティブ・ルール・セットを削除し、適用コンポーネントのポジティブ・ルール・セットが存在する場合、適用コンポーネントは、ポジティブ・ルール・セットによって廃棄されないキュー内のすべてのメッセージをデキューします。
|
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
適用コンポーネントの自動再開
適用コンポーネントは、次に示すALTER_APPLY
プロシージャのパラメータ値を1つ以上変更すると、自動的に停止および再開します。
message_handler
ddl_handler
apply_user
apply_tag
precommit_handler
ALTER_APPLYプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャおよびXStreamアウトバウンド・サーバーには、次の使用上の注意が適用されます。
apply_user
パラメータで、アウトバウンド・サーバーの接続ユーザーを変更できます。
アウトバウンド・サーバーの適用ハンドラを指定することはできません。アウトバウンド・サーバーでは、message_handler
、ddl_handler
およびprecommit_handler
パラメータの設定は無視されます。
かわりに、クライアント・アプリケーションでは、必要に応じてLCRのカスタム処理を実行できます。
アウトバウンド・サーバーでは、処理対象の変更に対する適用タグは設定できません。アウトバウンド・サーバーでは、apply_tag
パラメータの設定は無視されます。
ALTER_APPLYプロシージャおよびXStreamインバウンド・サーバー
インバウンド・サーバーでは、適用ハンドラを使用してDMLとDDL LCRのみを処理できます。そのため、インバウンド・サーバーでは、message_handler
パラメータに指定されたメッセージ・ハンドラは無視されます。
このプロシージャは、適用時に、行論理変更レコード(行LCR)内に存在する1つ以上の列の元の値を、宛先サイトの対応する列の現在の値と比較するかどうかを指定します。このプロシージャで実行するのは、UPDATE
およびDELETE
関連の操作のみですが、これは、これらの操作によってのみ行LCRに元の列値が入るためです。デフォルトでは、すべての列の古い値が比較されます。
このプロシージャはオーバーロードされています。column_list
パラメータとcolumn_table
パラメータは、両方同時には指定できません。
関連項目: Oracle Streams環境における競合の検出と解消の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
構文
DBMS_APPLY_ADM.COMPARE_OLD_VALUES( object_name IN VARCHAR2, column_list IN VARCHAR2, operation IN VARCHAR2 DEFAULT 'UPDATE', compare IN BOOLEAN DEFAULT TRUE, apply_database_link IN VARCHAR2 DEFAULT NULL); DBMS_APPLY_ADM.COMPARE_OLD_VALUES( object_name IN VARCHAR2, column_table IN DBMS_UTILITY.LNAME_ARRAY, operation IN VARCHAR2 DEFAULT 'UPDATE', compare IN BOOLEAN DEFAULT TRUE, apply_database_link IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-4 COMPARE_OLD_VALUESプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
表内の列名のカンマ区切りリスト。エントリ間に空白を挿入しないでください。 すべての非キー列を指定する場合は、この値を |
|
表内の列名が含まれている |
|
操作名。次の操作名を指定できます。
|
|
|
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
競合の検出
デフォルトでは、適用コンポーネントは行LCRの元の列値を使用して競合を検出します。元の列値を比較しないようにすると、特定の表の競合を検出しないようにできます。たとえば、適用時に列セットの元の値を比較しない場合、COMPARE_OLD_VALUES
プロシージャを使用してcolumn_list
またはcolumn_table
パラメータに列セットを指定し、compare
パラメータをFALSE
に設定します。
また、compare_key_only
適用コンポーネント・パラメータをY
に設定すると、自動競合検出が無効になり、適用コンポーネントは、主キーおよび一意キーの列のみを使用して行LCRに対応する表の行を識別します。compare_key_only
適用コンポーネント・パラメータをN
に設定すると、自動競合検出が有効になり、適用コンポーネントは、行LCRのすべての元の値を使用して行LCRに対応する表の行を識別します。
注意:
|
COMPARE_OLD_VALUESプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
COMPARE_OLD_VALUESプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、適用コンポーネントを作成します。
構文
DBMS_APPLY_ADM.CREATE_APPLY( queue_name IN VARCHAR2, apply_name IN VARCHAR2, rule_set_name IN VARCHAR2 DEFAULT NULL, message_handler IN VARCHAR2 DEFAULT NULL, ddl_handler IN VARCHAR2 DEFAULT NULL, apply_user IN VARCHAR2 DEFAULT NULL, apply_database_link IN VARCHAR2 DEFAULT NULL, apply_tag IN RAW DEFAULT '00', apply_captured IN BOOLEAN DEFAULT FALSE, precommit_handler IN VARCHAR2 DEFAULT NULL, negative_rule_set_name IN VARCHAR2 DEFAULT NULL, source_database IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-5 CREATE_APPLYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
適用コンポーネントがメッセージをデキューするキュー名。既存のキューを 注意: |
|
作成する適用コンポーネントの名前。 また、既存の適用コンポーネント名やメッセージ・クライアント名と同じ名前を指定しないでください。 注意: |
|
適用コンポーネントのポジティブ・ルール・セットの名前。ポジティブ・ルール・セットには、適用コンポーネントにメッセージの適用を指示するルールが含まれます。 適用コンポーネントに対してポジティブ・ルール・セットを使用する場合は、既存のルール・セットを
指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、 |
|
適用コンポーネントに対する、キュー内の非LCRメッセージを処理するユーザー定義プロシージャ。 メッセージ・ハンドラ・プロシージャの詳細は、「使用上の注意」を参照してください。 |
|
適用コンポーネントに対する、キュー内のDDL論理変更レコード(DDL LCR)を処理するユーザー定義プロシージャ。 適用されたDDL LCRはすべて自動的にコミットします。したがって、DDLハンドラが、DDL LCRの DDLハンドラ・プロシージャの詳細は、「使用上の注意」を参照してください。 |
|
適用コンポーネント・ルール・セットを満たすDML変更とDDL変更をすべて適用し、ユーザー定義の適用ハンドラを実行するユーザー。 適用ユーザーとは、そのユーザーのセキュリティ・ドメイン内で、適用コンポーネントが、適用コンポーネントのルール・セットを満たすメッセージをデキューし、データベース・オブジェクトにメッセージを直接適用し、適用コンポーネント・ルールに対して構成されているカスタム・ルールベースの変換を実行し、適用コンポーネントに対して構成されている適用ハンドラを実行するユーザーのことです。このユーザーには、変更を適用できる権限が必要です。このプロシージャでは、適用コンポーネントで使用されるキューのデキュー権限を適用ユーザーに付与し、そのユーザーをキューの保護キュー・ユーザーとして構成します。 適用ユーザーには、このプロシージャによって付与される権限の他に、次の権限も付与する必要があります。
これらの権限は適用ユーザーに直接付与するか、またはロールによって付与できます。 また、適用ユーザーには、適用コンポーネントによって実行されるサブプログラムで起動されるすべてのパッケージ(オラクル社が提供するパッケージを含む)の
注意: 適用コンポーネントの適用ユーザーが このパラメータの詳細は、「使用上の注意」を参照してください。 |
|
適用コンポーネントがメッセージを適用するデータベース。このパラメータは、Oracleからオラクル以外のシステム(例: Sybase)に変更を適用するときに適用コンポーネントで使用されます。ローカル・データベースでメッセージを適用するように指定するには、このパラメータを 注意: |
|
指定した適用コンポーネントによって生成されたREDOエントリに追加されるバイナリ・タグ。タグは、LCRの追跡に使用できるバイナリ値です。 タグは、適用コンポーネントを実行しているデータベースの取得プロセスが、適用コンポーネントによって加えられた変更を取得した場合にのみ関係します。この場合、取得した変更に、このパラメータで指定されたタグが含まれます。 デフォルトでは、適用コンポーネントに対するタグは、 次は、16進値 HEXTORAW('17')
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
|
永続キュー内に存在する、取得されたLCRとメッセージの両方を適用するには、2つ以上の適用コンポーネントを作成する必要があります。 注意: 関連項目: メッセージを適用コンポーネントで処理する方法の詳細は、『Oracle Streams概要および管理』を参照してください。 |
|
適用コンポーネントのキュー内の内部コミット・ディレクティブを適用コンポーネントによって処理される前に受け取ることができるユーザー定義のプロシージャ。通常は、適用コンポーネントによって処理されるトランザクションのコミット情報を監査するために、プリコミット・ハンドラを使用します。 内部コミット・ディレクティブは、次のようにエンキューされます。
取得プロセスまたは同期取得によって取得された行LCRの場合、コミット・ディレクティブにソース・データベースからのトランザクションのコミットSCNが含まれます。ユーザーまたはアプリケーションによってエンキューされたメッセージの場合、コミットSCNは適用コンポーネントによって生成されます。 プリコミット・ハンドラ・プロシージャでは、次の制限に従ってください。
プリコミット・ハンドラで例外が発生した場合は、適用トランザクション全体がロールバックされ、トランザクション内のすべてのメッセージがエラー・キューに移動されます。 プリコミット・ハンドラ・プロシージャの詳細は、「使用上の注意」を参照してください。 |
|
適用コンポーネントのネガティブ・ルール・セットの名前。ネガティブ・ルール・セットには、適用コンポーネントにメッセージの廃棄を指示するルールが含まれます。 適用コンポーネントに対してネガティブ・ルール・セットを使用する場合は、既存のルール・セットを
指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、 適用コンポーネントに対してポジティブ・ルール・セットとネガティブ・ルール・セットの両方を指定した場合は、ネガティブ・ルール・セットが常に最初に評価されます。 |
|
適用コンポーネントによって適用される変更のソース・データベースのグローバル名。ソース・データベースは、変更が発生したデータベースです。取得メッセージを適用する場合、適用コンポーネントによって適用できるのは、1つのソース・データベースでの1つの取得プロセスによるメッセージのみです。
ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名が 適用コンポーネント・ルール・セットのルールによって、適用コンポーネントがデキューするメッセージが決まります。適用コンポーネントのソース・データベースとは異なるソース・データベースで、適用コンポーネントによるLCRのデキューを行うと、エラーが発生します。適用コンポーネントのソース・データベースを特定する場合は、 |
使用上の注意
次の各項では、このプロシージャの使用上の注意について説明します。
DBAロール要件
このプロシージャを起動するユーザーがapply_user
パラメータに指定されたユーザーと異なる場合、起動するユーザーにDBA
ロールが付与されている必要があります。このプロシージャを起動するユーザーがapply_user
パラメータに指定されたユーザーと同じである場合、起動するユーザーにDBA
ロールは必要ありません。apply_user
をSYS
に設定できるのは、SYS
ユーザーに限られています。
ハンドラ・プロシージャの名前
message_handler
、ddl_handler
およびprecommit_handler
パラメータの場合は、既存のプロシージャを次のいずれかの形式で指定します。
[schema_name.]procedure_name
[schema_name.]package_name.procedure_name
プロシージャがパッケージ内にある場合は、package_nameを指定する必要があります。たとえば、hr
スキーマ内のapply_pkg
パッケージにあるprocess_ddls
という名前のプロシージャを指定するには、hr.apply_pkg.process_ddls
と入力します。指定したプロシージャが存在しない場合はエラーが戻されます。
CREATE_APPLY
プロシージャを起動するユーザーには、指定したハンドラ・プロシージャのEXECUTE
権限が必要です。また、schema_name
を指定しない場合は、CREATE_APPLY
プロシージャの起動ユーザー名がデフォルトで使用されます。
メッセージ・ハンドラおよびDDLハンドラのプロシージャ
message_handler
パラメータおよびddl_handler
パラメータの両方に指定されたプロシージャには、次の署名が必要です。
PROCEDURE handler_procedure ( parameter_name IN ANYDATA);
handler_procedure
はプロシージャ名、parameter_name
はプロシージャに渡されるパラメータ名を表します。メッセージ・ハンドラの場合、プロシージャに渡されるパラメータは、ユーザー・メッセージをANYDATA
にカプセル化したものです。DDLハンドラの場合は、DDL LCRをANYDATA
にカプセル化したものです。
プリコミット・ハンドラ・プロシージャ
precommit_handler
パラメータに指定するプロシージャには、次の署名が必要です。
PROCEDURE handler_procedure ( parameter_name IN NUMBER);
handler_procedure
はプロシージャ名、parameter_name
はプロシージャに渡されるパラメータ名を表します。プロシージャに渡すパラメータは、コミット・ディレクティブのコミットSCNです。
CREATE_APPLYプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、XStreamアウトバウンド・サーバーを作成できません。XStreamアウトバウンド・サーバーを作成するには、DBMS_XSTREAM_ADM
パッケージを使用します。
CREATE_APPLYプロシージャおよびXStreamインバウンド・サーバー
このプロシージャおよびXStreamインバウンド・サーバーには、次の使用上の注意が適用されます。
CREATE_APPLY
プロシージャは、常に適用プロセスを作成します。適用プロセスは、XStreamクライアント・アプリケーション以外のソース(取得プロセスなど)からメッセージを受信する場合は、適用プロセスのままです。適用プロセスは、他のソースからメッセージを受信する前にXStreamクライアント・アプリケーションに連結されると、インバウンド・サーバーになることができます。初期接続の後では、適用プロセスがインバウンド・サーバーに変更されることはなく、インバウンド・サーバーが適用プロセスに変更されることもありません。
CREATE_APPLY
プロシージャを使用してインバウンド・サーバーを作成する場合、apply_captured
パラメータをTRUE
に設定します。インバウンド・サーバーでは、取得プロセスによって取得されたLCRのみが処理されます。
インバウンド・サーバーでは、適用ハンドラを使用できます。インバウンド・サーバーでは、DMLとDDL LCRのみが処理されます。そのため、インバウンド・サーバーでは、message_handler
パラメータに指定されたメッセージ・ハンドラは無視されます。
このプロシージャでは、オブジェクトの依存性を作成します。オブジェクトの依存性とは、接続先データベースにある2つのオブジェクト間の親子関係を規定する仮想的な依存性の定義です。
適用コンポーネントでは、親オブジェクトが含まれている、コミット・システム変更番号(コミットSCN)が小さいすべてのトランザクションがコミットされた後に、子オブジェクトが含まれているトランザクションが実行されるようにスケジュールされます。適用コンポーネントでは、依存性の検出に、論理変更レコード(LCR)内のオブジェクトのオブジェクト識別子が使用されます。依存性の検出に、LCRの列値は使用されません。
注意: このプロシージャのいずれかのパラメータに対してNULL を指定すると、エラーが発生します。 |
構文
DBMS_APPLY_ADM.CREATE_OBJECT_DEPENDENCY( object_name IN VARCHAR2, parent_object_name IN VARCHAR2);
パラメータ
表23-6 CREATE_OBJECT_DEPENDENCYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
このプロシージャでは、指定した適用コンポーネントに対するすべてのエラー・トランザクションを削除します。
DELETE_ALL_ERRORSプロシージャおよびXStreamアウトバウンド・サーバー
アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
DELETE_ALL_ERRORSプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、指定したエラー・トランザクションを削除します。
DELETE_ERRORプロシージャおよびXStreamアウトバウンド・サーバー
アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
DELETE_ERRORプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、適用コンポーネントを削除します。
構文
DBMS_APPLY_ADM.DROP_APPLY( apply_name IN VARCHAR2, drop_unused_rule_sets IN BOOLEAN DEFAULT FALSE);
パラメータ
表23-9 DROP_APPLYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
削除する適用コンポーネントの名前。既存の適用コンポーネント名を指定する必要があります。所有者を指定しないでください。 |
|
|
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
DROP_APPLYプロシージャおよびルール
このプロシージャを使用して適用コンポーネントを削除すると、その適用コンポーネントに対してDBMS_STREAMS_ADM
パッケージを使用して作成したルールに関する情報は、ルールのデータ・ディクショナリ・ビューから削除されます。このルールに関する情報は、このルールが適用コンポーネントのポジティブ・ルール・セットとネガティブ・ルール・セットのいずれにも含まれていない場合でも削除されます。ルールのデータ・ディクショナリ・ビューは次のとおりです。
ALL_STREAMS_GLOBAL_RULES
DBA_STREAMS_GLOBAL_RULES
ALL_STREAMS_MESSAGE_RULES
DBA_STREAMS_MESSAGE_RULES
ALL_STREAMS_SCHEMA_RULES
DBA_STREAMS_SCHEMA_RULES
ALL_STREAMS_TABLE_RULES
DBA_STREAMS_TABLE_RULES
関連項目: Oracle Streamsデータ・ディクショナリ・ビューの詳細は、『Oracle Streams概要および管理』を参照してください。 |
DROP_APPLYプロシージャおよびXStreamアウトバウンド・サーバー
DROP_APPLY
プロシージャをアウトバウンド・サーバーで実行すると、それによってDBMS_XSTREAM_ADM
パッケージのDROP_OUTBOUND
プロシージャが実行されます。そのため、アウトバウンド・サーバーの取得プロセスおよびキューも削除される可能性があります。
DROP_APPLYプロシージャおよびXStreamインバウンド・サーバー
DROP_APPLY
プロシージャをインバウンド・サーバーで実行すると、それによってDBMS_XSTREAM_ADM
パッケージのDROP_INBOUND
プロシージャが実行されます。そのため、インバウンド・サーバーのキューも削除される可能性があります。
このプロシージャでは、オブジェクトの依存性を削除します。オブジェクトの依存性とは、接続先データベースにある2つのオブジェクト間の親子関係を規定する仮想的な依存性の定義です。
注意:
|
パラメータ
表23-10 DROP_OBJECT_DEPENDENCYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
このプロシージャでは、指定した適用コンポーネントのエラー・キュー内のエラー・トランザクションを再実行します。
トランザクションは、コミットSCN順に再実行されます。エラーが発生すると、エラーの再実行を停止します。
関連項目: エラー・キューの詳細は、『Oracle Streams概要および管理』を参照してください。 |
構文
DBMS_APPLY_ADM.EXECUTE_ALL_ERRORS( apply_name IN VARCHAR2 DEFAULT NULL, execute_as_user IN BOOLEAN DEFAULT FALSE);
パラメータ
表23-11 EXECUTE_ALL_ERRORSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
トランザクション処理時にエラーが発生した適用コンポーネントの名前。所有者を指定しないでください。
|
|
トランザクションを実行するユーザーには、適用オブジェクトに対してDML変更とDDL変更を実行する権限、および適用ハンドラを実行する権限が必要です。また、適用コンポーネントで使用されるキューに対するデキュー権限も必要です。 |
このプロシージャでは、エラー・キュー内の指定したエラー・トランザクションを再実行します。
関連項目: エラー・キューの詳細は、『Oracle Streams概要および管理』を参照してください。 |
構文
DBMS_APPLY_ADM.EXECUTE_ERROR( local_transaction_id IN VARCHAR2, execute_as_user IN BOOLEAN DEFAULT FALSE, user_procedure IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-12 EXECUTE_ERRORプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するエラー・トランザクションの識別番号。指定したトランザクションがエラー・キューに存在しない場合は、エラーが発生します。 |
|
トランザクションを実行するユーザーには、適用オブジェクトに対してDML変更とDDL変更を実行する権限、および適用ハンドラを実行する権限が必要です。また、適用コンポーネントで使用されるキューに対するデキュー権限も必要です。 |
|
エラー・トランザクションを正しく実行できるように変更するユーザー定義プロシージャ。
関連項目: ユーザー・プロシージャの詳細は、「使用上の注意」を参照してください。 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
ユーザー・プロシージャ
user_procedure
パラメータには、完全なプロシージャ名を次のいずれかの形式で指定する必要があります。
[
schema_name
.]
package_name.procedure_name
[
schema_name
.]
procedure_name
プロシージャがパッケージ内にある場合は、package_name
を指定する必要があります。EXECUTE_ERROR
プロシージャを起動するユーザーには、指定したプロシージャのEXECUTE
権限が必要です。またschema_name
を指定しない場合は、EXECUTE_ERROR
プロシージャを起動するユーザーの名前がデフォルトで使用されます。
たとえば、procedure_name
のプロパティが次のとおりであるとします。
strmadmin
は、schema_name
です。
fix_errors
は、package_name
です。
fix_hr_errors
は、procedure_name
です。
この場合、次のように指定します。
strmadmin.fix_errors.fix_hr_errors
エラー処理用に作成するプロシージャには、次の署名が必要です。
PROCEDURE user_procedure (
in_anydata IN ANYDATA,
error_record IN DBA_APPLY_ERROR%ROWTYPE,
error_message_number IN NUMBER,
messaging_default_processing IN OUT BOOLEAN,
out_anydata OUT ANYDATA);
ユーザー・プロシージャには、次のパラメータがあります。
in_anydata
: 適用コンポーネントによってプロシージャに渡されるメッセージをANYDATA
にカプセル化したもの。1つのトランザクションに複数のメッセージを含めることができます。行論理変更レコード(行LCR)、DDL論理変更レコード(DDL LCR)またはユーザー・メッセージをメッセージにできます。
error_record
: トランザクションを識別するDBA_APPLY_ERROR
データ・ディクショナリ・ビューの行。
error_message_number
: in_anydata
パラメータのANYDATA
オブジェクトのメッセージ番号。1から始まります。
messaging_default_processing
: TRUE
に設定すると、適用コンポーネントはin_anydata
パラメータのメッセージの処理(DML文またはDDL文の実行、適用ハンドラの起動など)を続行します。
FALSE
に設定すると、適用コンポーネントはin_anydata
パラメータのメッセージの処理をスキップし、in_anydata
パラメータの次のメッセージに移ります。
out_anydata
: messaging_default_processing
がTRUE
の場合にユーザー・プロシージャで処理され、適用コンポーネントで使用されるANYDATA
オブジェクト。
LCRをユーザー・プロシージャ内のEXECUTE
LCRメンバー・プロシージャを使用して実行すると、このLCRは直接実行されるため、messaging_default_processing
パラメータをFALSE
に設定する必要があります。この場合、LCRは適用ハンドラに渡されません。
ユーザー・プロシージャでエラー・トランザクションを処理すると、次のいずれかの結果になります。
ユーザー・プロシージャによって、正しく実行できるようにトランザクションが変更される。
必要な変更をユーザー・プロシージャで実行できなかったため、トランザクションを実行しようとするとエラーが発生する。この場合、トランザクションは、ロールバックされ、エラー・キューに残ったままになります。
ユーザー・プロシージャには、次の制限事項が適用されます。
COMMIT
文またはROLLBACK
文を実行しないでください。これらの文を実行すると、トランザクションの一貫性が失われる危険性があります。
LCR内のLONG
列、LONG
RAW
列またはLOB列のデータを変更しないでください。
in_anydata
パラメータ内のANYDATA
オブジェクトが行LCRで、messaging_default_processing
パラメータがTRUE
に設定されている場合、out_anydata
パラメータは行LCRである必要があります。
in_anydata
パラメータ内のANYDATA
オブジェクトがDDL LCRで、messaging_default_processing
パラメータがTRUE
に設定されている場合、out_anydata
パラメータはDDL LCRである必要があります。
ユーザー・プロシージャを実行するユーザーには、DBA_APPLY_ERROR
データ・ディクショナリ・ビューに対するSELECT
またはREAD
権限が必要です。
注意: COMMIT 、ROLLBACK などのトランザクション・ディレクティブが含まれているLCRは、ユーザー・プロシージャに渡されません。 |
EXECUTE_ERRORプロシージャおよびXStreamアウトバウンド・サーバー
アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーでは使用できません。
EXECUTE_ERRORプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このファンクションでは、指定したメッセージ番号とトランザクション識別子に対するメッセージ・ペイロードをエラー・キューから返します。メッセージは、LCR(論理変更レコード)メッセージまたは非LCRメッセージになります。
このファンクションはオーバーロードされています。このファンクションには、2つのOUT
パラメータを持つバージョンがあります。その場合、2つのOUT
パラメータには、メッセージをエンキューする宛先キューが存在していればそのキューを指定し、メッセージを実行するかどうかを指定します。宛先キューを指定する場合はSET_ENQUEUE_DESTINATION
プロシージャ、実行ディレクティブを指定する場合はSET_EXECUTE
プロシージャを使用します。
構文
DBMS_APPLY_ADM.GET_ERROR_MESSAGE( message_number IN NUMBER, local_transaction_id IN VARCHAR2, destination_queue_name OUT VARCHAR2, execute OUT BOOLEAN) RETURN ANYDATA; DBMS_APPLY_ADM.GET_ERROR_MESSAGE( message_number IN NUMBER, local_transaction_id IN VARCHAR2) RETURN ANYDATA;
パラメータ
表23-13 GET_ERROR_MESSAGEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
メッセージの識別番号。この番号によって、トランザクション内のメッセージの位置が識別されます。 |
|
メッセージを返すエラー・トランザクションの識別子。 |
|
メッセージをエンキューするキュー名を指定します。メッセージをキューにエンキューしない場合は、 |
|
メッセージを実行する場合は、 メッセージを実行しない場合は、 |
このプロシージャは、特定のデータベース・オブジェクトに対して指定された操作の文DMLハンドラを単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントから削除します。
構文
DBMS_APPLY_ADM.REMOVE_STMT_HANDLER( object_name IN VARCHAR2, operation_name IN VARCHAR2, handler_name IN VARCHAR2, apply_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-14 REMOVE_STMT_HANDLERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
操作名。次の操作名を指定できます。
|
|
文DMLハンドラの名前。
|
|
文DMLハンドラを使用する適用コンポーネントの名前。
|
このプロシージャは、特定のデータベース・オブジェクトに対して指定された操作の変更を追跡する変更ハンドラを、単一の適用コンポーネントで設定または設定解除します。
変更ハンドラは、表の変更を追跡する特別なタイプの文DMLハンドラであり、DBMS_STREAMS_ADM.MAINTAIN_CHANGE_TABLE
プロシージャまたはこのSET_CHANGE_HANDLER
プロシージャのいずれかによって作成されました。変更ハンドラに関する情報は、ALL_APPLY_CHANGE_HANDLERS
およびDBA_APPLY_CHANGE_HANDLERS
ビューに格納されています。
このプロシージャは、プロシージャのパラメータで指定された値に基づいて変更ハンドラに追加される文を自動的に生成します。このプロシージャは、データベースの変更を追跡する構成が存在する場合のみ実行してください。
構文
DBMS_APPLY_ADM.SET_CHANGE_HANDLER( change_table_name IN VARCHAR2, source_table_name IN VARCHAR2, capture_values IN VARCHAR2, apply_name IN VARCHAR2, operation_name IN VARCHAR2, change_handler_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-15 SET_CHANGE_HANDLERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ソース・テーブルの変更を記録する表。 表は、
|
|
変更が記録されるソース・データベースの表。 表は、
|
|
ソース・テーブルで更新操作が実行されるときにチェンジ・テーブルに記録する値を指定します。
注意: 挿入操作では、新しい列値のみが取得されます。削除操作では、古い列値のみが取得されます。 |
|
チェンジ・テーブルに変更を適用する適用コンポーネントの名前。所有者を指定しないでください。
|
|
操作名。次の操作名を指定できます。
注意: 変更ハンドラはLOB操作には指定できません。 |
|
変更ハンドラの名前。 指定された変更ハンドラが存在する場合は、文が既存のハンドラに追加されます。既存の変更ハンドラが、
関連項目: このパラメータの詳細は、「使用上の注意」を参照してください。 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
既存の変更ハンドラのチェック
特定のソース・テーブルに対する特定の操作の既存の変更ハンドラをチェックするには、次の問合せを実行します。
SELECT HANDLER_NAME, APPLY_NAME FROM DBA_APPLY_CHANGE_HANDLERS WHERE operation_name = 'operation' AND source_table_owner = 'source_table_owner' AND source_table_name = 'source_table_name' AND change_table_owner = 'change_table_owner' AND change_table_name = 'change_table_name';
各項目の意味は、次のとおりです。
operationは新しいハンドラに対して指定される操作で、INSERT
、UPDATE
またはDELETE
のいずれかになります。
source_table_ownerは、ソース・テーブルの所有者です。
source_table_nameは、ソース・テーブルの名前です。
change_table_ownerは、チェンジ・テーブルの所有者です。
change_table_ownerは、チェンジ・テーブルの所有者です。
SET_CHANGE_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー
アウトバウンド・サーバーでは、すべての適用ハンドラが無視されます。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
SET_CHANGE_HANDLERプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャは、ユーザー・プロシージャを、特定のデータベース・オブジェクトに対して指定された操作のプロシージャDMLハンドラとして、単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントで設定または設定解除します。このユーザー・プロシージャは、特定のオブジェクトに対して指定された操作の適用動作を変更します。
構文
DBMS_APPLY_ADM.SET_DML_HANDLER( object_name IN VARCHAR2, object_type IN VARCHAR2, operation_name IN VARCHAR2, error_handler IN BOOLEAN DEFAULT FALSE, user_procedure IN VARCHAR2, apply_database_link IN VARCHAR2 DEFAULT NULL, apply_name IN VARCHAR2 DEFAULT NULL, assemble_lobs IN BOOLEAN DEFAULT TRUE);
パラメータ
表23-16 SET_DML_HANDLERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
ソース・オブジェクトのタイプ。現在、指定できるソース・オブジェクトのタイプは |
|
操作名。次の操作名を指定できます。
たとえば、 このプロシージャをデータベース・オブジェクトのデフォルトのプロシージャDMLハンドラとして設定するには、 |
|
|
|
指定オブジェクトでの指定操作に対する適用時に起動されるユーザー定義プロシージャ。プロシージャがプロシージャDMLハンドラの場合は、Oracleで実行されるデフォルト適用のかわりに起動されます。プロシージャがエラー・ハンドラの場合は、適用エラーが発生したときに起動されます。 指定オブジェクトでの指定操作で起動されるプロシージャDMLハンドラを設定解除する場合は、 |
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 |
|
プロシージャDMLハンドラまたはエラー・ハンドラを使用する適用コンポーネントの名前。
|
|
|
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
接続先データベースでのSET_DML_HANDLERプロシージャの実行
このプロシージャは、接続先データベースで実行します。SET_DML_HANDLER
プロシージャは、カスタマイズされた適用を使用して、DML変更(行LCR)が含まれる論理変更レコードを適用する方法をユーザーに提供します。
プロシージャDMLハンドラおよびエラー・ハンドラ
error_handler
パラメータをTRUE
に設定すると、ユーザー・プロシージャがエラー・ハンドラとして指定されます。エラー・ハンドラは、行LCRで適用エラーが発生したときに起動されます。このようなエラーは、競合ハンドラが指定されていないか、または更新競合ハンドラで競合を解消できない場合に、データ競合が原因で発生する可能性があります。error_handler
パラメータをFALSE
に設定すると、ユーザー・プロシージャはエラー・ハンドラではなくプロシージャDMLハンドラとして指定され、指定オブジェクトで指定操作を実行するかわりに、プロシージャDMLハンドラが常に実行されます。
このプロシージャは、オブジェクトでの特定操作に対して、プロシージャDMLハンドラまたはエラー・ハンドラのいずれかを設定します。同じオブジェクトと操作に対して、プロシージャDMLハンドラとエラー・ハンドラの両方は設定できません。
注意: 現在、Oracle以外のデータベースに変更を適用している適用コンポーネントに対するエラー・ハンドラの設定はサポートされていません。 |
apply_nameパラメータ
apply_name
パラメータがNULL
以外の場合は、指定した適用コンポーネントにプロシージャDMLハンドラまたはエラー・ハンドラが設定されます。この場合、設定されたハンドラは、ローカルの接続先データベースで他の適用コンポーネントに対して起動されません。apply_name
パラメータがNULL
(デフォルト)の場合は、接続先データベースのすべての適用コンポーネントに対する汎用ハンドラとして、ハンドラが設定されます。特定の適用コンポーネントに対して設定されたハンドラは、すべての汎用ハンドラに優先します。たとえば、次の状況を想定します。
表hr.employees
に対するUPDATE
操作のapply_hr
という適用コンポーネントに対して、handler_hr
というプロシージャDMLハンドラが指定されている。
表hr.employees
に対するUPDATE
操作には、handler_gen
という汎用プロシージャDMLハンドラも存在する。
この場合、apply_hr
適用コンポーネントは、hr.employees
表のUPDATE
操作にhandler_hr
プロシージャDMLハンドラを使用します。
ソース・データベースでは、DMLハンドラまたはエラー・ハンドラで必要な列に対して、絶対的なサプリメンタル・ログ・グループを指定する必要があります。
DMLハンドラ・プロシージャまたはエラー・ハンドラ・プロシージャの署名
SET_DML_HANDLER
プロシージャを使用すると、指定オブジェクトで指定操作を実行する行LCRに対して、プロシージャDMLハンドラまたはエラー・ハンドラのいずれかを設定できます。次の項では、DMLハンドラ・プロシージャの署名およびエラー・ハンドラ・プロシージャの署名について説明します。
どちらの場合も、次のいずれかの形式でuser_procedure
パラメータに完全なプロシージャ名を指定する必要があります。
[
schema_name
.]
package_name.procedure_name
[
schema_name
.]
procedure_name
プロシージャがパッケージ内にある場合は、package_name
を指定する必要があります。SET_DML_HANDLER
プロシージャを起動するユーザーには、指定したプロシージャのEXECUTE
権限が必要です。また、schema_name
を指定しない場合は、SET_DML_HANDLER
プロシージャの起動ユーザー名がデフォルトで使用されます。
たとえば、procedure_name
のプロパティが次のとおりであるとします。
hr
は、schema_name
です。
apply_pkg
は、package_name
です。
employees_default
は、procedure_name
です。
この場合、次のように指定します。
hr.apply_pkg.employees_default
ユーザー・プロシージャには、次の制限事項が適用されます。
COMMIT
文またはROLLBACK
文を実行しないでください。これらの文を実行すると、LCRが含まれるトランザクションの一貫性が失われる危険性があります。
行LCRに対してEXECUTE
メンバー・プロシージャを使用して行を操作している場合は、1つの行操作で複数行を操作しないでください。複数行を操作するDML文は、手動で構成および実行する必要があります。
コマンド・タイプがUPDATE
またはDELETE
の場合、LCRに対してEXECUTE
メンバー・プロシージャを使用して再実行される行操作では、以前の値リストにキー全体が含まれている必要があります。SET_KEY_COLUMNS
プロシージャで代替キーが指定されていないかぎり、キーは主キーであるか、少なくとも1つのNOT
NULL
列を持つ一意の最小の索引になります。キーを指定しない場合は、LOB
列、LONG
列およびLONG
RAW
列以外のすべての列によってキーが構成されます。
コマンド・タイプがINSERT
の場合、LCRに対してEXECUTE
メンバー・プロシージャを使用して再実行される行操作では、新規の値リストにキー全体が含まれている必要があります。キー全体が組み込まれていない場合は、行が重複する可能性があります。SET_KEY_COLUMNS
プロシージャで代替キーが指定されていないかぎり、キーは主キーであるか、少なくとも1つのNOT
NULL
列を持つ一意の最小の索引になります。指定されたキーがない場合、キーは、LOB、LONG
、LONG
RAW
、ユーザー定義タイプ(オブジェクト・タイプ、REF
、VARRAY、ネストした表)およびオラクル社提供のタイプ(任意の
タイプ、XMLタイプ、空間タイプ、メディア・タイプ)などのデータ・タイプの列を除くすべての表の列で構成されます。
関連項目: プロシージャDMLハンドラおよびデータ・タイプ(LOB、LONG、LONGRAW )の詳細と制限は、 『Oracle Streamsレプリケーション管理者ガイド』 を参照してください。 |
user_procedure
パラメータに指定されるプロシージャには、次の署名が必要です。
PROCEDURE user_procedure ( parameter_name IN ANYDATA);
user_procedure
はプロシージャ名、parameter_name
はプロシージャに渡されるパラメータ名を表します。プロシージャに渡されるパラメータは、行LCRをANYDATA
にカプセル化したものです。
エラー処理用に作成するプロシージャには、次の署名が必要です。
PROCEDURE user_procedure (
message IN ANYDATA,
error_stack_depth IN NUMBER,
error_numbers IN DBMS_UTILITY.NUMBER_ARRAY,
error_messages IN emsg_array);
エラー・ハンドラ内でDML操作を再試行する場合は、エラー・ハンドラ・プロシージャで、LCRに対してEXECUTE
メンバー・プロシージャを実行してください。最後に発生したエラーがエラー・スタックの一番上にあります。エラー・スタックの一番上のエラー・メッセージを指定するには、error_numbers(1)
およびerror_messages(1)
を使用します。
注意:
|
エラー・ハンドラを実行すると、次のいずれかの結果になります。
エラー・ハンドラがエラーを正常に解決し、適用コンポーネントに制御を戻します。
エラー・ハンドラがエラーを解決できず、エラーが発生します。エラーが発生すると、トランザクションはロールバックされ、エラー・キューに入れられます。
LOBアセンブリ
プロシージャDMLハンドラ、エラー・ハンドラおよびカスタム・ルールベースの変換ファンクションで、LCR内のLONG
列、LONG
RAW
列およびアセンブルされていないLOB列のデータを変更しないでください。LOBアセンブリによって作成された行LCR内のLOB列は、プロシージャDMLハンドラおよびエラー・ハンドラで変更できます。
SET_DML_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー
アウトバウンド・サーバーでは、すべての適用ハンドラが無視されます。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
SET_DML_HANDLERプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、指定したルールを満たすメッセージが適用コンポーネントによって自動的にエンキューされるキューを設定します。
このプロシージャによって、指定したルールのアクション・コンテキストを変更し、キューを指定します。ルールのアクション・コンテキストは、ルールがメッセージに対してTRUE
に評価された後、ルール・エンジンのクライアントが解析するルールに関連付けられているオプションの情報です。この場合、ルール・エンジンのクライアントは適用コンポーネントです。アクション・コンテキスト内の情報はSYS.RE$NV_LIST
タイプのオブジェクトであり、名前/値ペアで構成されています。
このプロシージャで指定するキューの宛先は、アクション・コンテキスト内の次の名前/値ペアで常に構成されます。
名前は、APPLY$_ENQUEUE
です。
値は、VARCHAR2
として指定されたキュー名を格納するANYDATA
インスタンスです。
構文
DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION( rule_name IN VARCHAR2, destination_queue_name IN VARCHAR2);
パラメータ
表23-17 SET_ENQUEUE_DESTINATIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
適用コンポーネントがメッセージをエンキューするキューの名前。キューを たとえば、
|
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
SET_ENQUEUE_DESTINATIONプロシージャおよび適用ハンドラ
プロシージャDMLハンドラ、DDLハンドラ、メッセージ・ハンドラなどの適用ハンドラは、宛先キューにもエンキューされるメッセージを処理する場合、そのメッセージがエンキューされる前に処理します。
SET_ENQUEUE_DESTINATIONプロシージャに関する注意事項
このプロシージャを使用する場合は、次の点に注意してください。
このプロシージャでは、指定したキューが存在するかどうかを確認しません。キューが存在しない場合、適用コンポーネントがメッセージをエンキューしようとするとエラーが発生します。
Oracle Streamsの取得プロセス、伝播、メッセージ・クライアントは、このプロシージャによって作成されるアクション・コンテキストを無視します。
指定したルールを使用する適用コンポーネントの適用ユーザーには、指定したキューにメッセージをエンキューできる権限が必要です。キューが保護キューの場合、適用ユーザーはキューの保護キュー・ユーザーである必要があります。
指定したルールは、適用コンポーネントのポジティブ・ルール・セットである必要があります。ルールが適用コンポーネントのネガティブ・ルール・セットに含まれる場合、適用コンポーネントはメッセージを宛先キューにエンキューしません。
メッセージのコミットSCNがメッセージの関連インスタンス化SCN以下の場合、そのメッセージは、適用コンポーネント・ルール・セットを満たしている場合でも、宛先キューにエンキューされません。
SET_ENQUEUE_DESTINATIONプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
SET_ENQUEUE_DESTINATIONプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、指定したルールを満たすメッセージを適用コンポーネントによって実行するかどうかを指定します。
このプロシージャによって、指定したルールのアクション・コンテキストを変更し、メッセージの実行を指定します。ルールのアクション・コンテキストは、ルールがメッセージに対してTRUE
に評価された後、ルール・エンジンのクライアントが解析するルールに関連付けられているオプションの情報です。この場合、ルール・エンジンのクライアントは適用コンポーネントです。アクション・コンテキスト内の情報はSYS.RE$NV_LIST
タイプのオブジェクトであり、名前/値ペアで構成されています。
このプロシージャで指定するメッセージ実行ディレクティブは、アクション・コンテキスト内の次の名前/値ペアで常に構成されます。
名前は、APPLY$_EXECUTE
です。
値は、VARCHAR2
としてNO
を格納するANYDATA
インスタンスです。値がNO
の場合、適用コンポーネントはメッセージを実行せず、メッセージを適用ハンドラに送りません。
パラメータ
表23-18 SET_EXECUTEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
SET_EXECUTEプロシージャに関する注意事項
このプロシージャを使用する場合は、次の点に注意してください。
メッセージが論理変更レコード(LCR)のときにそのメッセージが実行されない場合、関連するローカル・データベース・オブジェクトに対して、LCRにカプセル化された変更は実行されません。また、メッセージが実行されない場合、そのメッセージは適用ハンドラに送られません。
Oracle Streamsの取得プロセス、伝播、メッセージ・クライアントは、このプロシージャによって作成されるアクション・コンテキストを無視します。
指定したルールは、適用コンポーネントのポジティブ・ルール・セット内に存在して実行ディレクティブに従う必要があります。ルールが適用コンポーネントのネガティブ・ルール・セットに含まれる場合、適用コンポーネントはルールの実行ディレクティブを無視します。
SET_EXECUTEプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
SET_EXECUTEプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、指定したソース・データベースに対して、およびオプションで、ソース・データベースのスキーマとそのスキーマが所有する表に対して、指定したインスタンス化SCNを記録します。このプロシージャは、データベースの既存のインスタンス化SCNを上書きしますが、スキーマまたは表のインスタンス化SCNを設定する場合は、スキーマまたは表の既存のインスタンス化SCNを上書きします。
このプロシージャを使用すると、ソース・データベースのDDL論理変更レコード(DDL LCR)の中で、適用コンポーネントで無視するものと適用するものを正確に制御できます。
構文
DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN( source_database_name IN VARCHAR2, instantiation_scn IN NUMBER, apply_database_link IN VARCHAR2 DEFAULT NULL, recursive IN BOOLEAN DEFAULT FALSE, source_root_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-19 SET_GLOBAL_INSTANTIATION_SCNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ソース・データベースのグローバル名。たとえば、 ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名が |
|
インスタンス化SCN。 |
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、ローカル適用コンポーネントの接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 |
|
注意: |
|
ソース・ルート・データベースのグローバル名。 CDB以外の場合、このパラメータは CDBで特定のコンテナをインスタンス化する場合は、 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
インスタンス化SCNおよびDDL LCR
ソース・データベースからのデータベース・オブジェクトに対するDDL LCRのコミットSCNが、接続先データベースでそのソース・データベースに対するインスタンス化SCN以下の場合は、接続先データベースでの適用コンポーネントで、そのDDL LCRは無視されます。それ以外の場合は、DDL LCRが適用されます。
このプロシージャで指定するグローバル・インスタンス化SCNがDDL LCRに対して使用されるのは、object_owner
、base_table_owner
およびbase_table_name
がDDL LCRに指定されていない場合のみです。たとえば、このプロシージャによって設定されるグローバル・インスタンス化SCNは、command_type
がCREATE
USER
のDDL LCRに使用されます。
recursiveパラメータ
recursive
パラメータをTRUE
に設定すると、このプロシージャは、ソース・データベースの各スキーマおよびそのスキーマが所有している表にインスタンス化SCNを設定します。このプロシージャでは、スキーマにインスタンス化SCNを設定する場合はSET_SCHEMA_INSTANTIATION_SCN
プロシージャ、表にインスタンス化SCNを設定する場合はSET_TABLE_INSTANTIATION_SCN
プロシージャを使用します。スキーマのDDL LCRにはスキーマのインスタンス化SCNが使用され、表のDDL LCRと行LCRには表のインスタンス化SCNが使用されます。
recursive
パラメータをFALSE
に設定すると、スキーマや表にはインスタンス化SCNが設定されません。
SET_GLOBAL_INSTANTIATION_SCNプロシージャに関する注意事項
このプロシージャを使用する場合は、次の点に注意してください。
このプロシージャによって指定されるインスタンス化SCNは、取得プロセスによって取得されたLCRに対してのみ使用されます。ユーザーが作成したLCRには使用されません。
インスタンス化SCNは、SYS
スキーマやSYSTEM
スキーマには設定できません。
SET_GLOBAL_INSTANTIATION_SCNプロシージャおよびXStreamアウトバウンド・サーバー
インスタンス化SCNは、アウトバウンド・サーバーによって処理されるデータベース・オブジェクトには不要です。インスタンス化SCNをデータベース・オブジェクトに対して設定すると、アウトバウンド・サーバーでは、インスタンス化SCN値より大きいSCN値を持つデータベース・オブジェクトのLCRのみが送信されます。データベース・オブジェクトにインスタンス化SCNセットが含まれない場合、アウトバウンド・サーバーでは、インスタンス化SCNのチェックがスキップされ、そのデータベース・オブジェクトのすべてのLCRが送信されます。いずれの場合も、アウトバウンド・サーバーでは、そのルール・セットを満たすLCRのみが送信されます。
このプロシージャでアウトバウンド・サーバーのインスタンス化SCNを設定するには、apply_database_link
パラメータをNULL
またはローカル・データベースに設定する必要があります。
関連項目: アウトバウンド・サーバーおよびインスタンス化SCNの詳細は、Oracle DatabaseのXStreamガイドを参照してください。 |
SET_GLOBAL_INSTANTIATION_SCNプロシージャおよびXStreamインバウンド・サーバー
インバウンド・サーバーでは、インスタンス化SCNは無視されます。このプロシージャは、XStreamインバウンド・サーバーに影響を与えません。
SET_GLOBAL_INSTANTIATION_SCNプロシージャおよびCDB
CDBでは、このプロシージャは、インスタンス化のSCN情報を使用する適用プロセスと同一のコンテナから起動する必要があります。
このプロシージャでは、適用の目的で代替主キーとして使用される列セットを記録し、指定オブジェクトに対する既存の代替主キー列が存在する場合は、それを削除します。
このプロシージャはオーバーロードされています。column_list
パラメータとcolumn_table
パラメータは、両方同時には指定できません。
構文
DBMS_APPLY_ADM.SET_KEY_COLUMNS( object_name IN VARCHAR2, column_list IN VARCHAR2, apply_database_link IN VARCHAR2 DEFAULT NULL); DBMS_APPLY_ADM.SET_KEY_COLUMNS( object_name IN VARCHAR2, column_table IN DBMS_UTILITY.NAME_ARRAY, apply_database_link IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-20 SET_KEY_COLUMNSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
代替主キーとして使用する、表内の列のカンマで区切られたリスト。列名の間に空白は入れません。
|
|
代替主キーとして使用する、表内の列の
|
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
SET_KEY_COLUMNSプロシージャに関する注意事項
このプロシージャを使用する場合は、次の点に注意してください。
空でない場合、指定列セットは、指定オブジェクトの主キーより優先されます。オブジェクトに主キー列があり、これらの主キー列をキーとして使用する場合は、代替キー列を指定しないでください。
このプロシージャは、接続先データベースで実行します。ソース・データベースでは、代替キー列に対して絶対的なサプリメンタル・ログ・グループを指定する必要があります。
本来の主キーとは異なり、代替キー列として指定する列にはNULL
を含めることができます。ただし、代替キー列として指定する各列はNOT
NULL
列にすることをお薦めします。また、すべての列を代替キーに含める単一の索引も作成してください。これらのガイドラインに従うと、Oracleは関連する行をさらに効率的に検索できるため、LOBに対する更新、削除およびピース単位の更新のパフォーマンスが向上します。
表の主キー列または代替キー列は、アプリケーションで更新できないようにしてください。更新できないようにすることにより、Oracleは行を識別でき、データの整合性を保つことができます。
主キーも、少なくとも1つのNOT
NULL
列がある一意の索引も、表の代替キーもない場合、キーは、LOB、LONG
、LONG
RAW
、ユーザー定義タイプ(オブジェクト・タイプ、REF
、VARRAY、ネストした表)およびオラクル社提供のタイプ(任意の
タイプ、XMLタイプ、空間タイプ、メディア・タイプ)などのデータ・タイプの列を除くすべての表の列で構成されます。
重複行と代替主キー列
表の複数の行で、LOB列、LONG
列およびLONG
RAW
列を除くすべての列値が同じ場合、その表には重複行が含まれています。SET_KEY_COLUMNS
プロシージャを使用すると、接続先データベースの表に、代替主キー列を指定できます。接続先データベースの重複行を持つ表に対して代替主キー列が指定され、適用コンポーネント・パラメータallow_duplicate_rows
がY
に設定されている場合、ソース・データベースと接続先データベースで表データを同期させるには、次の要件を満たしている必要があります。
接続先データベースの代替キー列として指定されている列に対して、ソース・データベースでサプリメンタル・ロギングを必ず指定すること。代替キー列は、ソース・データベースの無条件のログ・グループに含まれている必要があります。
代替キー列によって、接続データベースの表内の各行が一意に識別されること。
この項の後半では、これらの要件の詳細を説明します。
表にキーがなく、allow_duplicate_rows
適用コンポーネント・パラメータがY
に設定されている場合、UPDATE
またはDELETE
コマンド・タイプのみを持つ単一の行LCRは、いずれかの重複行に適用されます。この場合、ソース・データベースのすべての重複行が変更される変更を行う際にソース・データベースの表および接続先データベースの表に対応する重複行が存在すると、その変更の結果生成された行LCRの適用時に、接続先データベースのすべての重複行も変更されます。
たとえば、ソース・データベースの表に2つの重複行があるとします。それらの重複行に対して更新を行うと、2つの行LCRが生成されます。接続先データベースでは、1つの行LCRが重複行の1つに適用されます。重複行の1つが変更されたため、この時点で、接続先データベースに重複行は存在しなくなります。接続先データベースで2番目の行LCRが適用されると、行は再度重複することになります。同様に、ソース・データベースのこれらの重複行に対して削除を実行すると、ソースの変更の結果生成された行LCRの適用時に、接続先データベースの両方の行が削除されます。
表に対して代替主キー列が指定されている場合、行LCRは、代替主キー列に基づいて適用時に表内の行で識別されます。接続先データベースの重複行を持つ表に対して代替主キー列が指定され、適用コンポーネント・パラメータallow_duplicate_rows
がY
に設定されている場合、ソース・データベースの重複行に対して行った更新の内容が、接続先データベースで行LCRが適用される際の変更の内容と異なることがあります。特に、代替主キー列として指定されている列の1つが更新によって変更されない場合、接続先データベースでは、同じ重複行が複数回更新され、他の重複行が更新されないことがあります。
また、接続先データベースの表内の各行が代替キー列によって一意に識別されない場合は、複数行で識別される行LCRで、それらの行のいずれかを更新できます。この場合、行LCR内の更新内容が、接続先データベースの表の正しい行に適用されない可能性があります。
適用コンポーネントでは、表内の行が重複しているかどうかを判断する場合、代替主キー列は無視されます。適用コンポーネントでは、行内のLOB列、LONG
列およびLONG
RAW
列を除くすべての列値が同じ場合にのみ、行が重複していると判断されます。したがって、1回の更新または削除によって、表内の重複していない複数の行が変更されると、常にエラーが発生します。
たとえば、列c1
、c2
およびc3
を持つ表で、列c1
を代替主キーとして指定するためにSET_KEY_COLUMNS
プロシージャが使用されているとします。2つの行のc1
列のキー値が同じで、c2
列またはc3
列の値が異なっている場合、適用コンポーネントでは、これらの行は重複行として処理されません。行のc1
値が同じであるため、更新または削除によって複数の行が変更される場合は、allow_duplicate_rows
適用コンポーネント・パラメータの設定に関係なく、エラーが発生します。
SET_KEY_COLUMNSプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
SET_KEY_COLUMNSプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
SET_KEY_COLUMNSプロシージャおよびCDB
このプロシージャは、代替主キーとして使用される列を定義します。適切なPDBで、SET_KEY_COLUMNS
プロシージャを実行する必要があります。
このプロシージャでは、適用パラメータを指定した値に設定します。
構文
DBMS_APPLY_ADM.SET_PARAMETER ( apply_name IN VARCHAR2, parameter IN VARCHAR2, value IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-21 SET_PARAMETERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
適用コンポーネント名。所有者を指定しないでください。 |
|
設定するパラメータの名前。これらのパラメータのリストについては、「適用コンポーネントのパラメータ」を参照してください。 |
|
パラメータに設定する値。
|
適用コンポーネントのパラメータ
次の表に、適用コンポーネントのパラメータを示します。
表23-22 適用コンポーネントのパラメータ
パラメータ名 | 設定可能な値 | デフォルト | 説明 |
---|---|---|---|
|
|
注意: このパラメータの設定に関係なく、適用コンポーネントでは、LOB列、 関連項目: 「使用上の注意」および「重複行と代替主キー列」 |
|
|
|
適用コンポーネントによって順序値をチェックおよび調整するかどうかを制御します。
昇順の順序では、このパラメータを 降順の順序では、このパラメータを
注意: このパラメータは、XStreamを対象としています。XStream最適化を 関連項目: capture_sequence_nextval取得プロセス・パラメータの詳細は、 |
|
|
|
適用済トランザクションがコミットされる順序。 適用サーバーは、ソース・データベースでのコミット時と異なる順で、接続先データベースで非依存トランザクションを適用できます。依存トランザクションは、ソース・データベースでのコミット時と常に同じ順序で、接続先データベースで適用されます。
適用するトランザクションは、指定に関係なく、データ依存性と制約依存性に従って、パラレルで実行できます。
接続先データベースでは、これらのトランザクションが逆の順序でコミットされる可能性があります。
注意: 値 関連項目: 「使用上の注意」 |
|
|
|
注意: このパッケージの 関連項目: 自動競合検出の詳細は、「使用上の注意」および『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
|
|
|
ターゲット表にソース表と同じ制約がすべて含まれている場合、このパラメータを トランザクション内のLCR数が 注意: このパラメータは、XStreamを対象としています。XStream最適化を |
|
|
|
|
|
|
|
再開された適用コンポーネントは、新しいセッション識別子を取得し、この適用コンポーネントに関連付けられているプロセスも新しいセッション識別子を取得します。ただし、コーディネータ・プロセス番号( |
|
正の整数 |
|
通常、適用コンポーネントは、コミット・レコードを受信するまで待機してから、トランザクションの変更を適用します。XStreamが有効で、特定のトランザクションで 既存のすべての適用サーバーは、ソースからの全トランザクションを処理している可能性があるため、残りの即時トランザクションを処理するために追加の適用サーバーが自動的に作成されます。適用パラメータ この適用パラメータは、その値が 注意: このパラメータは、XStreamを対象としています。XStream機能を |
|
|
|
このパラメータを このパラメータを 注意: このパラメータは、XStreamを対象としています。Oracle Streamsレプリケーション環境の適用プロセスに対してこのパラメータを |
|
Oracle Streamsタグのカンマ区切りリスト |
|
アウトバウンド・サーバーの取得プロセスによって、指定したOracle Streamsタグの1つでタグ付けされたDML変更を取得するかどうかを制御します。 取得プロセスがこれらの変更を取得するかどうかは、
注意: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの |
|
トランザクション名のカンマ区切りリスト |
|
アウトバウンド・サーバーの取得プロセスによって、指定したトランザクション名のDML変更を取得するかどうかを制御します。 取得プロセスがこれらの変更を取得するかどうかは、
注意: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの |
|
ユーザー名のカンマ区切りリスト |
|
アウトバウンド・サーバーの取得プロセスによって、指定したユーザーが加えたDML変更を取得するかどうかを制御します。 取得プロセスがこれらの変更を取得するかどうかは、 各ユーザー名の完全パターン一致を指定します。パターン一致では大/小文字が区別されます。たとえば、
注意: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの |
|
ユーザーID値のカンマ区切りリスト |
|
アウトバウンド・サーバーの取得プロセスによって、指定したユーザーが加えたデータ操作言語(DML)変更を取得するかどうかを制御します。 取得プロセスがこれらの変更を取得するかどうかは、 ユーザーのユーザーIDを表示するには、
注意: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの |
|
|
|
どちらの設定でも、取得プロセスのルール・セットが満たされる場合にのみ、取得プロセスによってDMLの変更が取得されます。
注意: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの |
|
|
|
|
どちらの設定でも、取得プロセスのルール・セットが満たされる場合にのみ、取得プロセスによってDMLの変更が取得されます。
注意: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの |
|
|
1つのトランザクションにグループ化できるLCRの最小数。トランザクションのコミットLCRは、トランザクションのLCR数に含まれません。 このパラメータによって、適用コンポーネントが複数のトランザクションのLCRを1つのトランザクションにグループ化できるようにします。適用コンポーネントは、コミットされたトランザクションに含まれるLCRのみをグループ化します。 トランザクションにこのパラメータの設定より多くのLCRが含まれる場合、そのトランザクションは1つのトランザクションとして適用されます。適用コンポーネントは、1つのトランザクションを個別のトランザクションに分割しません。 このパラメータは、 注意: このパラメータは、XStreamアウトバウンド・サーバーおよびインバウンド・サーバーを対象としています。XStream最適化を 関連項目: 「使用上の注意」 |
|
|
|
このパラメータは、データのロード中に変更を適用するときに、適用コンポーネントが重複レコードおよび欠損レコードのエラーを解決するかどうかを制御します。 通常のレプリケーション・アクティビティの場合は、このパラメータを
このパラメータが
注意: このパラメータは、1つ以上のインバウンド・サーバーのあるXStream In環境を対象としています。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 |
|
有効なソース・トランザクションIDまたは |
|
適用コンポーネントがソース・データベースの指定したトランザクションを無視するように設定し、即座に有効化します。 トランザクションを無視すると、ソース・データベースと接続先データベース間でデータ相違が発生する可能性があるため、このパラメータを設定する場合は注意してください。 複数のトランザクションを無視するには、
注意: 適用コンポーネントでは、取得プロセスによって取得されなかったトランザクションについて、このパラメータは無視されます。 関連項目: 「使用上の注意」 |
|
有効なSCN値または |
|
適用コンポーネントは、指定された値以上のコミットSCNを持つトランザクションの適用前に無効化されます。
注意: 適用コンポーネントでは、取得プロセスによって取得されなかったトランザクションについて、このパラメータは無視されます。 関連項目: 「使用上の注意」 |
|
正の整数 |
|
適用コンポーネントにおいて使用可能な適用サーバーの最大数を制限します。 parallelism適用パラメータを2以上に設定すると、このパラメータ( 5分以上アイドル状態にある適用サーバーは、構成された 全適用プロセスの正確な適用統計が保持されるように、停止されたサーバーのランタイム統計は適用サーバー0に集約されます。 注意: このパラメータは、XStreamを対象としています。XStream最適化を |
|
正の整数 |
|
適用コンポーネントのために特に割り当てられたシステム・グローバル領域(SGA)メモリーの量をMB単位で制御します。 このメモリーは、適用コンポーネントのセッション期間中に割り当てられ、適用コンポーネントが無効になると解放されます。 注意: データベース上のすべてのコンポーネントに割り当てられたシステムグローバル領域(SGA)メモリーは、合計で
注意: このパラメータは、XStreamを対象としています。XStream最適化を 関連項目: 「使用上の注意」 |
|
|
|
このパラメータによって、表またはREDOログで適用トランザクションを追跡するかどうかを決定できます。進捗表では、完了した適用トランザクションが追跡されます。
データベースがアーカイブ・ログ・モードではない場合は、 注意: このパラメータは、XStreamを対象としています。XStream最適化を 関連項目: 「使用上の注意」 |
|
|
|
このパラメータは、ソース・データベースへの更新で列が既存の値に設定されるときの競合解決に影響を与えます。 このパラメータを このパラメータを |
|
正の整数 |
|
トランザクションを同時に適用できる適用サーバーの数。 リーダー・サーバーおよび適用サーバー・プロセス名は たとえば、parallelismを
注意: このパラメータの値を 関連項目: 「使用上の注意」 |
|
|
|
parallelism interval(並列度間隔)とは、現行のワークロード・アクティビティを計算する時間間隔(秒単位)です。 適用コンポーネントは5 X 並列度間隔は、 注意: このパラメータは、1つ以上のインバウンド・サーバーのあるXStream In環境を対象としています。XStreamアウトバウンド・サーバーは、このパラメータを無視します。XStream最適化を 関連項目: 「使用上の注意」 |
|
|
|
透過的なデータの暗号化を使用して暗号化された列の暗号化を保持するかどうか。
注意: 実行中の適用コンポーネントに対してこのパラメータの値を変更すると、適用コンポーネントは自動的に停止し、再開します。現在適用中のトランザクションのサイズによっては、時間がかかる場合があります。 関連項目: 「使用上の注意」 |
|
|
|
適用時に自動データ・タイプ変換が実行された場合に、列の右端の空白埋めを削除するかどうか。
関連項目: 適用時の自動データ・タイプ変換の詳細は、「使用上の注意」および『Oracle Streams概要および管理』を参照してください。 |
|
|
|
同じ適用コンポーネントの別のインスタンス化が終了するのを待機する最大秒数。同じ適用コンポーネントの別のインスタンス化がこの時間内に終了しない場合、適用コンポーネントは開始しません。
関連項目: 「使用上の注意」 |
|
|
|
このパラメータは、適用コンポーネントによる変更があった場合、トリガーを実行するかどうかを制御します。
トリガーの実行プロパティが常に実行されるよう設定されている場合、 注意: このパラメータは、1つ以上のインバウンド・サーバーのあるXStream In環境を対象としています。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。 関連項目: 「使用上の注意」 |
|
正の整数または |
|
適用コンポーネントは、開始してから指定秒数が経過した後、可能なかぎり早く停止します。
関連項目: 「使用上の注意」 |
|
|
|
Oracleサポート・サービスから指示がないかぎり、このパラメータは設定しないでください。 関連項目: 「使用上の注意」 |
|
正の整数または |
|
適用コンポーネントは、指定した数のトランザクションを適用した後停止します。
関連項目: 「使用上の注意」 |
|
正の整数または |
|
特定のトランザクションのメッセージに、指定した時間を超えてメモリーに保持されているものがある場合、適用コンポーネントによって、メモリーからハードディスクへのメッセージの書出しが開始されます。このパラメータは経過時間を秒単位で指定します。 リーダー・サーバーによってメモリーから書き出されたメッセージは、ハードディスク上のデータベース表に格納されます。これらのメッセージは、メモリーからキュー表へは書き出されません。 メッセージの書出しは、トランザクション単位で行われます。たとえば、このパラメータの設定が
適用コンポーネントによって書き出されたトランザクションについては、 関連項目: 「使用上の注意」 |
|
正の整数または |
|
メモリー内の特定のトランザクションのメッセージ数が指定した数を超えると、適用コンポーネントによって、メモリーからハードディスクへのそのトランザクションのメッセージの書出しが開始されます。メモリーから書き出される最初のチャンクのメッセージの数は、このパラメータに指定した数と同じになり、それ以降のチャンクで書き出されるメッセージの数は、100またはこのパラメータに指定した数のいずれか小さいほうと同じになります。 適用コンポーネントのリーダー・サーバーでは、指定した数のメッセージが特定のトランザクションに対してメモリー内に保持されている場合、そのトランザクションに対する次のメッセージが検出されると、メモリー内のメッセージがハードディスクに書き出されます。たとえば、パラメータの設定が
適用コンポーネントは、最初の10,100個のメッセージをハードディスクから適用し、最後の100個のメッセージをメモリーから適用します。 リーダー・サーバーによってメモリーから書き出されたメッセージは、ハードディスク上のデータベース表に格納されます。これらのメッセージは、メモリーからキュー表へは書き出されません。 メッセージの書出しは、トランザクション単位で行われます。たとえば、このパラメータの設定が
適用コンポーネントによって書き出されたトランザクションについては、 関連項目: 「使用上の注意」 |
|
|
|
|
メッセージには、適用コンポーネントの停止理由が示されます。 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
新しいパラメータ設定の有効化が遅延する可能性
パラメータ値を変更したとき、パラメータの新しい値が有効になるまでに時間がかかる場合があります。
正の整数として解釈されるパラメータ
正の整数として解釈されるすべてのパラメータについて、設定可能な最大値は4,294,967,295
です。適用可能な場合、比較的大きい値にはINFINITE
を指定してください。
システム変更番号(SCN)設定のあるパラメータ
SCN設定が必要なパラメータについては、任意の有効なSCN値を指定できます。
SET_PARAMETERプロシージャおよびストリーム
DBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMS
プロシージャを使用してOracle StreamsのXStreamパフォーマンス最適化を有効にした場合、ストリームで次のパラメータを使用できます。
apply_sequence_nextval
compute_lcr_dep_on_arrival
eager_size
grouptransops
max_parallelism
max_sga_size
optimize_progress_table
parallelism_interval
SET_PARAMETERプロシージャおよびXStreamアウトバウンド・サーバー
アウトバウンド・サーバーでは、次の適用パラメータの設定は無視されます。
allow_duplicate_rows
commit_serialization
compare_key_only
compute_lcr_dep_on_arrival
disable_on_error
eager_size
enable_xstream_table_stats
grouptransops
handlecollisions
optimize_self_updates
parallelism
parallelism_interval
preserve_encryption
rtrim_on_implicit_conversion
suppresstriggers
commit_serialization
パラメータは、アウトバウンド・サーバーでは常にFULL
に設定され、parallelismパラメータは、アウトバウンド・サーバーでは常に1
に設定されます。
その他の適用パラメータは、アウトバウンド・サーバーで使用できます。
注意: XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。 |
SET_PARAMETERプロシージャおよびXStreamインバウンド・サーバー
インバウンド・サーバーでは、次の適用パラメータの設定は無視されます。
excludetag
excludetrans
excludeuser
excludeuserid
getapplops
getreplicates
ignore_transaction
maximum_scn
その他すべての適用コンポーネント・パラメータは、インバウンド・サーバーで使用できます。
インバウンド・サーバーに対するcompare_key_only
パラメータのデフォルト設定は、Y
です。
インバウンド・サーバーに対するparallelism
パラメータのデフォルト設定は、4
です。
注意: XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。 |
このプロシージャでは、指定したソース・データベース内の指定のスキーマに対して、およびオプションで、ソース・データベースのスキーマが所有する表に対して、指定したインスタンス化SCNを記録します。このプロシージャは、スキーマの既存のインスタンス化SCNを上書きしますが、表のインスタンス化SCNを設定する場合は、表の既存のインスタンス化SCNを上書きします。
このプロシージャを使用すると、スキーマに対するDDL論理変更レコード(LCR)の中で、適用コンポーネントで無視するものと適用するものを正確に制御できます。
構文
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN( source_schema_name IN VARCHAR2, source_database_name IN VARCHAR2, instantiation_scn IN NUMBER, apply_database_link IN VARCHAR2 DEFAULT NULL, recursive IN BOOLEAN DEFAULT FALSE, source_root_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-23 SET_SCHEMA_INSTANTIATION_SCNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ソース・スキーマの名前。たとえば、 ルールベースの変換または適用ハンドラがスキーマ名を変更するように構成されている場合でも、スキーマにインスタンス化SCNを設定するときには、常に、ソース・データベースのスキーマの名前を指定します。 |
|
ソース・データベースのグローバル名。たとえば、 ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名が |
|
インスタンス化SCN。 |
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、ローカル適用コンポーネントの接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 |
|
注意: |
|
ソース・ルート・データベースのグローバル名。 CDB以外の場合、このパラメータは CDBでは、特定のコンテナを識別するために |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
SET_SCHEMA_INSTANTIATION_SCNプロシージャおよびLCR
このプロシージャによって指定されるインスタンス化SCNは、取得プロセスによって取得されたLCRに対してのみ使用されます。ユーザーが作成したLCRには使用されません。
インスタンス化SCNおよびDDL LCR
ソース・データベースからのスキーマ内のデータベース・オブジェクトに対するDDL LCRのコミットSCNが、接続先データベースでそのデータベース・オブジェクトに対するインスタンス化SCN以下の場合は、接続先データベースでの適用コンポーネントで、そのDDL LCRは無視されます。それ以外の場合は、DDL LCRが適用されます。
このプロシージャによって指定されるスキーマ・インスタンス化SCNは、次のタイプのDDL LCRで使用されます。
command_type
がCREATE
TABLE
のDDL LCR
NULL
以外のobject_owner
が指定されていて、base_table_owner
とbase_table_name
がいずれも指定されていないDDL LCR
たとえば、このプロシージャによって設定されるスキーマ・インスタンス化SCNは、command_type
がCREATE
TABLE
およびALTER
USER
のDDL LCRに使用されます。
このプロシージャによって指定されるスキーマ・インスタンス化SCNは、command_type
がCREATE
USER
のDDL LCRには使用されません。そうしたDDL LCRには、グローバル・インスタンス化SCNが必要です。
recursiveパラメータ
recursive
パラメータをTRUE
に設定すると、このプロシージャは、スキーマが所有しているソース・データベースの各表に表インスタンス化SCNを設定します。このプロシージャでは、SET_TABLE_INSTANTIATION_SCN
プロシージャを使用して各表のインスタンス化SCNを設定します。表のDDL LCRおよび行LCRには、各表のインスタンス化SCNが使用されます。
recursive
パラメータをFALSE
に設定すると、表にインスタンス化SCNは設定されません。
SET_SCHEMA_INSTANTIATION_SCNプロシージャおよびXStreamアウトバウンド・サーバー
インスタンス化SCNは、アウトバウンド・サーバーによって処理されるデータベース・オブジェクトには不要です。インスタンス化SCNをデータベース・オブジェクトに対して設定すると、アウトバウンド・サーバーでは、インスタンス化SCN値より大きいSCN値を持つデータベース・オブジェクトのLCRのみが送信されます。データベース・オブジェクトにインスタンス化SCNセットが含まれない場合、アウトバウンド・サーバーでは、インスタンス化SCNのチェックがスキップされ、そのデータベース・オブジェクトのすべてのLCRが送信されます。いずれの場合も、アウトバウンド・サーバーでは、そのルール・セットを満たすLCRのみが送信されます。
このプロシージャでアウトバウンド・サーバーのインスタンス化SCNを設定するには、apply_database_link
パラメータをNULL
またはローカル・データベースに設定する必要があります。
関連項目: アウトバウンド・サーバーおよびインスタンス化SCNの詳細は、Oracle DatabaseのXStreamガイドを参照してください。 |
SET_SCHEMA_INSTANTIATION_SCNプロシージャおよびXStreamインバウンド・サーバー
インバウンド・サーバーでは、インスタンス化SCNは無視されます。このプロシージャは、XStreamインバウンド・サーバーに影響を与えません。
SET_SCHEMA_INSTANTIATION_SCNプロシージャおよびCDB
CDBでは、このプロシージャは、インスタンス化のSCN情報を使用する適用プロセスと同一のコンテナから起動する必要があります。
このプロシージャでは、指定したソース・データベース内の指定表に対する指定インスタンス化SCNを記録します。このプロシージャは、特定の表に対する既存のインスタンス化SCNを上書きします。
このプロシージャを使用すると、表に対する論理変更レコード(LCR)の中で、適用コンポーネントで無視するものと適用するものを正確に制御できます。
構文
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN( source_object_name IN VARCHAR2, source_database_name IN VARCHAR2, instantiation_scn IN NUMBER, apply_database_link IN VARCHAR2 DEFAULT NULL, source_root_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-24 SET_TABLE_INSTANTIATION_SCNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルールベースの変換または適用ハンドラがスキーマ名またはデータベース・オブジェクト名を変更するように構成されている場合でも、データベース・オブジェクトにインスタンス化SCNを設定するときには、常に、ソース・データベースのスキーマおよびデータベース・オブジェクトの名前を指定します。 |
|
ソース・データベースのグローバル名。たとえば、 ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名が |
|
インスタンス化SCN。 |
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、ローカル適用コンポーネントの接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 注意: CDBのルートからプロシージャを起動する場合、このパラメータを |
|
ソース・ルート・データベースのグローバル名。 CDB以外の場合、このパラメータは CDBでは、特定のコンテナを識別するために |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
インスタンス化SCNおよびLCR
ソース・データベースからの表に対するLCRのコミットSCNが、一部の接続先データベースでその表に対するインスタンス化SCN以下の場合は、接続先データベースでの適用コンポーネントで、そのLCRは無視されます。それ以外の場合は、LCRが適用されます。
このプロシージャによって指定される表のインスタンス化SCNは、次のタイプのLCRで使用されます。
表に対する行LCR。
NULL
以外のbase_table_owner
とbase_table_name
が指定されているDDL LCR。ただし、command_type
がCREATE
TABLE
のDDL LCRは除きます。
たとえば、このプロシージャによって設定されるインスタンス化SCNは、command_type
がALTER
TABLE
またはCREATE
TRIGGER
のDDL LCRに対して使用されます。
注意: このプロシージャによって指定されるインスタンス化SCNは、取得プロセスによって取得されたLCRに対してのみ使用されます。ユーザーが作成したLCRには使用されません。 |
関連項目:
|
SET_TABLE_INSTANTIATION_SCNプロシージャおよびXStreamアウトバウンド・サーバー
インスタンス化SCNは、アウトバウンド・サーバーによって処理されるデータベース・オブジェクトには不要です。インスタンス化SCNをデータベース・オブジェクトに対して設定すると、アウトバウンド・サーバーでは、インスタンス化SCN値より大きいSCN値を持つデータベース・オブジェクトのLCRのみが送信されます。データベース・オブジェクトにインスタンス化SCNセットが含まれない場合、アウトバウンド・サーバーでは、インスタンス化SCNのチェックがスキップされ、そのデータベース・オブジェクトのすべてのLCRが送信されます。いずれの場合も、アウトバウンド・サーバーでは、そのルール・セットを満たすLCRのみが送信されます。
このプロシージャでアウトバウンド・サーバーのインスタンス化SCNを設定するには、apply_database_link
パラメータをNULL
またはローカル・データベースに設定する必要があります。
関連項目: アウトバウンド・サーバーおよびインスタンス化SCNの詳細は、Oracle DatabaseのXStreamガイドを参照してください。 |
SET_TABLE_INSTANTIATION_SCNプロシージャおよびXStreamインバウンド・サーバー
インバウンド・サーバーでは、インスタンス化SCNは無視されます。このプロシージャは、XStreamインバウンド・サーバーに影響を与えません。
SET_TABLE_INSTANTIATION_SCNプロシージャおよびCDB
CDBでは、このプロシージャは、インスタンス化のSCN情報を使用する適用プロセスと同一のコンテナから起動する必要があります。
このプロシージャは、指定オブジェクト用に事前作成された更新競合ハンドラを追加、変更または削除します。
構文
DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER( object_name IN VARCHAR2, method_name IN VARCHAR2, resolution_column IN VARCHAR2, column_list IN DBMS_UTILITY.NAME_ARRAY, apply_database_link IN VARCHAR2 DEFAULT NULL);
パラメータ
表23-25 SET_UPDATE_CONFLICT_HANDLERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
更新競合ハンドラが追加、変更または削除されるスキーマと表の名前。 たとえば、ユーザー |
|
作成する更新競合ハンドラのタイプ。 事前作成されたハンドラの1つを指定できます。このハンドラは、行に対してソース・データベースの列リストを適用するかどうか、または接続先データベースの行の値を保持するかどうかを決定します。
|
|
更新競合ハンドラを一意に識別するために使用される列の名前。 このパラメータに |
|
競合ハンドラがコールされる列のリスト。 同一の列が複数の列リストに存在することはできません。 適用コンポーネントが行論理変更レコード(行LCR)を適用しようとしたときに、リスト内の1つ以上の列に対して競合が発生すると、競合を解消するために競合ハンドラがコールされます。競合ハンドラは、リストにない列でのみ競合が発生した場合はコールされません。 注意: 事前作成された更新競合ハンドラでは、LOB列、 |
|
Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。 注意: 現在、Oracle以外のデータベースに変更を適用するときに、競合ハンドラはサポートされません。 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
関連項目: 事前作成された更新競合ハンドラおよびカスタム更新競合ハンドラの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
既存の更新競合ハンドラの変更
既存の更新競合ハンドラを変更する場合は、既存の更新競合ハンドラの表と解消列を指定します。事前作成メソッドまたは列リストを変更できます。
既存の更新競合ハンドラの削除
既存の更新競合ハンドラを削除する場合は、事前作成メソッドにNULL
を指定し、既存の更新競合ハンドラの表、列リストおよび解消列を指定します。
競合に対する一連の処理
更新の競合が発生した場合、次の一連の処理が実行されます。
適切な更新競合ハンドラをコールして、競合を解消します。
更新競合ハンドラが指定されていない場合、または更新競合ハンドラで競合を解消できない場合は、適用コンポーネント、表および操作に対する適切なエラー・ハンドラをコールしてエラーを処理します。
エラー・ハンドラが指定されていない、またはエラー・ハンドラでエラーを解決できない場合は、エラーが発生し、エラーの原因となった行LCRが含まれているトランザクションがエラー・キューに移されます。
競合に対するプロシージャDMLハンドラ
事前作成された更新競合ハンドラを使用して要件を満たすことができない場合は、PL/SQLプロシージャを作成し、カスタム競合ハンドラとして使用できます。特定の表に対して1つ以上のカスタム競合ハンドラを指定するには、SET_DML_HANDLER
プロシージャを使用します。また、カスタム競合ハンドラでは、LOB列を処理し、LOBアセンブリを使用することができます。
1つの列リストにのみ指定可能な列
列が列リストにある場合、同じ列を別の列リストに追加しようとすると、このプロシージャは次のエラーを戻します。
ORA-00001: UNIQUE CONSTRAINT (SYS.APPLY$_CONF_HDLR_COLUMNS_UNQ1) VIOLATED
更新競合ハンドラおよびOracle以外のデータベース
Oracle以外のデータベースに適用している適用コンポーネントに対する更新競合ハンドラの設定はサポートされていません。
SET_UPDATE_CONFLICT_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。
SET_UPDATE_CONFLICT_HANDLERプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
例
次は、hr
スキーマ内のemployees
表に対して更新競合ハンドラを設定する場合の例です。
DECLARE cols DBMS_UTILITY.NAME_ARRAY; BEGIN cols(1) := 'salary'; cols(2) := 'commission_pct'; DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER( object_name => 'hr.employees', method_name => 'MAXIMUM', resolution_column => 'salary', column_list => cols); END; /
この例では、hr.employees
表内のsalary
列またはcommission_pct
列で競合が発生した場合にコールされる競合ハンドラが設定されます。このような競合が発生した場合は、競合を解消するためにsalary
列が評価されます。job_id
列など、列リストにない列でのみ競合が発生した場合、この競合ハンドラはコールされません。
値の依存性を設定または削除します。値の依存性とは、複数の表の列間の関係を規定する仮想的な依存性の定義です。
適用コンポーネントでは、値の依存性の名前を使用して、値の依存性に定義されている列が含まれている行論理変更レコード(行LCR)間の依存性を検出します。値の依存性には、表間の仮想的な外部キー関係を定義できますが、外部キー関係とは異なり、複数のデータベース・オブジェクトを含めることができます。
このプロシージャはオーバーロードされています。attribute_list
パラメータとattribute_table
パラメータは、両方同時には指定できません。
関連項目: 『Oracle Streams概要および管理』 |
構文
DBMS_APPLY_ADM.SET_VALUE_DEPENDENCY( dependency_name IN VARCHAR2, object_name IN VARCHAR2, attribute_list IN VARCHAR2); DBMS_APPLY_ADM.SET_VALUE_DEPENDENCY( dependency_name IN VARCHAR2, object_name IN VARCHAR2, attribute_table IN DBMS_UTILITY.NAME_ARRAY);
パラメータ
表23-26 SET_VALUE_DEPENDENCYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
値の依存性の名前。 指定した名前の依存性が存在しない場合は、作成されます。 指定した名前の依存性が存在する場合は、指定したオブジェクトおよび属性がその依存性に追加されます。
|
|
|
|
表内の列名のカンマ区切りリスト。エントリ間に空白を挿入しないでください。 |
|
表内の列名が含まれている |
このプロシージャでは、適用コンポーネントにメッセージの適用開始を指示します。
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
適用コンポーネントのステータス
適用コンポーネントのステータスは永続的に記録されます。したがって、ステータスがENABLED
の場合、適用コンポーネントはデータベース・インスタンスの起動時に開始されます。適用コンポーネント(a
nnn
)は、Oracleバックグラウンド・プロセスです。DBMS_AQADM.START_QUEUE
およびDBMS_AQADM.STOP_QUEUE
のエンキューとデキューの状態は、適用コンポーネントの開始ステータスには影響を与えません。
START_APPLYプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、適用プロセスとアウトバウンド・サーバーに対して同じように動作します。
START_APPLYプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。
このプロシージャでは、適用コンポーネントによるメッセージの適用を停止し、適用が終了していないトランザクションをロールバックします。
パラメータ
表23-28 STOP_APPLYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
適用コンポーネント名。 |
|
適用コンポーネントの動作は、 |
使用上の注意
このプロシージャには、次の使用上の注意が適用されます。
適用コンポーネントのステータス
適用コンポーネントのステータスは永続的に記録されます。したがって、ステータスがDISABLED
またはABORTED
の場合、適用コンポーネントはデータベース・インスタンスの起動時に開始されません。
適用コンポーネントのステータスに影響を与えないキュー・サブプログラム
DBMS_AQADM.START_QUEUE
およびDBMS_AQADM.STOP_QUEUE
のエンキューとデキューの状態は、適用コンポーネントのSTOP
ステータスには影響を与えません。
STOP_APPLYのforceパラメータおよびcommit_serialization適用パラメータ
次の表では、STOP_APPLY
プロシージャのforce
パラメータ、およびcommit_serialization
適用コンポーネント・パラメータの各設定に対する適用コンポーネントの動作を説明します。すべての場合で、停止時に、適用コンポーネントは未完了のトランザクションをロールバックします。
force | commit_serialization | 適用コンポーネントの動作 |
---|---|---|
TRUE |
FULL |
適用コンポーネントは即時に停止され、未完了のトランザクションは適用されません。 |
TRUE |
DEPENDENT_TRANSACTIONS |
適用コンポーネントの停止時に、ローカルで適用済の一部のトランザクションが、ローカルで適用されていない一部のトランザクションより、時間的に遅れてソース・データベースでコミットされる場合があります。 |
FALSE |
FULL |
適用コンポーネントは、コミット順で次のコミットされていないトランザクションが処理中の場合、そのトランザクションを適用した後で停止します。 |
FALSE |
DEPENDENT_TRANSACTIONS |
停止する前に、適用コンポーネントは、コミット・タイムが最新の適用済トランザクションより早いコミット・タイムを持つトランザクションをすべて適用します。 |
たとえば、commit_serialization
適用コンポーネント・パラメータがDEPENDENT_TRANSACTIONS
に設定されていて、コミット・タイムが最も早いトランザクション1、トランザクション1の後にコミットされたトランザクション2、およびコミット・タイムが最も遅いトランザクション3の3つのトランザクションがあるとします。また、STOP_APPLY
プロシージャの実行時に、適用コンポーネントはトランザクション1とトランザクション3を適用済で、トランザクション2の適用処理中であるとします。この例では、force
パラメータがTRUE
に設定されていると、トランザクション2は適用されず、適用コンポーネントは停止します(トランザクション2はロールバックされます)。ただし、force
パラメータがFALSE
に設定されていると、トランザクション2は、適用コンポーネントが停止する前に適用されます。
commit_serialization
適用コンポーネント・パラメータがFULL
に設定されている別の例では、次のようになります。たとえば、commit_serialization
適用コンポーネント・パラメータがFULL
に設定されていて、コミット・タイムが最も早いトランザクションA、トランザクションAの後にコミットされたトランザクションB、およびコミット・タイムが最も遅いトランザクションCの3つのトランザクションがあるとします。この場合、STOP_APPLY
プロシージャの実行時に、適用コンポーネントはトランザクションAを適用済で、トランザクションBとCの適用処理中であるとします。この例では、force
パラメータがTRUE
に設定されていると、トランザクションBとCは適用されず、適用コンポーネントは停止します(トランザクションBとCはロールバックされます)。ただし、force
パラメータがFALSE
に設定されていると、トランザクションBは適用コンポーネントが停止する前に適用され、トランザクションCはロールバックされます。
STOP_APPLYプロシージャおよびXStreamアウトバウンド・サーバー
このプロシージャは、適用プロセスとアウトバウンド・サーバーに対して同じように動作します。
STOP_APPLYプロシージャおよびXStreamインバウンド・サーバー
このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。