20 DBMS_APPLY_ADM

DBMS_APPLY_ADMパッケージは、Oracle Streams適用プロセス、XStreamアウトバウンド・サーバーおよびXStreamインバウンド・サーバーを構成および管理するサブプログラムを提供しています。

この章のトピックは、次のとおりです:

参照:

20.1 DBMS_APPLY_ADMの概要

DBMS_APPLY_ADMパッケージは、Oracle Streams適用プロセス、XStreamアウトバウンド・サーバーおよびXStreamインバウンド・サーバーを開始、停止および構成するインタフェースを提供します。

このパッケージには、適用ハンドラの構成、メッセージのエンキュー先の設定、メッセージの実行ディレクティブの指定を行うサブプログラムが含まれます。また、このパッケージは、接続先データベースのオブジェクトにインスタンス化SCNを設定する管理サブプログラムも提供します。さらには、適用エラーを管理するサブプログラムもあります。

Xstreamインバウンド・サーバーおよびアウトバウンド・サーバーは、マルチテナント・コンテナ・データベース(CDB)のXStream構成で使用できます。CDBは、ユーザーが作成した0以上のプラガブル・データベース(PDB)を含むOracle Databaseです。

ノート:

  • 簡略化のため、この章では、適用プロセス、XStreamアウトバウンド・サーバーおよびXStreamインバウンド・サーバーを適用コンポーネントと呼びます。この章では、必要に応じて適用コンポーネントのタイプを特定します。

  • XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。

20.2 DBMS_APPLY_ADMのセキュリティ・モデル

このパッケージのセキュリティは、選択したユーザーまたはロールにこのパッケージのEXECUTE権限を付与するか、選択したユーザーまたはロールにEXECUTE_CATALOG_ROLEを付与することで制御できます。

パッケージのサブプログラムをストアド・プロシージャ内から実行する場合、そのサブプログラムを実行するユーザーには、パッケージのEXECUTE権限を直接付与する必要があります。ロールを通して付与することはできません。

DBMS_APPLY_ADMパッケージを使用してOracle Streams構成を管理する場合、ユーザーには、Oracle Streams管理者の権限を付与する必要があります。

DBMS_APPLY_ADMパッケージを使用してXStream構成を管理する場合、ユーザーには、XStream管理者の権限を付与する必要があります。

ノート:

ユーザーには、このパッケージ内のサブプログラムを使用して複数の管理タスク(適用ユーザーの設定など)を実行するための追加の権限を付与する必要があります。サブプログラムのために追加の権限が必要な場合、その権限は、サブプログラムを説明する項に記載されています。

参照:

20.3 DBMS_APPLY_ADMの推奨されないサブプログラム

commit_serialization適用コンポーネントのパラメータにNONE値を使用することは推奨されていません。かわりに、DEPENDENT_TRANSACTIONS値を使用してください。

ノート:

推奨されない適用コンポーネントのパラメータの値は使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

20.4 DBMS_APPLY_ADMサブプログラムの要約

このトピックのこの表では、DBMS_APPLY_ADMサブプログラムとのその説明を示します。

表20-1 DBMS_APPLY_ADMパッケージのサブプログラム

サブプログラム 説明

ADD_STMT_HANDLERプロシージャ

特定のデータベース・オブジェクトに対して指定された操作の文DMLハンドラを単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントに追加します。

ALTER_APPLYプロシージャ

適用コンポーネントを変更します。

COMPARE_OLD_VALUESプロシージャ

適用時に、行論理変更レコード(行LCR)内に存在する1つ以上の列の元の値を、宛先サイトの対応する列の現在の値と比較するかどうかを指定します。

CREATE_APPLYプロシージャ

適用コンポーネントを作成します。

CREATE_OBJECT_DEPENDENCYプロシージャ

オブジェクトの依存性を作成します。

DELETE_ALL_ERRORSプロシージャ

指定した適用コンポーネントに対するすべてのエラー・トランザクションを削除します。

DELETE_ERRORプロシージャ

指定したエラー・トランザクションを削除します。

DROP_APPLYプロシージャ

適用コンポーネントを削除します。

DROP_OBJECT_DEPENDENCYプロシージャ

オブジェクトの依存性を削除します。

EXECUTE_ALL_ERRORSプロシージャ

指定した適用コンポーネントに対するエラー・トランザクションを再実行します。

EXECUTE_ERRORプロシージャ

指定したエラー・トランザクションを再実行します。

GET_ERROR_MESSAGEファンクション

指定したメッセージ番号とトランザクション識別子に対するメッセージ・ペイロードをエラー・キューから返します。

HANDLE_COLLISIONS

適用プロセスと表の基本の競合解消を有効または無効にします。

REMOVE_STMT_HANDLER

特定のデータベース・オブジェクトに対して指定された操作の文DMLハンドラを単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントから削除します。

SET_CHANGE_HANDLERプロシージャ

特定のデータベース・オブジェクトに対して指定された操作の変更を追跡する文DMLハンドラを、単一の適用コンポーネントで設定または設定解除します。

SET_DML_CONFLICT_HANDLERプロシージャ

指定したオブジェクトのINSERTUPDATEまたはDELETE競合用に事前作成されたDML競合ハンドラを追加、変更または削除します。

SET_DML_HANDLERプロシージャ

ユーザー・プロシージャを、特定のデータベース・オブジェクトに対して指定された操作のプロシージャDMLハンドラとして単一の適用コンポーネントまたはデータベース内のすべての適用コンポーネントに設定します。

SET_ENQUEUE_DESTINATIONプロシージャ

指定したルールを満たすメッセージが適用コンポーネントによって自動的にエンキューされるキューを設定します。

SET_EXECUTEプロシージャ

指定したルールを満たすメッセージを適用コンポーネントによって実行するかどうかを指定します。

SET_GLOBAL_INSTANTIATION_SCNプロシージャ

指定したソース・データベースに対して、およびオプションで、ソース・データベースのスキーマとそのスキーマが所有する表に対して、指定したインスタンス化SCNを記録します。

SET_KEY_COLUMNSプロシージャ

ローカル適用の目的で代替主キーとして使用される列セットを記録し、指定オブジェクトに対する既存の代替主キー列が存在する場合は、それを削除します。

SET_PARAMETERプロシージャ

適用パラメータを指定した値に設定します。

SET_REPERROR_HANDLERプロシージャ

特定のエラーをそのエラー番号に基づいて処理する方法を指定します。

SET_SCHEMA_INSTANTIATION_SCNプロシージャ

指定したソース・データベース内の指定のスキーマに対して、およびオプションで、ソース・データベースのスキーマが所有する表に対して、指定したインスタンス化SCNを記録します。

SET_TABLE_INSTANTIATION_SCNプロシージャ

指定したソース・データベース内の指定表に対する指定インスタンス化SCNを記録します。

SET_UPDATE_CONFLICT_HANDLERプロシージャ

指定オブジェクトに対する更新競合ハンドラを追加、更新または削除します。

SET_VALUE_DEPENDENCYプロシージャ

値の依存性を設定または削除します。

START_APPLYプロシージャ

適用コンポーネントにメッセージの適用開始を指示します。

STOP_APPLYプロシージャ

適用コンポーネントを停止してメッセージの適用を中断し、適用が終了していないトランザクションをロールバックします。

ノート:

特に指定がないかぎり、すべてのプロシージャがコミットされます。ただし、GET_ERROR_MESSAGEファンクションはコミットされません。

20.4.1 ADD_STMT_HANDLERプロシージャ

このプロシージャは、特定のデータベース・オブジェクトに対して指定された操作の文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);

パラメータ

表20-2 ADD_STMT_HANDLERプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定したソース・オブジェクトの名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。指定するオブジェクトは、このプロシージャの実行時に存在している必要はありません。

NULLの場合は、エラーが発生します。

operation_name

操作名。次の操作名を指定できます。

  • INSERT

  • UPDATE

  • DELETE

NULLの場合は、エラーが発生します。

ノート: 文DMLハンドラはLOB操作には指定できません。

handler_name

文DMLハンドラの名前。

指定された文DMLハンドラが存在する場合は、statementパラメータの文が既存のハンドラに追加されます。既存の文DMLハンドラが、operation_nameパラメータおよびobject_nameパラメータそれぞれに設定されている、同じデータベース・オブジェクトに対する同じ操作のものであることを確認します。既存のハンドラが異なる操作またはデータベース・オブジェクトに対応する場合、ハンドラが起動されたときに適用エラーが発生します。

指定された文DMLハンドラが存在せず、NULL以外の文パラメータが指定された場合、このプロシージャは文DMLハンドラを作成します。

指定された文DMLハンドラが存在せず、statementパラメータが指定されないか、またはNULLである場合、エラーが発生します。

NULLの場合は、エラーが発生します。

statement

文DMLハンドラに追加するSQL文のテキスト。

NULLの場合は、エラーが発生します。

apply_name

文DMLハンドラを使用する適用コンポーネントの名前。

NULLを指定すると、データベース内のすべての適用コンポーネントに対する汎用ハンドラとして、文DMLハンドラが追加されます。

comment

文DMLハンドラのコメント。

NULLの場合、文DMLハンドラに対するコメントは記録されません。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

ADD_STMT_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。アウトバウンド・サーバーでは、すべての適用ハンドラが無視されます。

ADD_STMT_HANDLERプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.2 ALTER_APPLYプロシージャ

このプロシージャでは、適用コンポーネントを変更します。

構文

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);

パラメータ

表20-3 ALTER_APPLYプロシージャのパラメータ

パラメータ 説明

apply_name

変更する適用コンポーネントの名前。既存の適用コンポーネントの名前を指定する必要があります。所有者を指定しないでください。

rule_set_name

適用コンポーネントのポジティブ・ルール・セットの名前。ポジティブ・ルール・セットには、適用コンポーネントにメッセージの適用を指示するルールが含まれます。

適用コンポーネントに対してポジティブ・ルール・セットを使用する場合は、既存のルール・セットを[schema_name.]rule_set_nameの形式で指定する必要があります。たとえば、hrスキーマに含まれるjob_apply_rulesという名前のポジティブ・ルール・セットを指定するには、hr.job_apply_rulesと入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。

NULLを指定し、remove_rule_setパラメータをFALSEに設定すると、指定した適用コンポーネントに対する既存のすべてのポジティブ・ルール・セットが保持されます。NULLを指定し、remove_rule_setパラメータをTRUEに設定すると、指定した適用コンポーネントから既存のすべてのポジティブ・ルール・セットが削除されます。

remove_rule_set

TRUEに設定すると、指定した適用コンポーネントに対するポジティブ・ルール・セットが削除されます。適用コンポーネントのポジティブ・ルール・セットを削除し、適用コンポーネントにネガティブ・ルール・セットがない場合、適用コンポーネントは、キュー内のすべてのメッセージをデキューします。

適用コンポーネントのポジティブ・ルール・セットを削除し、ネガティブ・ルール・セットが適用コンポーネントに存在する場合は、そのネガティブ・ルール・セットによって廃棄されなかった該当キュー内のメッセージすべてが、適用コンポーネントによってデキューされます。

FALSEに設定すると、指定した適用コンポーネントに対するポジティブ・ルール・セットが保持されます。

rule_set_nameパラメータがNULL以外の場合、このパラメータはFALSEに設定してください。

message_handler

適用コンポーネントに対する、キュー内の非LCRメッセージを処理するユーザー定義プロシージャ。

メッセージ・ハンドラ・プロシージャの詳細は、「CREATE_APPLYプロシージャ」「使用上のノート」を参照してください。

remove_message_handler

TRUEに設定すると、指定した適用コンポーネントに対するメッセージ・ハンドラが削除されます。

FALSEに設定すると、指定した適用コンポーネントに対するメッセージ・ハンドラは保持されます。

message_handler パラメータがNULL以外の場合、このパラメータはFALSEに設定してください。

ddl_handler

適用コンポーネントに対する、キュー内のDDL論理変更レコード(DDL LCR)を処理するユーザー定義プロシージャ。

適用されたDDL LCRはすべて自動的にコミットします。したがって、DDLハンドラが、DDL LCRのEXECUTEメンバー・プロシージャをコールすると、コミットが自動的に実行されます。

DDLハンドラ・プロシージャの詳細は、「CREATE_APPLYプロシージャ」「使用上のノート」を参照してください。

remove_ddl_handler

TRUEに設定すると、指定した適用コンポーネントに対するDDLハンドラが削除されます。

FALSEに設定すると、指定した適用コンポーネントに対するDDLハンドラは保持されます。

ddl_handlerパラメータがNULL以外の場合、このパラメータはFALSEに設定してください。

apply_user

適用コンポーネントが、そのユーザーのセキュリティ・ドメイン内で適用コンポーネントのルール・セットを満たすメッセージをデキューし、データベース・オブジェクトにメッセージを直接適用し、カスタム・ルールベースの変換を実行して、適用ハンドラを実行するユーザーを指定します。NULLの場合、適用ユーザーは変更されません。

NULL以外の値を指定して適用ユーザーを変更する場合は、ALTER_APPLYプロシージャを起動するユーザーにDBAロールが付与されている必要があります。apply_userSYSに設定できるのは、SYSユーザーに限られています。

適用ユーザーを変更すると、このプロシージャは、適用コンポーネントで使用されるキューのデキュー権限を新しい適用ユーザーに付与します。また、そのユーザーをキューの保護キュー・ユーザーとして構成します。

適用ユーザーには、このプロシージャによって付与される権限の他に、次の権限も付与する必要があります。

  • 適用オブジェクトのDML変更とDDL変更を実行する際に必要な権限

  • 適用コンポーネントで使用されるルール・セットのEXECUTE権限

  • ルール・セットで使用されるすべてのルールベース変換ファンクションのEXECUTE権限

  • すべての適用ハンドラ・プロシージャのEXECUTE権限

これらの権限は適用ユーザーに直接付与するか、またはロールによって付与できます。

また、適用ユーザーには、適用コンポーネントによって実行されるサブプログラムで起動されるすべてのパッケージ(オラクル社が提供するパッケージを含む)のEXECUTE権限が付与されている必要があります。これらの権限は、適用ユーザーに直接付与する必要があります。ロールを通して付与することはできません。

デフォルトでは、このパラメータは、このパッケージのCREATE_APPLYプロシージャまたはDBMS_STREAMS_ADMパッケージのプロシージャを実行して適用コンポーネントを作成したユーザーに設定されます。

ノート: 適用コンポーネントの適用ユーザーがDROP USER. . . CASCADEを使用して削除されると、適用コンポーネントも自動的に削除されます。

apply_tag

指定した適用コンポーネントによって生成されたREDOエントリに追加されるバイナリ・タグ。タグは、LCRの追跡に使用できるバイナリ値です。

タグは、適用コンポーネントを実行しているデータベースの取得プロセスが、適用コンポーネントによって加えられた変更を取得した場合にのみ関係します。この場合、取得した変更に、このパラメータで指定されたタグが含まれます。

NULL(デフォルト)の場合、適用コンポーネントに対する適用タグは変更されません。

次は、16進値17のタグの例です。

HEXTORAW('17')

関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

remove_apply_tag

TRUEに設定すると、指定した適用コンポーネントに対する適用タグにNULLが設定され、適用コンポーネントが生成したREDOエントリにNULLタグが付加されます。

FALSEに設定すると、指定した適用コンポーネントに対する適用タグは保持されます。

apply_tagパラメータがNULL以外の場合、このパラメータはFALSEに設定してください。

precommit_handler

適用コンポーネントのキュー内の内部コミット・ディレクティブを適用コンポーネントによって処理される前に受け取ることができるユーザー定義のプロシージャ。通常は、適用コンポーネントによって処理されるトランザクションのコミット情報を監査するために、プリコミット・ハンドラを使用します。

内部コミット・ディレクティブは、次のようにエンキューされます。

  • 取得プロセスで行LCRが取得されると、その取得プロセスによって、行LCRが含まれているトランザクションのコミット・ディレクティブがエンキューされます。

  • ユーザーまたはアプリケーションがメッセージをエンキューしてCOMMIT文を発行すると、コミット・ディレクティブが自動的にエンキューされます。

取得された行LCRの場合、コミット・ディレクティブにソース・データベースからのトランザクションのコミットSCNが含まれます。ユーザー・メッセージの場合、コミットSCNは適用コンポーネントによって生成されます。

プリコミット・ハンドラ・プロシージャでは、次の制限に従ってください。

  • コミットする作業を自律型トランザクションにする。

  • ロールバックには、プロシージャ内に作成した名前付きセーブポイントを指定する。

プリコミット・ハンドラで例外が発生した場合は、適用トランザクション全体がロールバックされ、トランザクション内のすべてのメッセージがエラー・キューに移動されます。

プリコミット・ハンドラ・プロシージャの詳細は、「CREATE_APPLYプロシージャ」「使用上のノート」を参照してください。

remove_precommit_handler

TRUEに設定すると、指定した適用コンポーネントに対するプリコミット・ハンドラが削除されます。

FALSEに設定すると、指定した適用コンポーネントに対するプリコミット・ハンドラは保持されます。

precommit_handlerパラメータがNULL以外の場合、このパラメータはFALSEに設定してください。

negative_rule_set_name

適用コンポーネントのネガティブ・ルール・セットの名前。ネガティブ・ルール・セットには、適用コンポーネントにメッセージの廃棄を指示するルールが含まれます。

適用コンポーネントに対してネガティブ・ルール・セットを使用する場合は、既存のルール・セットを[schema_name.]rule_set_nameの形式で指定する必要があります。たとえば、hrスキーマに含まれるneg_apply_rulesという名前のネガティブ・ルール・セットを指定するには、hr.neg_apply_rulesと入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。

NULLを指定し、remove_negative_rule_setパラメータをFALSEに設定すると、既存のすべてのネガティブ・ルール・セットが保持されます。NULLを指定し、remove_negative_rule_setパラメータをTRUEに設定すると、既存のすべてのネガティブ・ルール・セットが削除されます。

適用コンポーネントに対してポジティブ・ルール・セットとネガティブ・ルール・セットの両方を指定した場合は、ネガティブ・ルール・セットが常に最初に評価されます。

remove_negative_rule_set

TRUEに設定すると、指定した適用コンポーネントに対するネガティブ・ルール・セットが削除されます。適用コンポーネントのネガティブ・ルール・セットを削除し、適用コンポーネントにポジティブ・ルール・セットがない場合、適用コンポーネントは、キュー内のすべてのメッセージをデキューします。

適用コンポーネントのネガティブ・ルール・セットを削除し、適用コンポーネントのポジティブ・ルール・セットが存在する場合、適用コンポーネントは、ポジティブ・ルール・セットによって廃棄されないキュー内のすべてのメッセージをデキューします。

FALSEに設定すると、指定した適用コンポーネントに対するネガティブ・ルール・セットが保持されます。

negative_rule_set_nameパラメータがNULL以外の場合、このパラメータはFALSEに設定してください。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

適用コンポーネントの自動再開

適用コンポーネントは、次に示すALTER_APPLYプロシージャのパラメータ値を1つ以上変更すると、自動的に停止および再開します。

  • message_handler

  • ddl_handler

  • apply_user

  • apply_tag

  • precommit_handler

ALTER_APPLYプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャおよびXStreamアウトバウンド・サーバーには、次の使用上のノートが適用されます。

  • apply_userパラメータで、アウトバウンド・サーバーの接続ユーザーを変更できます。

  • アウトバウンド・サーバーの適用ハンドラを指定することはできません。アウトバウンド・サーバーでは、message_handlerddl_handlerおよびprecommit_handlerパラメータの設定は無視されます。

    かわりに、クライアント・アプリケーションでは、必要に応じてLCRのカスタム処理を実行できます。

  • アウトバウンド・サーバーでは、処理対象の変更に対する適用タグは設定できません。アウトバウンド・サーバーでは、apply_tagパラメータの設定は無視されます。

ALTER_APPLYプロシージャおよびXStreamインバウンド・サーバー

インバウンド・サーバーでは、適用ハンドラを使用してDMLとDDL LCRのみを処理できます。そのため、インバウンド・サーバーでは、message_handlerパラメータに指定されたメッセージ・ハンドラは無視されます。

20.4.3 COMPARE_OLD_VALUESプロシージャ

このプロシージャは、適用時に、行論理変更レコード(行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);

パラメータ

表20-4 COMPARE_OLD_VALUESプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定したソース表の名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

column_list

表内の列名のカンマ区切りリスト。エントリ間に空白を挿入しないでください。

すべての非キー列を指定する場合は、この値を*にします。

column_table

表内の列名が含まれているDBMS_UTILITY.LNAME_ARRAYタイプのPL/SQL連想配列。最初の列名は位置1、2番目は位置2、以降同様に設定されている必要があります。表の最後をNULLにする必要はありません。

operation

操作名。次の操作名を指定できます。

  • UPDATE操作の場合はUPDATE

  • DELETE操作の場合はDELETE

  • UPDATE操作とDELETE操作の両方の場合は*

compare

compareTRUEの場合、指定した列の元の値は適用時に比較されます。

compareFALSEの場合、指定した列の元の値は適用時に比較されません。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

競合の検出

デフォルトでは、適用コンポーネントは行LCRの元の列値を使用して競合を検出します。元の列値を比較しないようにすると、特定の表の競合を検出しないようにできます。たとえば、適用時に列セットの元の値を比較しない場合、COMPARE_OLD_VALUESプロシージャを使用してcolumn_listまたはcolumn_tableパラメータに列セットを指定し、compareパラメータをFALSEに設定します。

また、compare_key_only適用コンポーネント・パラメータをYに設定すると、自動競合検出が無効になり、適用コンポーネントは、主キーおよび一意キーの列のみを使用して行LCRに対応する表の行を識別します。compare_key_only適用コンポーネント・パラメータをNに設定すると、自動競合検出が有効になり、適用コンポーネントは、行LCRのすべての元の値を使用して行LCRに対応する表の行を識別します。

ノート:

  • 適用コンポーネントは、行LCRに非キー列の元の値が存在し、compare_key_only適用コンポーネント・パラメータがNに設定されている場合、非キー列の元の値を比較します。

  • column_listまたはcolumn_tableにキー列が指定されていてcompareパラメータがFALSEに設定されている場合は、エラーが発生します。

参照:

compare_key_only適用コンポーネント・パラメータの詳細は、「SET_PARAMETERプロシージャ」を参照してください。

COMPARE_OLD_VALUESプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

COMPARE_OLD_VALUESプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.4 CREATE_APPLYプロシージャ

このプロシージャでは、適用コンポーネントを作成します。

構文

  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);

パラメータ

表20-5 CREATE_APPLYプロシージャのパラメータ

パラメータ 説明

queue_name

適用コンポーネントがメッセージをデキューするキュー名。既存のキューを[schema_name.]queue_nameの形式で指定する必要があります。たとえば、hrスキーマ内のstreams_queueという名前のキューを指定するには、hr.streams_queueと入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

ノート: queue_nameの設定は、適用コンポーネントの作成後には変更できません。

apply_name

作成する適用コンポーネントの名前。NULL指定は許可されていません。所有者を指定しないでください。

また、既存の適用コンポーネント名やメッセージ・クライアント名と同じ名前を指定しないでください。

ノート: apply_nameの設定は、適用コンポーネントの作成後には変更できません。

rule_set_name

適用コンポーネントのポジティブ・ルール・セットの名前。ポジティブ・ルール・セットには、適用コンポーネントにメッセージの適用を指示するルールが含まれます。

適用コンポーネントに対してポジティブ・ルール・セットを使用する場合は、既存のルール・セットを[schema_name.]rule_set_nameの形式で指定する必要があります。たとえば、hrスキーマに含まれるjob_apply_rulesという名前のポジティブ・ルール・セットを指定するには、hr.job_apply_rulesと入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLを指定し、ネガティブ・ルール・セットを指定しない場合、適用コンポーネントはapply_capturedパラメータの設定内容に応じて、永続キュー内に存在する、すべての取得済メッセージまたはすべてのメッセージを適用します。

指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。

message_handler

適用コンポーネントに対する、キュー内の非LCRメッセージを処理するユーザー定義プロシージャ。

メッセージ・ハンドラ・プロシージャの詳細は、「使用上のノート」を参照してください。

ddl_handler

適用コンポーネントに対する、キュー内のDDL論理変更レコード(DDL LCR)を処理するユーザー定義プロシージャ。

適用されたDDL LCRはすべて自動的にコミットします。したがって、DDLハンドラが、DDL LCRのEXECUTEメンバー・プロシージャをコールすると、コミットが自動的に実行されます。

DDLハンドラ・プロシージャの詳細は、「使用上のノート」を参照してください。

apply_user

適用コンポーネント・ルール・セットを満たすDML変更とDDL変更をすべて適用し、ユーザー定義の適用ハンドラを実行するユーザー。NULLの場合は、CREATE_APPLYプロシージャの実行ユーザーが使用されます。

適用ユーザーとは、そのユーザーのセキュリティ・ドメイン内で、適用コンポーネントが、適用コンポーネントのルール・セットを満たすメッセージをデキューし、データベース・オブジェクトにメッセージを直接適用し、適用コンポーネント・ルールに対して構成されているカスタム・ルールベースの変換を実行し、適用コンポーネントに対して構成されている適用ハンドラを実行するユーザーのことです。このユーザーには、変更を適用できる権限が必要です。このプロシージャでは、適用コンポーネントで使用されるキューのデキュー権限を適用ユーザーに付与し、そのユーザーをキューの保護キュー・ユーザーとして構成します。

適用ユーザーには、このプロシージャによって付与される権限の他に、次の権限も付与する必要があります。

  • 適用オブジェクトのDML変更とDDL変更を実行する際に必要な権限

  • 適用コンポーネントで使用されるルール・セットのEXECUTE権限

  • ルール・セットで使用されるすべてのルールベース変換ファンクションのEXECUTE権限

  • すべての適用ハンドラ・プロシージャのEXECUTE権限

これらの権限は適用ユーザーに直接付与するか、またはロールによって付与できます。

また、適用ユーザーには、適用コンポーネントによって実行されるサブプログラムで起動されるすべてのパッケージ(オラクル社が提供するパッケージを含む)のEXECUTE権限が付与されている必要があります。これらの権限は、適用ユーザーに直接付与する必要があります。ロールを通して付与することはできません。

DBMS_STREAMS_AUTHパッケージとDBMS_XSTREAM_AUTHパッケージを使用して、Oracle StreamsおよびXStreamの各構成の管理権限を付与したり、取り消すことができます。これらのパッケージでは、適用オブジェクトに対するDML変更またはDDL変更を実行するために必要な権限が構成されません。

ノート: 適用コンポーネントの適用ユーザーがDROP USER . . . CASCADEを使用して削除されると、適用コンポーネントも自動的に削除されます。

このパラメータの詳細は、「使用上のノート」を参照してください。

apply_database_link

適用コンポーネントがメッセージを適用するデータベース。このパラメータは、Oracleからオラクル以外のシステム(例: Sybase)に変更を適用するときに適用コンポーネントで使用されます。ローカル・データベースでメッセージを適用するように指定するには、このパラメータをNULLに設定します。

ノート: apply_database_linkの設定は、適用コンポーネントの作成後には変更できません。

apply_tag

指定した適用コンポーネントによって生成されたREDOエントリに追加されるバイナリ・タグ。タグは、LCRの追跡に使用できるバイナリ値です。

タグは、適用コンポーネントを実行しているデータベースの取得プロセスが、適用コンポーネントによって加えられた変更を取得した場合にのみ関係します。この場合、取得した変更に、このパラメータで指定されたタグが含まれます。

デフォルトでは、適用コンポーネントに対するタグは、'00'(ダブル・ゼロ)に相当する16進値です。

次は、16進値17のタグの例です。

HEXTORAW('17')

NULLに設定すると、適用コンポーネントはNULLタグを付加してREDOエントリを生成します。

関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

apply_captured

TRUEまたはFALSE

TRUEに設定すると、適用コンポーネントはキュー内に存在する取得済LCRのみを適用します。取得済LCRは、Oracle Streams取得プロセスで取得されたLCRです。

FALSEに設定すると、適用コンポーネントは永続キュー内に存在するメッセージのみを適用します。これらは、Oracle Streams取得プロセスによって取得されなかった永続LCRやユーザー・メッセージなどのメッセージです。

永続キュー内に存在する、取得されたLCRとメッセージの両方を適用するには、2つ以上の適用コンポーネントを作成する必要があります。

ノート: apply_capturedの設定は、適用コンポーネントの作成後には変更できません。

関連項目: メッセージを適用コンポーネントで処理する方法の詳細は、『Oracle Streams概要および管理』を参照してください。

precommit_handler

適用コンポーネントのキュー内の内部コミット・ディレクティブを適用コンポーネントによって処理される前に受け取ることができるユーザー定義のプロシージャ。通常は、適用コンポーネントによって処理されるトランザクションのコミット情報を監査するために、プリコミット・ハンドラを使用します。

内部コミット・ディレクティブは、次のようにエンキューされます。

  • 取得プロセスで行LCRが取得されると、その取得プロセスによって、行LCRが含まれているトランザクションのコミット・ディレクティブがエンキューされます。

  • 同期取得で行LCRが取得されると、同期取得でエンキューされた永続LCRはメッセージ・グループに編成されます。同期取得は、トランザクション内の各永続LCRにトランザクション識別子を記録します。

  • ユーザーまたはアプリケーションがメッセージをエンキューしてCOMMIT文を発行すると、コミット・ディレクティブが自動的にエンキューされます。

取得プロセスまたは同期取得によって取得された行LCRの場合、コミット・ディレクティブにソース・データベースからのトランザクションのコミットSCNが含まれます。ユーザーまたはアプリケーションによってエンキューされたメッセージの場合、コミットSCNは適用コンポーネントによって生成されます。

プリコミット・ハンドラ・プロシージャでは、次の制限に従ってください。

  • コミットする作業を自律型トランザクションにする。

  • ロールバックには、プロシージャ内に作成した名前付きセーブポイントを指定する。

プリコミット・ハンドラで例外が発生した場合は、適用トランザクション全体がロールバックされ、トランザクション内のすべてのメッセージがエラー・キューに移動されます。

プリコミット・ハンドラ・プロシージャの詳細は、「使用上のノート」を参照してください。

negative_rule_set_name

適用コンポーネントのネガティブ・ルール・セットの名前。ネガティブ・ルール・セットには、適用コンポーネントにメッセージの廃棄を指示するルールが含まれます。

適用コンポーネントに対してネガティブ・ルール・セットを使用する場合は、既存のルール・セットを[schema_name.]rule_set_nameの形式で指定する必要があります。たとえば、hrスキーマに含まれるneg_apply_rulesという名前のネガティブ・ルール・セットを指定するには、hr.neg_apply_rulesと入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLを指定し、ポジティブ・ルール・セットを指定しない場合、適用コンポーネントはapply_capturedパラメータの設定内容に応じて、永続キュー内に存在する、すべての取得済LCRまたはすべてのメッセージを適用します。

指定したルール・セットが存在しない場合は、エラーが戻されます。ルール・セットを作成し、そのルール・セットにルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。

適用コンポーネントに対してポジティブ・ルール・セットとネガティブ・ルール・セットの両方を指定した場合は、ネガティブ・ルール・セットが常に最初に評価されます。

source_database

適用コンポーネントによって適用される変更のソース・データベースのグローバル名。ソース・データベースは、変更が発生したデータベースです。取得メッセージを適用する場合、適用コンポーネントによって適用できるのは、1つのソース・データベースでの1つの取得プロセスによるメッセージのみです。

NULLの場合、適用コンポーネントが受け取る最初のLCRのソース・データベース名がソース・データベースに使用されます。

ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名がNETの場合にDBS1を指定すると、自動的にDBS1.NETが指定されます。

適用コンポーネント・ルール・セットのルールによって、適用コンポーネントがデキューするメッセージが決まります。適用コンポーネントのソース・データベースとは異なるソース・データベースで、適用コンポーネントによるLCRのデキューを行うと、エラーが発生します。適用コンポーネントのソース・データベースを特定する場合は、DBA_APPLY_PROGRESSデータ・ディクショナリ・ビューへの問合せを行います。

使用上のノート

次の項では、このプロシージャの使用上のノートについて説明します。

DBAロール要件

このプロシージャを起動するユーザーがapply_userパラメータに指定されたユーザーと異なる場合、起動するユーザーにDBAロールが付与されている必要があります。このプロシージャを起動するユーザーがapply_userパラメータに指定されたユーザーと同じである場合、起動するユーザーにDBAロールは必要ありません。apply_userSYSに設定できるのは、SYSユーザーに限られています。

ハンドラ・プロシージャの名前

message_handlerddl_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にカプセル化したものです。

参照:

DDL LCRの詳細は、「論理変更レコードのタイプ」を参照してください。

プリコミット・ハンドラ・プロシージャ

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パラメータに指定されたメッセージ・ハンドラは無視されます。

20.4.5 CREATE_OBJECT_DEPENDENCYプロシージャ

このプロシージャでは、オブジェクトの依存性を作成します。オブジェクトの依存性とは、接続先データベースにある2つのオブジェクト間の親子関係を規定する仮想的な依存性の定義です。

適用コンポーネントでは、親オブジェクトが含まれている、コミット・システム変更番号(コミットSCN)が小さいすべてのトランザクションがコミットされた後に、子オブジェクトが含まれているトランザクションが実行されるようにスケジュールされます。適用コンポーネントでは、依存性の検出に、論理変更レコード(LCR)内のオブジェクトのオブジェクト識別子が使用されます。依存性の検出に、LCRの列値は使用されません。

ノート:

このプロシージャのいずれかのパラメータに対してNULLを指定すると、エラーが発生します。

構文

DBMS_APPLY_ADM.CREATE_OBJECT_DEPENDENCY(
   object_name         IN  VARCHAR2,
   parent_object_name  IN  VARCHAR2);

パラメータ

表20-6 CREATE_OBJECT_DEPENDENCYプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定した子データベース・オブジェクトの名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

parent_object_name

[schema_name.]object_nameの形式で指定した親データベース・オブジェクトの名前。たとえば、hr.departmentsのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

CREATE_OBJECT_DEPENDENCYプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

CREATE_OBJECT_DEPENDENCYプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.6 DELETE_ALL_ERRORSプロシージャ

このプロシージャでは、指定した適用コンポーネントに対するすべてのエラー・トランザクションを削除します。

構文

DBMS_APPLY_ADM.DELETE_ALL_ERRORS(
   apply_name  IN  VARCHAR2 DEFAULT NULL);

パラメータ

表20-7 DELETE_ALL_ERRORSプロシージャのパラメータ

パラメータ 説明

apply_name

トランザクション処理時にエラーが発生した適用コンポーネントの名前。所有者を指定しないでください。

NULLの場合は、すべての適用コンポーネントに対するすべてのエラー・トランザクションが削除されます。

DELETE_ALL_ERRORSプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

DELETE_ALL_ERRORSプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.7 DELETE_ERRORプロシージャ

このプロシージャでは、指定したエラー・トランザクションを削除します。

構文

DBMS_APPLY_ADM.DELETE_ERROR(
   local_transaction_id  IN  VARCHAR2);

パラメータ

表20-8 DELETE_ERRORプロシージャのパラメータ

パラメータ 説明

local_transaction_id

削除するエラー・トランザクションの識別番号。指定したトランザクションがエラー・キューに存在しない場合は、エラーが発生します。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

DELETE_ERRORプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

DELETE_ERRORプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.8 DROP_APPLYプロシージャ

このプロシージャでは、適用コンポーネントを削除します。

構文

  DBMS_APPLY_ADM.DROP_APPLY(
     apply_name             IN  VARCHAR2,
     drop_unused_rule_sets  IN  BOOLEAN  DEFAULT FALSE);

パラメータ

表20-9 DROP_APPLYプロシージャのパラメータ

パラメータ 説明

apply_name

削除する適用コンポーネントの名前。既存の適用コンポーネント名を指定する必要があります。所有者を指定しないでください。

drop_unused_rule_sets

TRUEに設定すると、指定した適用コンポーネントで使用されるポジティブ・ルール・セットおよびネガティブ・ルール・セットが、他のOracle StreamsまたはXStreamコンポーネントによって使用されない場合に削除されます。これらのコンポーネントには、取得プロセス、伝播、適用プロセス、インバウンド・サーバー、メッセージ・クライアントがあります。このプロシージャによってルール・セットが削除される場合は、そのルール・セット内のルールのうち、別のルール・セット内に存在しないルールも同時に削除されます。

FALSEに設定すると、指定した適用コンポーネントで使用されるルール・セットは削除されず、ルール・セットにルールが保持されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

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プロシージャが実行されます。そのため、インバウンド・サーバーのキューも削除される可能性があります。

20.4.9 DROP_OBJECT_DEPENDENCYプロシージャ

このプロシージャでは、オブジェクトの依存性を削除します。オブジェクトの依存性とは、接続先データベースにある2つのオブジェクト間の親子関係を規定する仮想的な依存性の定義です。

ノート:

  • 指定したデータベース・オブジェクトに、オブジェクトの依存性が存在しない場合は、エラーが発生します。

  • このプロシージャのいずれかのパラメータに対してNULLを指定すると、エラーが発生します。

構文

  DBMS_APPLY_ADM.DROP_OBJECT_DEPENDENCY(
     object_name         IN  VARCHAR2,
     parent_object_name  IN  VARCHAR2);

パラメータ

表20-10 DROP_OBJECT_DEPENDENCYプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定した子データベース・オブジェクトの名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

parent_object_name

[schema_name.]object_nameの形式で指定した親データベース・オブジェクトの名前。たとえば、hr.departmentsのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

DROP_OBJECT_DEPENDENCYプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

DROP_OBJECT_DEPENDENCYプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.10 EXECUTE_ALL_ERRORSプロシージャ

このプロシージャでは、指定した適用コンポーネントのエラー・キュー内のエラー・トランザクションを再実行します。

トランザクションは、コミットSCN順に再実行されます。エラーが発生すると、エラーの再実行を停止します。

参照:

エラー・キューの詳細は、『Oracle Streams概要および管理』を参照してください。

構文

DBMS_APPLY_ADM.EXECUTE_ALL_ERRORS(
   apply_name       IN  VARCHAR2  DEFAULT NULL,
   execute_as_user  IN  BOOLEAN   DEFAULT FALSE);

パラメータ

表20-11 EXECUTE_ALL_ERRORSプロシージャのパラメータ

パラメータ 説明

apply_name

トランザクション処理時にエラーが発生した適用コンポーネントの名前。所有者を指定しないでください。

NULLの場合は、すべての適用コンポーネントに対するすべてのエラー・トランザクションが再実行されます。

execute_as_user

TRUEに設定すると、現行のユーザーのセキュリティ・コンテキスト内でトランザクションが再実行されます。

FALSEに設定すると、トランザクションの元の受信者のセキュリティ・コンテキスト内で各トランザクションが再実行されます。元の受信者とは、エラー発生時にトランザクションを処理していたユーザーです。DBA_APPLY_ERRORデータ・ディクショナリ・ビューに、各エラー・トランザクションに対する元の受信者がリストされます。

トランザクションを実行するユーザーには、適用オブジェクトに対してDML変更とDDL変更を実行する権限、および適用ハンドラを実行する権限が必要です。また、適用コンポーネントで使用されるキューに対するデキュー権限も必要です。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

EXECUTE_ALL_ERRORSプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーでは使用できません。

EXECUTE_ALL_ERRORSプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.11 EXECUTE_ERRORプロシージャ

このプロシージャでは、エラー・キュー内の指定したエラー・トランザクションを再実行します。

参照:

エラー・キューの詳細は、『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);

パラメータ

表20-12 EXECUTE_ERRORプロシージャのパラメータ

パラメータ 説明

local_transaction_id

実行するエラー・トランザクションの識別番号。指定したトランザクションがエラー・キューに存在しない場合は、エラーが発生します。

execute_as_user

TRUEに設定すると、現行のユーザーのセキュリティ・コンテキスト内でトランザクションが再実行されます。

FALSEに設定すると、トランザクションの元の受信者のセキュリティ・コンテキスト内でトランザクションが再実行されます。元の受信者とは、エラー発生時にトランザクションを処理していたユーザーです。DBA_APPLY_ERRORデータ・ディクショナリ・ビューに、各エラー・トランザクションに対する元の受信者がリストされます。

トランザクションを実行するユーザーには、適用オブジェクトに対してDML変更とDDL変更を実行する権限、および適用ハンドラを実行する権限が必要です。また、適用コンポーネントで使用されるキューに対するデキュー権限も必要です。

user_procedure

エラー・トランザクションを正しく実行できるように変更するユーザー定義プロシージャ。

NULLを指定すると、ユーザー・プロシージャを実行せずに、エラー・トランザクションが実行されます。

関連項目: ユーザー・プロシージャの詳細は、"「使用上のノート」を参照してください。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

ユーザー・プロシージャ

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_processingTRUEの場合にユーザー・プロシージャで処理され、適用コンポーネントで使用される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権限が必要です。

ノート:

COMMITROLLBACKなどのトランザクション・ディレクティブが含まれているLCRは、ユーザー・プロシージャに渡されません。

EXECUTE_ERRORプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーでは使用できません。

EXECUTE_ERRORプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.12 GET_ERROR_MESSAGEファンクション

このファンクションでは、指定したメッセージ番号とトランザクション識別子に対するメッセージ・ペイロードをエラー・キューから返します。メッセージは、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;

パラメータ

表20-13 GET_ERROR_MESSAGEファンクションのパラメータ

パラメータ 説明

message_number

メッセージの識別番号。この番号によって、トランザクション内のメッセージの位置が識別されます。DBA_APPLY_ERRORデータ・ディクショナリ・ビューを問い合せて、各適用エラーのメッセージ番号を表示します。

local_transaction_id

メッセージを返すエラー・トランザクションの識別子。

destination_queue_name

メッセージをエンキューするキュー名を指定します。メッセージをキューにエンキューしない場合は、NULLを指定します。

execute

メッセージを実行する場合は、TRUEを指定します。

メッセージを実行しない場合は、FALSEを指定します。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

GET_ERROR_MESSAGEプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーは、エラー・キューにエラー・トランザクションをエンキューしません。このプロシージャは、XStreamアウトバウンド・サーバーでは使用できません。

GET_ERROR_MESSAGEプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.13 HANDLE_COLLISIONS

このプロシージャは、適用プロセスと表の基本の競合解消を有効または無効にします。

構文

DBMS_APPLY_ADM.HANDLE_COLLISIONS(
   apply_name    IN  VARCHAR2,
   enable        IN  BOOLEAN,
   object        IN  VARCHAR2,
   source_object IN  VARCHAR2 DEFAULT NULL);

パラメータ

表20-14 HANDLE_COLLISIONSプロシージャのパラメータ

パラメータ 説明

apply_name

適用プロセスの名前。

enable

TRUEに設定すると、次の競合解消方法が使用されます。

  • 表に存在する行について競合が検出された場合、行LCRのデータで表内のデータが上書きされます。

  • 表に存在しない行について競合が検出された場合、行LCRのデータは無視されます。

FALSEに設定すると、指定した適用プロセスとオブジェクトについて、このプロシージャにより設定された競合解消は無効になります。

NULLに設定すると、指定した適用プロセスとオブジェクトについて、競合処理の明示的な表レベルの設定が削除されます。

object

[schema_name.]table_nameの形式で指定した、設定の変更の対象となるスキーマおよびターゲット表の名前。

たとえば、ユーザーhrが所有する表employeesの設定を変更する場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

source_object

[schema_name.]table_nameの形式で指定した、変更が発生したソース表のスキーマおよびオブジェクト名。

たとえば、ユーザーhrが所有する表employeesで変更が発生した場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

20.4.14 REMOVE_STMT_HANDLER

このプロシージャは、特定のデータベース・オブジェクトに対して指定された操作の文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);

パラメータ

表20-15 REMOVE_STMT_HANDLERプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定したソース・オブジェクトの名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。指定するオブジェクトは、このプロシージャの実行時に存在している必要はありません。

NULLの場合は、エラーが発生します。

operation_name

操作名。次の操作名を指定できます。

  • INSERT

  • UPDATE

  • DELETE

NULLの場合は、エラーが発生します。

handler_name

文DMLハンドラの名前。

NULLの場合は、エラーが発生します。

apply_name

文DMLハンドラを使用する適用コンポーネントの名前。

NULLを指定すると、データベース内のすべての適用コンポーネントから文DMLハンドラが削除されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

REMOVE_STMT_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーでは、すべての適用ハンドラが無視されます。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

REMOVE_STMT_HANDLERプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.15 SET_CHANGE_HANDLERプロシージャ

このプロシージャは、特定のデータベース・オブジェクトに対して指定された操作の変更を追跡する変更ハンドラを、単一の適用コンポーネントで設定または設定解除します。

変更ハンドラは、表の変更を追跡する特別なタイプの文DMLハンドラであり、DBMS_STREAMS_ADM.MAINTAIN_CHANGE_TABLEプロシージャまたはこのSET_CHANGE_HANDLERプロシージャのいずれかによって作成されました。変更ハンドラに関する情報は、ALL_APPLY_CHANGE_HANDLERSおよびDBA_APPLY_CHANGE_HANDLERSビューに格納されています。

このプロシージャは、プロシージャのパラメータで指定された値に基づいて変更ハンドラに追加される文を自動的に生成します。このプロシージャは、データベースの変更を追跡する構成が存在する場合のみ実行してください。

ノート:

表の変更を追跡する環境を構成するには、MAINTAIN_CHANGE_TABLEプロシージャを使用します。

構文

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);

パラメータ

表20-16 SET_CHANGE_HANDLERプロシージャのパラメータ

パラメータ 説明

change_table_name

ソース・テーブルの変更を記録する表。

表は、[schema_name.]table_nameという形式で指定します。たとえば、hr.jobs_change_tableとなります。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLの場合は、エラーが発生します。

source_table_name

変更が記録されるソース・データベースの表。

表は、[schema_name.]table_nameという形式で指定します。たとえば、hr.jobsとなります。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLの場合は、エラーが発生します。

capture_values

ソース・テーブルで更新操作が実行されるときにチェンジ・テーブルに記録する値を指定します。

  • old: ソース・テーブルで更新された列の元の値を記録します。

  • new: ソース・テーブルで更新された列の新しい値を記録します。

  • *: ソース・テーブルで更新された列の元の値と新しい値の両方を記録します。

NULLの場合は、エラーが発生します。

ノート: 挿入操作では、新しい列値のみが取得されます。削除操作では、古い列値のみが取得されます。

apply_name

チェンジ・テーブルに変更を適用する適用コンポーネントの名前。所有者を指定しないでください。

NULLの場合は、エラーが発生します。

operation_name

操作名。次の操作名を指定できます。

  • INSERT

  • UPDATE

  • DELETE

NULLの場合は、エラーが発生します。

ノート: 変更ハンドラはLOB操作には指定できません。

change_handler_name

変更ハンドラの名前。

指定された変更ハンドラが存在する場合は、文が既存のハンドラに追加されます。既存の変更ハンドラが、operation_nameパラメータおよびsource_table_nameパラメータそれぞれに対する設定と同じ表の同じ操作に対応していることを確認します。既存のハンドラが異なる操作または表に対応する場合、ハンドラが起動されたときに適用エラーが発生します。

NULL以外が指定され、指定された変更ハンドラが存在しない場合、このプロシージャは変更ハンドラを作成します。

NULLが指定され、変更ハンドラが、operation_nameパラメータおよびsource_table_nameパラメータそれぞれに対する設定と同じ表の同じ操作に対して存在している場合、既存の変更ハンドラは削除されます。

NULLが指定され、指定された変更ハンドラが存在しない場合は、エラーが発生します。

関連項目: このパラメータの詳細は、「使用上のノート」を参照してください。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

既存の変更ハンドラのチェック

特定のソース・テーブルに対する特定の操作の既存の変更ハンドラをチェックするには、次の問合せを実行します。

 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は新しいハンドラに対して指定される操作で、INSERTUPDATEまたはDELETEのいずれかになります。

  • source_table_ownerは、ソース・テーブルの所有者です。

  • source_table_nameは、ソース・テーブルの名前です。

  • change_table_ownerは、チェンジ・テーブルの所有者です。

  • change_table_ownerは、チェンジ・テーブルの所有者です。

SET_CHANGE_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーでは、すべての適用ハンドラが無視されます。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_CHANGE_HANDLERプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.16 SET_DML_CONFLICT_HANDLERプロシージャ

このプロシージャは、指定したオブジェクトのINSERTUPDATEまたはDELETE競合用に事前作成されたDML競合ハンドラを追加、変更または削除します。

このプロシージャはオーバーロードされています。column_listパラメータとcolumn_tableパラメータは、同時には指定できません。

構文

DBMS_APPLY_ADM.SET_DML_CONFLICT_HANDLER(
  apply_name             IN  VARCHAR2,
  conflict_handler_name  IN  VARCHAR2,
  object                 IN  VARCHAR2  DEFAULT NULL,
  operation_name         IN  VARCHAR2  DEFAULT NULL,
  conflict_type          IN  VARCHAR2  DEFAULT NULL,
  method_name            IN  VARCHAR2  DEFAULT NULL,
  column_list            IN  VARCHAR2  DEFAULT NULL,
  resolution_column      IN  VARCHAR2  DEFAULT NULL,  
  source_object          IN  VARCHAR2  DEFAULT NULL);
DBMS_APPLY_ADM.SET_DML_CONFLICT_HANDLER(
  apply_name             IN  VARCHAR2,
  conflict_handler_name  IN  VARCHAR2,
  object                 IN  VARCHAR2  DEFAULT NULL,
  operation_name         IN  VARCHAR2  DEFAULT NULL,
  conflict_type          IN  VARCHAR2  DEFAULT NULL,
  method_name            IN  VARCHAR2  DEFAULT NULL,
  column_table           IN  DBMS_UTILITY.LNAME_ARRAY,
  resolution_column      IN  VARCHAR2  DEFAULT NULL,
  source_object          IN  VARCHAR2  DEFAULT NULL);

パラメータ

表20-17 SET_DML_CONFLICT_HANDLERプロシージャのパラメータ

パラメータ 説明

apply_name

適用プロセスの名前。

conflict_handler_name

競合ハンドラの名前。

object

[schema name.]table nameの形式で指定した、競合ハンドラが追加、変更または削除されるスキーマおよびターゲット表の名前。

たとえば、ユーザーhrが所有する表employeesに更新競合ハンドラを追加する場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

operation_name

操作名。次の操作名を指定できます。

  • INSERT

  • UPDATE

  • DELETE

同じ表に対する様々な操作に競合ハンドラを設定するには、操作ごとに1回コールする必要があります。

conflict_type

作成する更新競合ハンドラのタイプ。

事前作成されたハンドラの1つを指定できます。このハンドラは、行に対してソース・データベースの列リストを適用するかどうか、または接続先データベースの行の値を保持するかどうかを決定します。

  • ROW_EXISTS: 挿入または更新について、同じ主キーを持つ行がデータベースにすでに存在します。

  • ROW_MISSING: 更新または削除について、同じ主キーを持つ行が見つかりません。

method_name

作成する更新競合ハンドラのタイプ。

事前作成されたハンドラの1つを指定できます。このハンドラは、行に対してソース・データベースの列リストを適用するかどうか、または接続先データベースの行の値を保持するかどうかを決定します。

  • DELTA: 競合タイプがROW_EXISTSでLCRが更新の場合、LCRの列の古い値と新しい値の間の差異を取得し、ターゲット・データベースの列の現在の値に追加します。列グループの列はNUMBER型である必要があります。

  • IGNORE: LCRをサイレントで無視し、すべての競合タイプに使用できます。

  • MAXIMUM: ソース・データベースの列リストの値が解消列に関して大きい場合は、そのソース・データベースの列リストを適用します。それ以外の場合は、接続先データベースの値を保持します。この解消方法はROW_EXISTSのみでサポートされ、挿入と更新のみに適用されます。

  • MINIMUM: ソース・データベースの列リストの値が解消列に関して小さい場合は、そのソース・データベースの列リストを適用します。それ以外の場合は、接続先データベースの値を保持します。この解消方法はROW_EXISTSのみでサポートされ、挿入と更新のみに適用されます。

  • OVERWRITE: ソース・データベースの列リストを適用し、接続先データベースの列の値を上書きします。

    ROW_EXISTSでのINSERTは、UPDATEに変換されます。

    ROW_MISSINGでのUPDATEは、INSERTに変換されます。

    ROW_MISSINGでのDELETEは、無視されます。

  • RECORD: LCRをエラー・キューにエンキューします。すべての競合タイプに使用でき、表内のすべての列を含む列グループに対してのみ指定できます。

  • MAX_AND_EQUALS: 解消列の値がデータベース内の列の値以上である場合、ソース・データベースの列リストを適用します。

  • MIN_AND_EQUALS: 解消列の値がデータベース内の列の値以下である場合、ソース・データベースの列リストを適用します。

NULLの場合は、同じobject_nameresolution_groupおよびconflict_typeを持つ既存の競合ハンドラを削除します。

同じobject_nameresolution_columnおよびconflict_typeを持つ競合ハンドラがすでに存在する場合、既存のハンドラは置き換えられます。

column_list

競合ハンドラがコールされる列名のカンマ区切りリスト。

同一の列が(特定のapply_nameobject_nameoperation_nameおよびconflict_typeの)複数の列リストに存在することはできません。

(特定のapply_nameobject_nameoperation_nameおよびconflict_typeの)別の列リストでまだ指定されていない表のすべての列を含むデフォルトの列グループに対して*を指定します。

適用コンポーネントが行論理変更レコード(行LCR)を適用しようとしたときに、リスト内の1つ以上の列に対して競合が発生すると、競合を解消するために競合ハンドラがコールされます。競合ハンドラは、リストにない列でのみ競合が発生した場合はコールされません。

object_name*を使用した場合、column_listは使用できません。

ROW_EXISTSで挿入または更新に対して競合ハンドラを指定する場合にのみ、複数の列グループを使用できます。

ノート: 事前作成された競合ハンドラでは、LOB列、LONG列、LONG RAW列、ユーザー定義タイプの列およびオラクル社提供のタイプの列がサポートされません。列がこれらのタイプである場合は、column_listパラメータに指定しないでください。

このパラメータは、次の場合は'*'に設定する必要があります。

  • operation_nameDELETE

  • method_nameRECORD

  • operation_nameUPDATEで、conflict_typeROW_MISSING

column_table

競合ハンドラがコールされる列名の配列。

このパラメータはcolumn_listパラメータと同じですが、列名のリストではなく配列を使用します。

ノート: column_listパラメータとcolumn_tableパラメータは、同時には指定できません。

resolution_column

MAXIMUMおよびMINIMUM事前作成メソッドの場合、現在の行またはLCRにより小さい値があるかどうかを確認するために解消列がテストされます。解消列は、column_listまたはcolumn_tableパラメータにリストされた列の1つであることが必要です。

他の解消方法にはNULLを指定できます。

source_object

[schema_name.]table_nameの形式で指定した、変更が発生したソース表のスキーマおよびオブジェクト名。

たとえば、ユーザーhrが所有する表employeesで変更が発生した場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

既存の競合ハンドラの変更

既存の競合ハンドラを変更する場合は、既存の競合ハンドラのobjectconflict_typeおよびresolution_columnを指定します。method_nameまたはcolumn_listを変更できます。

既存の競合ハンドラの削除

既存の競合ハンドラを削除する場合は、method_nameNULLを指定し、既存の競合ハンドラのobjectconflict_typeおよびresolution_columnを指定します。

競合に対する一連の処理

競合が発生した場合、次の一連の処理が実行されます。

  1. 適切な競合ハンドラをコールして、競合を解消します。

  2. 競合ハンドラが指定されていない場合、または競合ハンドラで競合を解消できない場合は、適用コンポーネント、オブジェクト名および操作名に対する適切なエラー・ハンドラをコールしてエラーを処理します。

  3. エラー・ハンドラが指定されていない、またはエラー・ハンドラでエラーを解決できない場合は、エラーが発生し、エラーの原因となった行LCRが含まれているトランザクションがエラー・キューに移されます。

    参照:

    エラー・ハンドラの設定方法の詳細は、「DMLハンドラ・プロシージャまたはエラー・ハンドラ・プロシージャの署名」を参照してください。

競合に対するプロシージャDMLハンドラ

事前作成された競合ハンドラを使用して要件を満たすことができない場合は、PL/SQLプロシージャを作成し、カスタム競合ハンドラとして使用できます。特定の表に対して1つ以上のカスタム競合ハンドラを指定するには、SET_DML_HANDLERプロシージャを使用します。また、カスタム競合ハンドラでは、LOB列を処理し、LOBアセンブリを使用することができます。

1つの列リストにのみ指定可能な列

列が列リストにある場合、同じ列を別の列リストに追加しようとすると、このプロシージャは次のエラーを戻します。

ORA-00001: UNIQUE CONSTRAINT (SYS.APPLY$_CONF_HDLR_COLUMNS_UNQ1) VIOLATED

SET_DML_CONFLICT_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_DML_CONFLICT_HANDLERプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

表20-18 パラメータの有効な組合せ

操作 競合タイプ メソッド

INSERT

ROW_EXISTS

OVERWRITE

RECORD

IGNORE

MAXIMUM

MINIMUM

UPDATE

ROW_EXISTS

OVERWRITE

RECORD

IGNORE

MAXIMUM

MINIMUM

DELTA

UPDATE

ROW_MISSING

OVERWRITE

RECORD

IGNORE

DELETE

ROW_EXISTS

OVERWRITE

RECORD

IGNORE

DELETE

ROW_MISSING

RECORD

IGNORE

次に、hrスキーマ内のemployees表に対して競合ハンドラを設定する例を示します。

DECLARE
  cols  DBMS_UTILITY.NAME_ARRAY;
BEGIN
  cols(1) := 'salary';
  cols(2) := 'commission_pct';
  DBMS_APPLY_ADM.SET_DML_CONFLICT_HANDLER(
    apply_name            =>  'appl1',
    conflict_handler_name =>  'emp_handler_update',
    object                =>  'hr.employees',
    operation_name        =>  'UPDATE',
    conflict_type         =>  'ROW_EXISTS',
    method_name           =>  'MAXIMUM',
    resolution_column     =>  'salary',
    column_table          =>  cols);
END;
/

この例では、hr.employees表内のsalary列またはcommission_pct列で競合が発生した場合にコールされるemp_handler_updateという名前の競合ハンドラが設定されます。このような競合が発生した場合は、競合を解消するためにsalary列が評価されます。job_id列など、列リストにない列でのみ競合が発生した場合、この競合ハンドラはコールされません。

20.4.17 SET_DML_HANDLERプロシージャ

このプロシージャは、ユーザー・プロシージャを、特定のデータベース・オブジェクトに対して指定された操作のプロシージャ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);

パラメータ

表20-19 SET_DML_HANDLERプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定したソース・オブジェクトの名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。指定するオブジェクトは、このプロシージャの実行時に存在している必要はありません。

object_type

ソース・オブジェクトのタイプ。現在、指定できるソース・オブジェクトのタイプはTABLEのみです。

operation_name

操作名。次の操作名を指定できます。

  • INSERT

  • UPDATE

  • DELETE

  • LOB_UPDATE

  • DEFAULT

プロシージャは、操作ごとに個別に実行する必要があります。

このプロシージャをデータベース・オブジェクトのデフォルトのプロシージャDMLハンドラとして設定するには、DEFAULTを指定します。これにより、データベース・オブジェクトでの操作用に別のプロシージャDMLハンドラが設定されていない場合は、このデフォルトのプロシージャDMLハンドラがデータベース・オブジェクトのINSERTUPDATEDELETEおよびLOB_WRITEに対して使用されます。

error_handler

TRUEに設定すると、指定オブジェクトでの指定操作に関連する行論理変更レコード(行LCR)で適用エラーが発生したときに、指定したユーザー・プロシージャが実行されます。このユーザー・プロシージャは、潜在的なエラー条件の解決、管理者へのエラー通知、エラーのログの記録またはこれらの処理を任意に組み合せて実行するようにコード化できます。

FALSEに設定すると、指定オブジェクトでの指定操作に関連するすべての行LCRに対して、設定されているハンドラが実行されます。

user_procedure

指定オブジェクトでの指定操作に対する適用時に起動されるユーザー定義プロシージャ。プロシージャがプロシージャDMLハンドラの場合は、Oracleで実行されるデフォルト適用のかわりに起動されます。プロシージャがエラー・ハンドラの場合は、適用エラーが発生したときに起動されます。

指定オブジェクトでの指定操作で起動されるプロシージャDMLハンドラを設定解除する場合は、NULLを指定します。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

apply_name

プロシージャDMLハンドラまたはエラー・ハンドラを使用する適用コンポーネントの名前。

NULLを指定すると、データベース内のすべての適用コンポーネントに対する汎用ハンドラとして、プロシージャDMLハンドラまたはエラー・ハンドラが設定されます。

user_procedureパラメータにNULLを指定してハンドラの設定を解除するときに、設定解除するハンドラが特定の適用コンポーネントに対して設定されている場合は、apply_nameパラメータを使用して、ハンドラの設定を解除する適用コンポーネントを指定します。

assemble_lobs

TRUEに設定すると、ハンドラで処理される、LCR内のLOB列に対してLOBアセンブリが使用されます。LOBアセンブリは、1つの行変更によって生成されたLOB列の複数のLCRを、1つの行LCRにまとめてハンドラに渡します。LOBアセンブリを使用するには、データベース互換性が10.2.0以上である必要があります。

FALSEに設定すると、ハンドラで処理される、LCR内のLOB列に対してLOBアセンブリは使用されません。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

接続先データベースでの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、LONGLONG RAW、ユーザー定義タイプ(オブジェクト・タイプ、REF、VARRAY、ネストした表)およびオラクル社提供のタイプ(任意のタイプ、XMLタイプ、空間タイプ、メディア・タイプ)などのデータ・タイプの列を除くすべての表の列で構成されます。

参照:

プロシージャDMLハンドラおよびデータ・タイプ(LOB、LONGLONG RAW)の詳細と制限は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください

user_procedureパラメータに指定されるプロシージャには、次の署名が必要です。

PROCEDURE user_procedure (
   parameter_name  IN  ANYDATA);

user_procedureはプロシージャ名、parameter_nameはプロシージャに渡されるパラメータ名を表します。プロシージャに渡されるパラメータは、行LCRをANYDATAにカプセル化したものです。

参照:

LCRの詳細は、「論理変更レコードのタイプ」を参照してください。

エラー処理用に作成するプロシージャには、次の署名が必要です。

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)を使用します。

ノート:

  • 各パラメータは必須で、指定のデータ・タイプであることが必要です。ただし、パラメータの名前は変更できます。

  • emsg_array値はユーザー定義配列で、76文字以上のVARCHAR2タイプの表であることが必要です。

エラー・ハンドラを実行すると、次のいずれかの結果になります。

  • エラー・ハンドラがエラーを正常に解決し、適用コンポーネントに制御を戻します。

  • エラー・ハンドラがエラーを解決できず、エラーが発生します。エラーが発生すると、トランザクションはロールバックされ、エラー・キューに入れられます。

LOBアセンブリ

プロシージャDMLハンドラ、エラー・ハンドラおよびカスタム・ルールベースの変換ファンクションで、LCR内のLONG列、LONG RAW列およびアセンブルされていないLOB列のデータを変更しないでください。LOBアセンブリによって作成された行LCR内のLOB列は、プロシージャDMLハンドラおよびエラー・ハンドラで変更できます。

SET_DML_HANDLERプロシージャおよびXStreamアウトバウンド・サーバー

アウトバウンド・サーバーでは、すべての適用ハンドラが無視されます。このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_DML_HANDLERプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.18 SET_ENQUEUE_DESTINATIONプロシージャ

このプロシージャでは、指定したルールを満たすメッセージが適用コンポーネントによって自動的にエンキューされるキューを設定します。

このプロシージャによって、指定したルールのアクション・コンテキストを変更し、キューを指定します。ルールのアクション・コンテキストは、ルールがメッセージに対してTRUEに評価された後、ルール・エンジンのクライアントが解析するルールに関連付けられているオプションの情報です。この場合、ルール・エンジンのクライアントは適用コンポーネントです。アクション・コンテキスト内の情報はSYS.RE$NV_LISTタイプのオブジェクトであり、名前/値ペアで構成されています。

このプロシージャで指定するキューの宛先は、アクション・コンテキスト内の次の名前/値ペアで常に構成されます。

  • 名前は、APPLY$_ENQUEUEです。

  • 値は、VARCHAR2として指定されたキュー名を格納するANYDATAインスタンスです。

構文

DBMS_APPLY_ADM.SET_ENQUEUE_DESTINATION(
  rule_name               IN  VARCHAR2,
  destination_queue_name  IN  VARCHAR2);

パラメータ

表20-20 SET_ENQUEUE_DESTINATIONプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。たとえば、hrスキーマのhr5という名前のルールを指定するには、このパラメータにhr.hr5と入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

適用コンポーネントがメッセージをエンキューするキューの名前。キューを[schema_name.]queue_nameの形式で指定します。ローカル・キューのみを指定できます。

たとえば、hrスキーマ内のstreams_queueという名前のキューを指定するには、hr.streams_queueと入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLを指定すると、名前APPLY$_ENQUEUEを持つ既存の名前/値ペアが削除されます。名前APPLY$_ENQUEUEを持つ名前/値ペアがルールに対して存在しない場合、アクションは実行されません。

NULL以外を指定したときに、名前APPLY$_ENQUEUEを持つ名前/値ペアがルールに対して存在する場合は、それが削除され、このパラメータで指定する値を持つ新しい名前/値ペアが追加されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

SET_ENQUEUE_DESTINATIONプロシージャおよび適用ハンドラ

プロシージャDMLハンドラ、DDLハンドラ、メッセージ・ハンドラなどの適用ハンドラは、宛先キューにもエンキューされるメッセージを処理する場合、そのメッセージがエンキューされる前に処理します。

SET_ENQUEUE_DESTINATIONプロシージャに関する注意事項

このプロシージャを使用する場合は、次の点に注意してください。

  • このプロシージャでは、指定したキューが存在するかどうかを確認しません。キューが存在しない場合、適用コンポーネントがメッセージをエンキューしようとするとエラーが発生します。

  • Oracle Streamsの取得プロセス、伝播、メッセージ・クライアントは、このプロシージャによって作成されるアクション・コンテキストを無視します。

  • 指定したルールを使用する適用コンポーネントの適用ユーザーには、指定したキューにメッセージをエンキューできる権限が必要です。キューが保護キューの場合、適用ユーザーはキューの保護キュー・ユーザーである必要があります。

  • 指定したルールは、適用コンポーネントのポジティブ・ルール・セットである必要があります。ルールが適用コンポーネントのネガティブ・ルール・セットに含まれる場合、適用コンポーネントはメッセージを宛先キューにエンキューしません。

  • メッセージのコミットSCNがメッセージの関連インスタンス化SCN以下の場合、そのメッセージは、適用コンポーネント・ルール・セットを満たしている場合でも、宛先キューにエンキューされません。

SET_ENQUEUE_DESTINATIONプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_ENQUEUE_DESTINATIONプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.19 SET_EXECUTEプロシージャ

このプロシージャでは、指定したルールを満たすメッセージを適用コンポーネントによって実行するかどうかを指定します。

このプロシージャによって、指定したルールのアクション・コンテキストを変更し、メッセージの実行を指定します。ルールのアクション・コンテキストは、ルールがメッセージに対してTRUEに評価された後、ルール・エンジンのクライアントが解析するルールに関連付けられているオプションの情報です。この場合、ルール・エンジンのクライアントは適用コンポーネントです。アクション・コンテキスト内の情報はSYS.RE$NV_LISTタイプのオブジェクトであり、名前/値ペアで構成されています。

このプロシージャで指定するメッセージ実行ディレクティブは、アクション・コンテキスト内の次の名前/値ペアで常に構成されます。

  • 名前は、APPLY$_EXECUTEです。

  • 値は、VARCHAR2としてNOを格納するANYDATAインスタンスです。値がNOの場合、適用コンポーネントはメッセージを実行せず、メッセージを適用ハンドラに送りません。

構文

DBMS_APPLY_ADM.SET_EXECUTE(
  rule_name  IN  VARCHAR2,
  execute    IN  BOOLEAN);

パラメータ

表20-21 SET_EXECUTEプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。たとえば、hrスキーマのhr5という名前のルールを指定するには、このパラメータにhr.hr5と入力します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

execute

TRUEの場合、指定したルールにおいて、名前APPLY$_EXECUTEを持つ名前/値ペアが削除されます。名前/値ペアを削除することは、ルールを満たすメッセージを適用コンポーネントが実行することです。名前APPLY$_EXECUTEを持つ名前/値ペアがルールに対して存在しない場合、アクションは実行されません。

FALSEの場合、ルールのアクション・コンテキストに名前/値ペアが追加されます。名前はAPPLY$_EXECUTEで、値はNOです。適用コンポーネントは、ルールを満たすメッセージを実行せず、メッセージを適用ハンドラに送りません。名前APPLY$_EXECUTEを持つ名前/値ペアがルールに対して存在する場合は、それが削除され、値NOを持つ新しい名前/値ペアが追加されます。

NULLの場合は、エラーが発生します。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

SET_EXECUTEプロシージャに関する注意事項

このプロシージャを使用する場合は、次の点に注意してください。

  • メッセージが論理変更レコード(LCR)のときにそのメッセージが実行されない場合、関連するローカル・データベース・オブジェクトに対して、LCRにカプセル化された変更は実行されません。また、メッセージが実行されない場合、そのメッセージは適用ハンドラに送られません。

  • Oracle Streamsの取得プロセス、伝播、メッセージ・クライアントは、このプロシージャによって作成されるアクション・コンテキストを無視します。

  • 指定したルールは、適用コンポーネントのポジティブ・ルール・セット内に存在して実行ディレクティブに従う必要があります。ルールが適用コンポーネントのネガティブ・ルール・セットに含まれる場合、適用コンポーネントはルールの実行ディレクティブを無視します。

SET_EXECUTEプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_EXECUTEプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.20 SET_GLOBAL_INSTANTIATION_SCNプロシージャ

このプロシージャでは、指定したソース・データベースに対して、およびオプションで、ソース・データベースのスキーマとそのスキーマが所有する表に対して、指定したインスタンス化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);

パラメータ

表20-22 SET_GLOBAL_INSTANTIATION_SCNプロシージャのパラメータ

パラメータ 説明

source_database_name

ソース・データベースのグローバル名。たとえば、DBS1.NETのようになります。

ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名がNETの場合にDBS1を指定すると、自動的にDBS1.NETが指定されます。

instantiation_scn

インスタンス化SCN。NULLを指定すると、ソース・データベースに対するインスタンス化SCNのメタデータがデータ・ディクショナリから削除されます。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、ローカル適用コンポーネントの接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

recursive

TRUEの場合、ソース・データベース、ソース・データベースのすべてのスキーマ、ソース・データベースのスキーマが所有するすべての表に対して、インスタンス化SCNが設定されます。このプロシージャは、現行のユーザーのセキュリティ・コンテキストの下のソース・データベースにおいて、ALL_USERSデータ・ディクショナリ・ビューからスキーマを、ALL_TABLESデータ・ディクショナリ・ビューから表を選択します。

FALSEの場合、ソース・データベースのグローバル・インスタンス化SCNは設定されますが、スキーマまたは表のインスタンス化SCNは設定されません。

ノート: recursiveTRUEに設定する場合は、接続先データベースからソース・データベースへのデータベース・リンクが必要です。その場合、データベース・リンクにはソース・データベースのグローバル名と同じ名前を付けて、現行のユーザーからアクセスできるようにしてください。また、このプロシージャで接続先データベースの表にインスタンス化SCNを設定するには、ソース・データベースのALL_TABLESまたはDBA_TABLESデータ・ディクショナリ・ビューの現行のユーザーから表にアクセスできるようにしてください。

source_root_name

ソース・ルート・データベースのグローバル名。

CDB以外の場合、このパラメータはNULLである必要があります。

CDBで特定のコンテナをインスタンス化する場合は、source_databasesource_root_nameを両方とも指定する必要があります。CDBのすべてのコンテナをインスタンス化する場合は、データベースのsource_root_nameを指定してから、source_database名をNULLとして残します。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

インスタンス化SCNおよびDDL LCR

ソース・データベースからのデータベース・オブジェクトに対するDDL LCRのコミットSCNが、接続先データベースでそのソース・データベースに対するインスタンス化SCN以下の場合は、接続先データベースでの適用コンポーネントで、そのDDL LCRは無視されます。それ以外の場合は、DDL LCRが適用されます。

このプロシージャで指定するグローバル・インスタンス化SCNがDDL LCRに対して使用されるのは、object_ownerbase_table_ownerおよびbase_table_nameがDDL LCRに指定されていない場合のみです。たとえば、このプロシージャによって設定されるグローバル・インスタンス化SCNは、command_typeCREATE 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情報を使用する適用プロセスと同一のコンテナから起動する必要があります。

20.4.21 SET_KEY_COLUMNSプロシージャ

このプロシージャでは、適用の目的で代替主キーとして使用される列セットを記録し、指定オブジェクトに対する既存の代替主キー列が存在する場合は、それを削除します。

このプロシージャはオーバーロードされています。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);

パラメータ

表20-23 SET_KEY_COLUMNSプロシージャのパラメータ

パラメータ 説明

object_name

[schema_name.]object_nameの形式で指定した表の名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。適用コンポーネントが異機種環境のOracle以外のデータベースに変更を適用している場合、オブジェクト名は検証されません。

column_list

代替主キーとして使用する、表内の列のカンマで区切られたリスト。列名の間に空白は入れません。

column_listパラメータが空またはNULLの場合は、現行のキー列のセットが削除されます。

column_table

代替主キーとして使用する、表内の列のDBMS_UTILITY.NAME_ARRAYタイプのPL/SQL連想配列。column_tableの索引は1から始まり、1ずつ増え、NULLで終了する必要があります。

column_tableパラメータが空またはNULLの場合は、現行のキー列のセットが削除されます。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

SET_KEY_COLUMNSプロシージャに関する注意事項

このプロシージャを使用する場合は、次の点に注意してください。

  • 空でない場合、指定列セットは、指定オブジェクトの主キーより優先されます。オブジェクトに主キー列があり、これらの主キー列をキーとして使用する場合は、代替キー列を指定しないでください。

  • このプロシージャは、接続先データベースで実行します。ソース・データベースでは、代替キー列に対して絶対的なサプリメンタル・ログ・グループを指定する必要があります。

  • 本来の主キーとは異なり、代替キー列として指定する列にはNULLを含めることができます。ただし、代替キー列として指定する各列はNOT NULL列にすることをお薦めします。また、すべての列を代替キーに含める単一の索引も作成してください。これらのガイドラインに従うと、Oracleは関連する行をさらに効率的に検索できるため、LOBに対する更新、削除およびピース単位の更新のパフォーマンスが向上します。

  • 表の主キー列または代替キー列は、アプリケーションで更新できないようにしてください。更新できないようにすることにより、Oracleは行を識別でき、データの整合性を保つことができます。

  • 主キーも、少なくとも1つのNOT NULL列がある一意の索引も、表の代替キーもない場合、キーは、LOB、LONGLONG RAW、ユーザー定義タイプ(オブジェクト・タイプ、REF、VARRAY、ネストした表)およびオラクル社提供のタイプ(任意のタイプ、XMLタイプ、空間タイプ、メディア・タイプ)などのデータ・タイプの列を除くすべての表の列で構成されます。

重複行と代替主キー列

表の複数の行で、LOB列、LONG列およびLONG RAW列を除くすべての列値が同じ場合、その表には重複行が含まれています。SET_KEY_COLUMNSプロシージャを使用すると、接続先データベースの表に、代替主キー列を指定できます。接続先データベースの重複行を持つ表に対して代替主キー列が指定され、適用コンポーネント・パラメータallow_duplicate_rowsYに設定されている場合、ソース・データベースと接続先データベースで表データを同期させるには、次の要件を満たしている必要があります。

  • 接続先データベースの代替キー列として指定されている列に対して、ソース・データベースでサプリメンタル・ロギングを必ず指定すること。代替キー列は、ソース・データベースの無条件のログ・グループに含まれている必要があります。

  • 代替キー列によって、接続データベースの表内の各行が一意に識別されること。

この項の後半では、これらの要件の詳細を説明します。

表にキーがなく、allow_duplicate_rows適用コンポーネント・パラメータがYに設定されている場合、UPDATEまたはDELETEコマンド・タイプのみを持つ単一の行LCRは、いずれかの重複行に適用されます。この場合、ソース・データベースのすべての重複行が変更される変更を行う際にソース・データベースの表および接続先データベースの表に対応する重複行が存在すると、その変更の結果生成された行LCRの適用時に、接続先データベースのすべての重複行も変更されます。

たとえば、ソース・データベースの表に2つの重複行があるとします。それらの重複行に対して更新を行うと、2つの行LCRが生成されます。接続先データベースでは、1つの行LCRが重複行の1つに適用されます。重複行の1つが変更されたため、この時点で、接続先データベースに重複行は存在しなくなります。接続先データベースで2番目の行LCRが適用されると、行は再度重複することになります。同様に、ソース・データベースのこれらの重複行に対して削除を実行すると、ソースの変更の結果生成された行LCRの適用時に、接続先データベースの両方の行が削除されます。

表に対して代替主キー列が指定されている場合、行LCRは、代替主キー列に基づいて適用時に表内の行で識別されます。接続先データベースの重複行を持つ表に対して代替主キー列が指定され、適用コンポーネント・パラメータallow_duplicate_rowsYに設定されている場合、ソース・データベースの重複行に対して行った更新の内容が、接続先データベースで行LCRが適用される際の変更の内容と異なることがあります。特に、代替主キー列として指定されている列の1つが更新によって変更されない場合、接続先データベースでは、同じ重複行が複数回更新され、他の重複行が更新されないことがあります。

また、接続先データベースの表内の各行が代替キー列によって一意に識別されない場合は、複数行で識別される行LCRで、それらの行のいずれかを更新できます。この場合、行LCR内の更新内容が、接続先データベースの表の正しい行に適用されない可能性があります。

適用コンポーネントでは、表内の行が重複しているかどうかを判断する場合、代替主キー列は無視されます。適用コンポーネントでは、行内のLOB列、LONG列およびLONG RAW列を除くすべての列値が同じ場合にのみ、行が重複していると判断されます。したがって、1回の更新または削除によって、表内の重複していない複数の行が変更されると、常にエラーが発生します。

たとえば、列c1c2およびc3を持つ表で、列c1を代替主キーとして指定するためにSET_KEY_COLUMNSプロシージャが使用されているとします。2つの行のc1列のキー値が同じで、c2列またはc3列の値が異なっている場合、適用コンポーネントでは、これらの行は重複行として処理されません。行のc1値が同じであるため、更新または削除によって複数の行が変更される場合は、allow_duplicate_rows適用コンポーネント・パラメータの設定に関係なく、エラーが発生します。

参照:

allow_duplicate_rows適用コンポーネント・パラメータの詳細は、「SET_PARAMETERプロシージャ」を参照してください。

SET_KEY_COLUMNSプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_KEY_COLUMNSプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

SET_KEY_COLUMNSプロシージャおよびCDB

このプロシージャは、代替主キーとして使用される列を定義します。適切なPDBで、SET_KEY_COLUMNSプロシージャを実行する必要があります。

20.4.22 SET_PARAMETERプロシージャ

このプロシージャでは、適用パラメータを指定した値に設定します。

構文

DBMS_APPLY_ADM.SET_PARAMETER (
   apply_name  IN  VARCHAR2, 
   parameter   IN  VARCHAR2, 
   value       IN  VARCHAR2  DEFAULT NULL);

パラメータ

表20-24 SET_PARAMETERプロシージャのパラメータ

パラメータ 説明

apply_name

適用コンポーネント名。所有者を指定しないでください。

parameter

設定するパラメータの名前。

value

パラメータに設定する値。

NULLの場合、パラメータはデフォルト値に設定されます。

適用コンポーネントのパラメータ

次の表に、適用コンポーネントのパラメータを示します。

表20-25 適用コンポーネントのパラメータ

パラメータ名 設定可能な値 デフォルト 説明

allow_duplicate_rows

YまたはN

N

Yの場合、UPDATEまたはDELETEコマンド・タイプを持つ単一の行論理変換レコード(行LCR)によって複数の行が変更されていると、適用コンポーネントではそれらの行の中の1行のみが更新または削除されます。

Nの場合、適用コンポーネントでは、表内の複数の行を変更する、UPDATEまたはDELETEコマンド・タイプを持つ単一行LCRが検出されると、エラーが発生します。

ノート: このパラメータの設定に関係なく、適用コンポーネントでは、LOB列、LONG列またはLONG RAW列が含まれている表の重複行に対して変更を行うことはできません。

関連項目: 「使用上のノート」および「重複行と代替主キー列」

apply_sequence_nextval

YまたはN

N(適用プロセスの場合)

Y(XStreamアウトバウンド・サーバーおよびXStreamインバウンド・サーバーの場合)

適用コンポーネントによって順序値をチェックおよび調整するかどうかを制御します。

Yの場合、適用コンポーネントによって順序値がチェックおよび調整されます。

昇順の順序では、このパラメータをYに設定すると、接続先の順序値が必ずソースの順序値以上になります。

降順の順序では、このパラメータをYに設定すると、接続先の順序値が必ずソースの順序値以下になります。

Nの場合、適用コンポーネントによって順序値はチェックまたは調整されません。

ノート: このパラメータは、XStreamを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境の適用プロセスに対してこのパラメータをYに設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

関連項目: capture_sequence_nextval取得プロセス・パラメータの詳細は、「SET_PARAMETERプロシージャ」を参照してください。

batchsql_mode

DEPENDENTDEPENDENT_EAGERまたはSEQUENTIAL

DEPENDENT

順序変更のバッチ・トランザクションの生成に使用されるバッチ方法を決定します。このパラメータは、次のいずれかに設定できます。

  • DEPENDENT - バッチ間の依存関係を最小限に抑え、Oracle GoldenGate BATCHSQLモードでの並列処理のパフォーマンスを向上させる、依存関係を認識したバッチ・トランザクション。実行中のバッチには未解決の依存関係はありません。

  • DEPENDENT_EAGER - バッチ間の依存関係を最小限に抑え、Oracle GoldenGate BATCHSQLモードでの並列処理のパフォーマンスを向上させる、依存関係を認識したバッチ・トランザクション。未解決の依存関係がある場合、バッチを実行できます。適用サーバーは、依存関係が解決されるまで待機してからLCRを実行します。

  • SEQUENTIAL - 順番に実行されるバッチ・トランザクション。Oracle GoldenGate BATCHSQLモードに関係なく、COMMIT_SERIALIZATION = FULLはこのモードで実行されます。

ノート: このパラメータは、Oracle GoldenGateを対象としています。このパラメータはOracle Streamsレプリケーション環境やXStream環境では使用しないでください。

cdgranularity

ROWまたはCOLGROUP

COLGROUP (XStream Inの場合)

ROW (Oracle GoldenGateの場合)

競合検出の粒度を指定します。このパラメータは、次のいずれかに設定できます。

  • ROW - いずれかの列グループに競合がある場合、すべての列グループに競合解消が適用されます。

  • COLGROUP - 競合解消は、競合がある列グループに適用されます。競合がない列グループには、競合解消は適用されません。

ノート: このパラメータは、XStreamおよびOracle GoldenGateを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境の適用プロセスに対してこのパラメータを設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

commit_serialization

DEPENDENT_TRANSACTIONSまたはFULL

DEPENDENT_TRANSACTIONS

適用済トランザクションがコミットされる順序。

適用サーバーは、ソース・データベースでのコミット時と異なる順で、接続先データベースで非依存トランザクションを適用できます。依存トランザクションは、ソース・データベースでのコミット時と常に同じ順序で、接続先データベースで適用されます。

commit_serialization適用パラメータを使用して、適用サーバーが、接続先データベースで異なる順序で非依存トランザクションを適用できるかどうかを制御します。このパラメータの設定は次のとおりです。

  • DEPENDENT_TRANSACTIONS: 適用コンポーネントは、任意の順序で非依存トランザクションをコミットできます。DEPENDENT_TRANSACTIONSを指定すると、パフォーマンスは最大になります。

  • FULL: 適用コンポーネントは、ソース・データベースでコミットされた順序で、適用済トランザクションをコミットします。

適用するトランザクションは、指定に関係なく、データ依存性と制約依存性に従って、パラレルで実行できます。

DEPENDENT_TRANSACTIONSを指定すると、接続先データベースでは、ソース・データベースとは異なる順序で変更がコミットされる可能性があります。たとえば、ソース・データベースでは、2つの非依存トランザクションが次の順序でコミットされるとします。

  1. トランザクションA

  2. トランザクションB

接続先データベースでは、これらのトランザクションが逆の順序でコミットされる可能性があります。

  1. トランザクションB

  2. トランザクションA

DEPENDENT_TRANSACTIONSを指定して、データベースにより施行されないアプリケーションの制約がある場合、アプリケーションの制約を把握するには、仮想的な依存性の定義を使用するか、またはRELY制約を追加します。仮想的な依存性の定義の詳細は『Oracle Streams概要および管理』を、RELY制約の詳細は『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

ノート:NONEは、このパラメータでは非推奨となっています。かわりに、DEPENDENT_TRANSACTIONS値を使用してください。

関連項目: 「使用上のノート」

compare_key_only

YまたはN

N(適用プロセスの場合)

Y(XStreamインバウンド・サーバーの場合)

Yの場合、自動競合検出が無効になり、行LCRに対応する表の行を識別するために主キーおよび一意キーの列のみが使用されます。

Nの場合、自動競合検出が有効になり、行LCRに対応する表の行を識別するために行LCRのすべての元の値が使用されます。

ノート: このパッケージのCOMPARE_OLD_VALUESプロシージャでは、指定した列の元の値の適用時における比較を無効にできます。「COMPARE_OLD_VALUESプロシージャ」を参照してください。

関連項目: 自動競合検出の詳細は、「使用上のノート」および『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

compute_lcr_dep_on_arrival

YまたはN

N

Yの場合、トランザクションのLCRの受信中に依存性が計算されます。

Nの場合、トランザクションのすべてのLCRが受信された後に初めて依存性が計算されます。

ターゲット表にソース表と同じ制約がすべて含まれている場合、このパラメータをYに設定するとパフォーマンスを改善できます。

トランザクション内のLCR数がeager_sizeパラメータの数値を超える場合は、compute_lcr_dep_on_arrivalの設定に関係なく、そのトランザクションの依存性は受信時に計算されます。

ノート: このパラメータは、XStreamを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境の適用プロセスに対してこのパラメータをYに設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

disable_on_error

YまたはN

Y

Yの場合は、未解決の最初のエラーによって、そのエラーがリカバリ可能である場合でも、適用コンポーネントは無効化されます。

Nの場合は、未解決のエラーがある場合でも適用コンポーネントは続行されます。

disable_on_limit

YまたはN

N

Yの場合は、time_limitパラメータまたはtransaction_limitパラメータによって指定された値に達したために適用コンポーネントが終了すると、適用コンポーネントは無効化されます。

Nの場合、適用コンポーネントは、制限に達したために停止した後すぐに再開されます。

再開された適用コンポーネントは、新しいセッション識別子を取得し、この適用コンポーネントに関連付けられているプロセスも新しいセッション識別子を取得します。ただし、コーディネータ・プロセス番号(APnn)は変更されません。

eager_size

正の整数

9500

通常、適用コンポーネントは、コミット・レコードを受信するまで待機してから、トランザクションの変更を適用します。XStreamが有効で、特定のトランザクションでeager_sizeより多くのLCRが受信される場合、適用プロセスによって変更内容の処理が開始されます。XStreamが無効で、特定のトランザクションでeager_sizeより多くのLCRが受信される場合、適用プロセスは、全トランザクションが受信されるまで待機してから、変更内容の処理を開始します。

既存のすべての適用サーバーは、ソースからの全トランザクションを処理している可能性があるため、残りの即時トランザクションを処理するために追加の適用サーバーが自動的に作成されます。適用パラメータmax_parallelismは、適用プロセスにおいて使用可能な適用サーバーの最大数を制限します。

この適用パラメータは、その値がtxn_lcr_spill_threshold適用パラメータよりも少ない場合にのみ適用されます。txn_lcr_spill_thresholdの値がeager_sizeよりも少ない場合は、即時適用が開始される前にトランザクションがディスクに書き込まれます。

ノート: このパラメータは、XStreamを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境でこのパラメータを設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

enable_xstream_table_stats

YまたはN

Y

このパラメータをYに設定すると、適用されたトランザクションの操作に関する統計が収集され、V$XSTREAM_TABLE_STATSビューに表示されます。

このパラメータをNに設定すると、統計は収集されません。

ノート: このパラメータは、XStreamを対象としています。Oracle Streamsレプリケーション環境の適用プロセスに対してこのパラメータをYに設定しないでください。

excludetag

Oracle Streamsタグのカンマ区切りリスト

NULL

アウトバウンド・サーバーの取得プロセスによって、指定したOracle Streamsタグの1つでタグ付けされたDML変更を取得するかどうかを制御します。

取得プロセスがこれらの変更を取得するかどうかは、getapplopsパラメータとgetreplicatesパラメータの設定に応じて変化します。

NULLの場合、取得プロセスではこのパラメータは無視されます。

ノート: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの「使用上のノート」を参照してください。

excludetrans

トランザクション名のカンマ区切りリスト

NULL

アウトバウンド・サーバーの取得プロセスによって、指定したトランザクション名のDML変更を取得するかどうかを制御します。

取得プロセスがこれらの変更を取得するかどうかは、getapplopsパラメータとgetreplicatesパラメータの設定に応じて変化します。

NULLの場合、取得プロセスではこのパラメータは無視されます。

ノート: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの「使用上のノート」を参照してください。

excludeuser

ユーザー名のカンマ区切りリスト

NULL

アウトバウンド・サーバーの取得プロセスによって、指定したユーザーが加えたDML変更を取得するかどうかを制御します。

取得プロセスがこれらの変更を取得するかどうかは、getapplopsパラメータとgetreplicatesパラメータの設定に応じて変化します。

各ユーザー名の完全パターン一致を指定します。パターン一致では大/小文字が区別されます。たとえば、hrユーザーの場合はHRを指定します。

NULLの場合、取得プロセスではこのパラメータは無視されます。

ノート: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの「使用上のノート」を参照してください。

excludeuserid

ユーザーID値のカンマ区切りリスト

NULL

アウトバウンド・サーバーの取得プロセスによって、指定したユーザーが加えたデータ操作言語(DML)変更を取得するかどうかを制御します。

取得プロセスがこれらの変更を取得するかどうかは、getapplopsパラメータとgetreplicatesパラメータの設定に応じて変化します。

ユーザーのユーザーIDを表示するには、ALL_USERSデータ・ディクショナリ・ビューのUSER_ID列を問い合せます。

NULLの場合、取得プロセスではこのパラメータは無視されます。

ノート: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの「使用上のノート」を参照してください。

getapplops

YまたはN

Y

Yの場合、元のユーザーがexcludeuseridパラメータまたはexcludeuserパラメータに指定されておらず、トランザクション名がexcludetransパラメータに指定されていなければ、取得プロセスによってDMLの変更が取得されます。

Nの場合、元のユーザーがexcludeuseridパラメータまたはexcludeuserパラメータに指定されておらず、トランザクション名がexcludetransパラメータに指定されていなければ、取得プロセスによってDMLの変更は無視されます。

どちらの設定でも、取得プロセスのルール・セットが満たされる場合にのみ、取得プロセスによってDMLの変更が取得されます。

Ngetapplopsおよびgetreplicatesの両方に設定すると、データは取得されません。

ノート: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの「使用上のノート」を参照してください。

getreplicates

YまたはN

N

Yの場合、元のユーザーがexcludeuseridパラメータまたはexcludeuserパラメータに指定され、トランザクション名がexcludetransパラメータに指定されていれば、取得プロセスによってDMLの変更が取得されます。

Nの場合、元のユーザーがexcludeuseridパラメータまたはexcludeuserパラメータに指定され、トランザクション名がexcludetransパラメータに指定されていれば、取得プロセスによってDMLの変更は無視されます。

どちらの設定でも、取得プロセスのルール・セットが満たされる場合にのみ、取得プロセスによってDMLの変更が取得されます。

Ngetapplopsおよびgetreplicatesの両方に設定すると、データは取得されません。

ノート: このパラメータは、複数のアウトバウンド・サーバーが同一の取得プロセスを使用する、XStream Out環境を対象としています。XStreamインバウンド・サーバーでは、このパラメータは無視されます。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: このパラメータの詳細は、DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャの「使用上のノート」を参照してください。

grouptransops

1から10000までの正の整数

250(適用プロセスおよびXStreamインバウンド・サーバーの場合)

10000(XStreamアウトバウンド・サーバーの場合)

1つのトランザクションにグループ化できるLCRの最小数。トランザクションのコミットLCRは、トランザクションのLCR数に含まれません。

このパラメータによって、適用コンポーネントが複数のトランザクションのLCRを1つのトランザクションにグループ化できるようにします。適用コンポーネントは、コミットされたトランザクションに含まれるLCRのみをグループ化します。

トランザクションにこのパラメータの設定より多くのLCRが含まれる場合、そのトランザクションは1つのトランザクションとして適用されます。適用コンポーネントは、1つのトランザクションを個別のトランザクションに分割しません。

このパラメータは、parallelismパラメータの設定が1の場合にのみ有効になります。grouptransopsパラメータは、parallelismパラメータの設定が1より大きい場合、無視されます。

ノート: このパラメータは、XStreamアウトバウンド・サーバーおよびインバウンド・サーバーを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、このパラメータはOracle Streams適用プロセスによって無視されます。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

関連項目: 「使用上のノート」

handlecollisions

YまたはN

N

このパラメータは、データのロード中に変更を適用するときに、適用コンポーネントが重複レコードおよび欠損レコードのエラーを解決するかどうかを制御します。

通常のレプリケーション・アクティビティの場合は、このパラメータをNに設定する必要があります。データのロード時(インスタンス化)およびレプリケーションが有効な場合のみ、Yに設定する必要があります。

Yに設定すると、ROW_EXISTSエラーを取得するINSERTUPDATEおよびDELETEの各操作のOVERWRITEの同等機能を実行し、ROW_MISSINGエラーを取得するUPDATE操作およびDELETE操作を無視します。

このパラメータがYに設定された場合、適用コンポーネントは次の操作を実行します。

  • 操作が挿入で、主キーまたは一意キーが存在する場合、その挿入は更新に変換されます。

  • 操作が主キー列または一意キー列を変更しない更新で、行が存在しない場合、その変更は無視されます。

  • 操作が主キー列または一意キー列を変更する更新で、行が存在しない場合、その変更は無視されます。

  • 操作が主キー列または一意キー列を変更する更新で、新しいキー値のある行がすでに存在している場合、以前のキー値のある行が削除され、新しいキー値のある列に置換されます。

  • 操作が削除で、行が存在しない場合、その変更は無視されます。

Nに設定すると、これらの設定は無効になります。

ノート: このパラメータは、1つ以上のインバウンド・サーバーのあるXStream In環境を対象としています。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

ignore_transaction

有効なソース・トランザクションIDまたはNULL

NULL

適用コンポーネントがソース・データベースの指定したトランザクションを無視するように設定し、即座に有効化します。

トランザクションを無視すると、ソース・データベースと接続先データベース間でデータ相違が発生する可能性があるため、このパラメータを設定する場合は注意してください。

複数のトランザクションを無視するには、SET_PARAMETERプロシージャへの別々のコールで各トランザクションを指定します。DBA_APPLY_PARAMETERSビューに、無視されるすべてのトランザクションのカンマ区切りリストが表示されます。無視されるトランザクションのリストをクリアするには、SET_PARAMETERプロシージャを実行し、ignore_transactionパラメータにNULLを指定します。

NULLの場合、適用コンポーネントではこのパラメータは無視されます。

ノート: 適用コンポーネントでは、取得プロセスによって取得されなかったトランザクションについて、このパラメータは無視されます。

関連項目: 「使用上のノート」

maximum_scn

有効なSCN値またはINFINITE

INFINITE

適用コンポーネントは、指定された値以上のコミットSCNを持つトランザクションの適用前に無効化されます。

INFINITEの場合は、SCNの値に関係なく適用コンポーネントが実行されます。

ノート: 適用コンポーネントでは、取得プロセスによって取得されなかったトランザクションについて、このパラメータは無視されます。

関連項目: 「使用上のノート」

max_parallelism

正の整数

50

適用コンポーネントにおいて使用可能な適用サーバーの最大数を制限します。

parallelism適用パラメータを2以上に設定すると、このパラメータ(max_parallelism)によって設定された制限に到達するまで、適用コンポーネントが必要に応じてトランザクションを処理するために適用サーバーを追加します。トランザクションには、未割当てのトランザクション(即時)と割当て済トランザクションが含まれます。

5分以上アイドル状態にある適用サーバーは、構成されたparallelismが達成されるまで停止されます。

全適用プロセスの正確な適用統計が保持されるように、停止されたサーバーのランタイム統計は適用サーバー0に集約されます。

ノート: このパラメータは、XStreamを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境の適用プロセスに対してこのパラメータをYに設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

max_sga_size

正の整数

INFINITE

適用コンポーネントのために特に割り当てられたシステム・グローバル領域(SGA)メモリーの量をMB単位で制御します。

このメモリーは、適用コンポーネントのセッション期間中に割り当てられ、適用コンポーネントが無効になると解放されます。

ノート: データベース上のすべてのコンポーネントに割り当てられたシステムグローバル領域(SGA)メモリーは、合計でSTREAMS_POOL_SIZE初期化パラメータに設定されている値未満である必要があります。

NULLの場合、適用コンポーネントでは元のデフォルト値が使用されます。NULL値には、パラメータをデフォルト値に再設定した場合と同じ効果があります。

ノート: このパラメータは、XStreamを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境でこのパラメータを使用または設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

関連項目: 「使用上のノート」

message_tracking_frequency

0または正の整数

2000000

インバウンド・サーバーによって適用されたメッセージが自動的に追跡される頻度。

たとえば、このパラメータがデフォルト値の2000000に設定されている場合は、200万番目ごとにメッセージが自動的に追跡されます。

自動メッセージ追跡に使用される追跡レベルはinbound_server_name:AUTOTRACKです。ここで、inbound_server_nameはインバウンド・サーバーの名前です。インバウンド・サーバー名の最初の20バイトのみが使用され、20バイトを超える場合、残りは切り捨てられます。

0(ゼロ)の場合、メッセージは自動的に追跡されません。

メッセージの追跡の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

optimize_progress_table

YまたはN

Y

このパラメータによって、表またはREDOログで適用トランザクションを追跡するかどうかを決定できます。進捗表では、完了した適用トランザクションが追跡されます。

Yの場合、REDOログでトランザクションが追跡されます。

Nの場合、表でトランザクションが追跡されます。

データベースがアーカイブ・ログ・モードではない場合は、Yの設定は無視されます。

ノート: このパラメータは、XStreamを対象としています。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境でこのパラメータを設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

関連項目: 「使用上のノート」

optimize_self_updates

YまたはN

Y

このパラメータは、ソース・データベースへの更新で列が既存の値に設定されるときの競合解決に影響を与えます。

このパラメータをYに設定すると、LCRの値とターゲット・データベースの対応する列との競合が解決したものとみなされます。

このパラメータをNに設定すると、競合が処理されます。

parallelism

正の整数

4

トランザクションを同時に適用できる適用サーバーの数。

リーダー・サーバーおよび適用サーバー・プロセス名はASnnであり、nnには文字および数字を含めることができます。ASnnプロセスの合計数は、parallelismパラメータの値に1を加算したものです。

たとえば、parallelismを4に設定すると、適用コンポーネントでは合計5つのASnnプロセスが使用されます。この場合、1台のリーダー・サーバーと4台の適用サーバーがあります。

parallelismパラメータを、使用可能なオペレーティング・システムのユーザー・プロセス数より大きい値に設定すると、適用コンポーネントが無効になる場合があります。parallelismパラメータを設定するときは、PROCESSES初期化パラメータが適切に設定されていることを確認してください。

ノート: このパラメータの値を1から実行中の適用コンポーネントに対するそれより高い値に変更すると、適用コンポーネントは自動的に停止し、再開します。現在適用中のトランザクションのサイズによっては、時間がかかる場合があります。このパラメータの値が1より大きい場合で、パラメータの値が増減された場合は、適用コンポーネントは再起動しません。

関連項目: 「使用上のノート」

parallelism_interval

0または正の整数

0

parallelism interval(並列度間隔)とは、現行のワークロード・アクティビティを計算する時間間隔(秒単位)です。

適用コンポーネントは5 X parallelism_interval秒ごとに平均スループットを計算します。各計算の終了後、適用コンポーネントはスループットを改善するために、適用サーバーの数を増加または減少させます。スループットが改善されると、適用コンポーネントは新しい数の適用サーバーを維持します。

並列度間隔は、parallelismパラメータの値が2以上に設定され、max_parallelismパラメータの値がparallelismパラメータの値より大きい場合のみ使用されます。

ノート: このパラメータは、1つ以上のインバウンド・サーバーのあるXStream In環境を対象としています。XStreamアウトバウンド・サーバーは、このパラメータを無視します。XStream最適化をDBMS_XSTREAM_ADM.ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャによって有効にする場合を除き、Oracle Streamsレプリケーション環境でこのパラメータを設定しないでください。XStream最適化の有効化については、「ENABLE_GG_XSTREAM_FOR_STREAMSプロシージャ」を参照してください。

関連項目: 「使用上のノート」

preserve_encryption

YまたはN

Y

透過的なデータの暗号化を使用して暗号化された列の暗号化を保持するかどうか。

Yの場合、接続先データベースの表内の列は、行LCR内の対応する列の暗号化時に暗号化する必要があります。行LCR内の列が暗号化され、接続先データベースの表内の列が暗号化されなかった場合、適用コンポーネントで行LCRを適用しようとするとエラーが発生します。

Nの場合、接続先データベースの表内の列は、行LCR内の対応する列の暗号化時に暗号化する必要はありません。行LCR内の列が暗号化され、接続先データベース内の表の列が暗号化されなかった場合、適用コンポーネントは行LCRの変更を適用します。

ノート: 実行中の適用コンポーネントに対してこのパラメータの値を変更すると、適用コンポーネントは自動的に停止し、再開します。現在適用中のトランザクションのサイズによっては、時間がかかる場合があります。

関連項目: 「使用上のノート」

rtrim_on_implicit_conversion

YまたはN

Y

適用時に自動データ・タイプ変換が実行された場合に、列の右端の空白埋めを削除するかどうか。

Yの場合、行LCR内のCHARソース列またはNCHARソース列が表内のVARCHAR2列、NVARCHAR2列またはCLOB列に変換されたときに空白埋めが削除されます。

Nの場合、列の空白埋めが保持されます。

関連項目: 適用時の自動データ・タイプ変換の詳細は、「使用上のノート」および『Oracle Streams概要および管理』を参照してください。

startup_seconds

0、正の整数またはINFINITE

0

同じ適用コンポーネントの別のインスタンス化が終了するのを待機する最大秒数。同じ適用コンポーネントの別のインスタンス化がこの時間内に終了しない場合、適用コンポーネントは開始しません。

INFINITEの場合、適用コンポーネントは、同じ適用コンポーネントの別のインスタンス化が終了した後で開始します。

関連項目: 「使用上のノート」

suppresstriggers

YまたはN

Y

このパラメータは、適用コンポーネントによる変更があった場合、トリガーを実行するかどうかを制御します。

Yの場合、適用コンポーネントによる変更に対してトリガーは実行されません。

Nの場合、適用コンポーネントによる変更に対してトリガーが実行されます。

トリガーの実行プロパティが常に実行されるよう設定されている場合、suppresstriggersパラメータの値に関係なく、そのトリガーは適用コンポーネントによる変更に対して常に実行されます。トリガーが常に実行されるようトリガーの実行プロパティを設定するには、fire_onceパラメータをFALSEに設定して、DBMS_DDL.SET_TRIGGER_FIRING_PROPERTYプロシージャを実行します。

ノート: このパラメータは、1つ以上のインバウンド・サーバーのあるXStream In環境を対象としています。このパラメータはOracle Streamsレプリケーション環境では設定しないでください。

関連項目: 「使用上のノート」

time_limit

正の整数またはINFINITE

INFINITE

適用コンポーネントは、開始してから指定秒数が経過した後、可能なかぎり早く停止します。

INFINITEの場合、適用コンポーネントは明示的に停止されるまで実行し続けます。

関連項目: 「使用上のノート」

trace_level

0または正の整数

0

Oracleサポート・サービスから指示がないかぎり、このパラメータは設定しないでください。

関連項目: 「使用上のノート」

transaction_limit

正の整数またはINFINITE

INFINITE

適用コンポーネントは、指定した数のトランザクションを適用した後停止します。

INFINITEの場合は、適用したトランザクションの数に関係なく実行し続けます。

関連項目: 「使用上のノート」

txn_age_spill_threshold

正の整数またはINFINITE

900

特定のトランザクションのメッセージに、指定した時間を超えてメモリーに保持されているものがある場合、適用コンポーネントによって、メモリーからハードディスクへのメッセージの書出しが開始されます。このパラメータは経過時間を秒単位で指定します。

リーダー・サーバーによってメモリーから書き出されたメッセージは、ハードディスク上のデータベース表に格納されます。これらのメッセージは、メモリーからキュー表へは書き出されません。

メッセージの書出しは、トランザクション単位で行われます。たとえば、このパラメータの設定が900の場合、適用コンポーネントのリーダー・サーバーによって、あるトランザクションのメッセージの1つが900秒を超えてメモリーに保持されていることが検出されると、そのトランザクションのすべてのメッセージがメモリーからハードディスクに書き出されます。

INFINITEの場合、メッセージは、適用コンポーネントによってメッセージの経過時間に基づいてハードディスクに書き出されません。

適用コンポーネントによって書き出されたトランザクションについては、DBA_APPLY_SPILL_TXNデータ・ディクショナリ・ビューを問い合せてください。

関連項目: 「使用上のノート」

txn_lcr_spill_threshold

正の整数またはINFINITE

10000

メモリー内の特定のトランザクションのメッセージ数が指定した数を超えると、適用コンポーネントによって、メモリーからハードディスクへのそのトランザクションのメッセージの書出しが開始されます。メモリーから書き出される最初のチャンクのメッセージの数は、このパラメータに指定した数と同じになり、それ以降のチャンクで書き出されるメッセージの数は、100またはこのパラメータに指定した数のいずれか小さいほうと同じになります。

適用コンポーネントのリーダー・サーバーでは、指定した数のメッセージが特定のトランザクションに対してメモリー内に保持されている場合、そのトランザクションに対する次のメッセージが検出されると、メモリー内のメッセージがハードディスクに書き出されます。たとえば、パラメータの設定が10000で、トランザクションに10,200個のメッセージがある場合、そのトランザクションはリーダー・サーバーによって次のように処理されます。

  1. トランザクションの最初の10,000個のメッセージがメモリーに読み込まれます。

  2. メッセージ10,000が検出されると、メッセージ1から10,000がハードディスクに書き出されます。

  3. トランザクションの次の100個のメッセージがメモリーに読み込まれます。

  4. メッセージ10,100が検出されると、メッセージ10,001から10,100がハードディスクに書き出されます。

  5. トランザクションの次の100個のメッセージがメモリーに読み込まれます。

適用コンポーネントは、最初の10,100個のメッセージをハードディスクから適用し、最後の100個のメッセージをメモリーから適用します。

リーダー・サーバーによってメモリーから書き出されたメッセージは、ハードディスク上のデータベース表に格納されます。これらのメッセージは、メモリーからキュー表へは書き出されません。

メッセージの書出しは、トランザクション単位で行われます。たとえば、このパラメータの設定が10000の場合、適用コンポーネントのリーダー・サーバーで、7,500個のメッセージがあるトランザクションと8,000個のメッセージがあるトランザクションの2つをアセンブルしていても、メッセージは書き出されません。

INFINITEの場合、メッセージは、適用コンポーネントによってトランザクションのメッセージ数に基づいてハードディスクに書き出されません。

適用コンポーネントによって書き出されたトランザクションについては、DBA_APPLY_SPILL_TXNデータ・ディクショナリ・ビューを問い合せてください。

関連項目: 「使用上のノート」

write_alert_log

YまたはN

Y

Yの場合、適用コンポーネントは、終了時にアラート・ログにメッセージを書き込みます。

Nの場合は、終了時にアラート・ログにメッセージを書き込みません。

メッセージには、適用コンポーネントの停止理由が示されます。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

新しいパラメータ設定の有効化が遅延する可能性

パラメータ値を変更したとき、パラメータの新しい値が有効になるまでに時間がかかる場合があります。

正の整数として解釈されるパラメータ

正の整数として解釈されるすべてのパラメータについて、設定可能な最大値は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ガイドを参照してください。

20.4.23 SET_REPERROR_HANDLERプロシージャ

このプロシージャは、特定のエラーをそのエラー番号に基づいて処理する方法を指定します。

特定のエラーに対して事前定義された複数のアクションから選択できます。

構文

DBMS_APPLY_ADM.SET_REPERROR_HANDLER(
  apply_name     IN  VARCHAR2,
  object         IN  VARCHAR2,
  error_number   IN  NUMBER,
  method         IN  VARCHAR2,
  source_object  IN  VARCHAR2  DEFAULT NULL,
  max_retries    IN  NUMBER    DEFAULT NULL,
  delay_csecs    IN  NUMBER    DEFAULT 6000);

パラメータ

表20-26 SET_REPERROR_HANDLERプロシージャのパラメータ

パラメータ 説明

apply_name

適用プロセスの名前。

object

[schema name.]table nameの形式で指定した、エラー・ハンドラが追加、変更または削除されるスキーマおよびターゲット表の名前。表が存在する必要があります。

たとえば、ユーザーhrが所有する表employeesに更新競合ハンドラを追加する場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

error_number

エラー処理番号。

0の場合、objectのすべてのエラー処理にデフォルトが使用されます。

method

特定のerror_numberが発生した場合に実行するアクションを指定します。

NULLの場合、error_numberのエラー・ハンドラが削除されます。

次の操作を指定できます。

  • ABEND: エラーが発生した場合、適用プロセスを停止します。

  • RECORD: エラーが発生した場合、LCRをエラー・キューに移動します。

  • IGNORE: エラーをサイレントで無視し、LCRを適用しません。

  • RETRY: LCRをmax_retriesの回数再試行します。

  • RETRY_TRANSACTION: トランザクションをmax_retriesの回数再試行します。各再試行の前にdelay_csecsのセンチ秒間待機します。

    RECORD_TRANSACTION: このエラーが発生した場合、トランザクション全体をエラー・キューに移動します。

source_object

[schema_name.]table_nameの形式で指定した、変更が発生したソース表のスキーマおよびオブジェクト名。

たとえば、ユーザーhrが所有する表employeesで変更が発生した場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

max_retires

methodRETRYおよびRETRY_TRANSACTIONアクションを再試行する最大回数。RETRYまたはRETRY_TRANSACTIONのいずれかで指定する必要があります。

delay_csecs

methodでのRETRYおよびRETRY_TRANSACTIONアクションの再試行間のセンチ秒数。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

エラー・ハンドラの優先順位

SET_UPDATE_CONFLICT_HANDLERまたはSET_DML_CONFLICT_HANDLERで指定された競合処理は、SET_REPERROR_HANDLERで指定されたアクションの前に試行されます。前述のいずれの方法でも解決されない場合、SET_DML_HANDLERで指定されたPL/SQLプロシージャがエラーを処理するためにコールされます。

20.4.24 SET_SCHEMA_INSTANTIATION_SCNプロシージャ

このプロシージャでは、指定したソース・データベース内の指定のスキーマに対して、およびオプションで、ソース・データベースのスキーマが所有する表に対して、指定したインスタンス化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);

パラメータ

表20-27 SET_SCHEMA_INSTANTIATION_SCNプロシージャのパラメータ

パラメータ 説明

source_schema_name

ソース・スキーマの名前。たとえば、hrのように指定します。

ルールベースの変換または適用ハンドラがスキーマ名を変更するように構成されている場合でも、スキーマにインスタンス化SCNを設定するときには、常に、ソース・データベースのスキーマの名前を指定します。

source_database_name

ソース・データベースのグローバル名。たとえば、DBS1.NETのようになります。

ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名がNETの場合にDBS1を指定すると、自動的にDBS1.NETが指定されます。

instantiation_scn

インスタンス化SCN。NULLを指定すると、ソース・スキーマに対するインスタンス化SCNのメタデータがデータ・ディクショナリから削除されます。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、ローカル適用コンポーネントの接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

recursive

TRUEの場合、指定したスキーマに対して、またソース・データベースのスキーマが所有するすべての表に対して、インスタンス化SCNが設定されます。このプロシージャは、現行のユーザーのセキュリティ・コンテキストにおいて、ソース・データベースのALL_TABLESデータ・ディクショナリ・ビューから、指定したスキーマによって所有される表を選択します。

FALSEの場合、指定したスキーマのインスタンス化SCNは設定されますが、表のインスタンス化SCNは設定されません。

ノート: recursiveTRUEに設定する場合は、接続先データベースからソース・データベースへのデータベース・リンクが必要です。その場合、データベース・リンクにはソース・データベースのグローバル名と同じ名前を付けて、現行のユーザーからアクセスできるようにしてください。また、このプロシージャで接続先データベースの表にインスタンス化SCNを設定するには、ソース・データベースのALL_TABLESまたはDBA_TABLESデータ・ディクショナリ・ビューの現行のユーザーから表にアクセスできるようにしてください。

source_root_name

ソース・ルート・データベースのグローバル名。

CDB以外の場合、このパラメータはNULLである必要があります。

CDBでは、特定のコンテナを識別するためにsource_databasesource_root_nameを両方とも指定する必要があります。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

SET_SCHEMA_INSTANTIATION_SCNプロシージャおよびLCR

このプロシージャによって指定されるインスタンス化SCNは、取得プロセスによって取得されたLCRに対してのみ使用されます。ユーザーが作成したLCRには使用されません。

インスタンス化SCNおよびDDL LCR

ソース・データベースからのスキーマ内のデータベース・オブジェクトに対するDDL LCRのコミットSCNが、接続先データベースでそのデータベース・オブジェクトに対するインスタンス化SCN以下の場合は、接続先データベースでの適用コンポーネントで、そのDDL LCRは無視されます。それ以外の場合は、DDL LCRが適用されます。

このプロシージャによって指定されるスキーマ・インスタンス化SCNは、次のタイプのDDL LCRで使用されます。

  • command_typeCREATE TABLEのDDL LCR

  • NULL以外のobject_ownerが指定されていて、base_table_ownerbase_table_nameがいずれも指定されていないDDL LCR

たとえば、このプロシージャによって設定されるスキーマ・インスタンス化SCNは、command_typeCREATE TABLEおよびALTER USERのDDL LCRに使用されます。

このプロシージャによって指定されるスキーマ・インスタンス化SCNは、command_typeCREATE 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情報を使用する適用プロセスと同一のコンテナから起動する必要があります。

20.4.25 SET_TABLE_INSTANTIATION_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);

パラメータ

表20-28 SET_TABLE_INSTANTIATION_SCNプロシージャのパラメータ

パラメータ 説明

source_object_name

[schema_name.]object_nameの形式で指定したソース・オブジェクトの名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

ルールベースの変換または適用ハンドラがスキーマ名またはデータベース・オブジェクト名を変更するように構成されている場合でも、データベース・オブジェクトにインスタンス化SCNを設定するときには、常に、ソース・データベースのスキーマおよびデータベース・オブジェクトの名前を指定します。

source_database_name

ソース・データベースのグローバル名。たとえば、DBS1.NETのようになります。

ドメイン名を指定しない場合は、自動的にドメイン名がデータベース名に追加されます。たとえば、ドメイン名がNETの場合にDBS1を指定すると、自動的にDBS1.NETが指定されます。

instantiation_scn

インスタンス化SCN。NULLを指定すると、ソース表に対するインスタンス化SCNのメタデータがデータ・ディクショナリから削除されます。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、ローカル適用コンポーネントの接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

ノート: CDBのルートからプロシージャを起動する場合、このパラメータをNULLにする必要があります。

source_root_name

ソース・ルート・データベースのグローバル名。

CDB以外の場合、このパラメータはNULLである必要があります。

CDBでは、特定のコンテナを識別するためにsource_databasesource_root_nameを両方とも指定する必要があります。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

インスタンス化SCNおよびLCR

ソース・データベースからの表に対するLCRのコミットSCNが、一部の接続先データベースでその表に対するインスタンス化SCN以下の場合は、接続先データベースでの適用コンポーネントで、そのLCRは無視されます。それ以外の場合は、LCRが適用されます。

このプロシージャによって指定される表のインスタンス化SCNは、次のタイプのLCRで使用されます。

  • 表に対する行LCR。

  • NULL以外のbase_table_ownerbase_table_nameが指定されているDDL LCR。ただし、command_typeCREATE TABLEのDDL LCRは除きます。

たとえば、このプロシージャによって設定されるインスタンス化SCNは、command_typeALTER 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情報を使用する適用プロセスと同一のコンテナから起動する必要があります。

20.4.26 SET_UPDATE_CONFLICT_HANDLERプロシージャ

このプロシージャは、指定オブジェクト用に事前作成された更新競合ハンドラを追加、変更または削除します。

構文

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);

パラメータ

表20-29 SET_UPDATE_CONFLICT_HANDLERプロシージャのパラメータ

パラメータ 説明

object_name

更新競合ハンドラが追加、変更または削除されるスキーマと表の名前。[schema_name.]object_nameの形式で指定します。

たとえば、ユーザーhrが所有する表employeesに更新競合ハンドラを追加する場合は、hr.employeesと指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

method_name

作成する更新競合ハンドラのタイプ。

事前作成されたハンドラの1つを指定できます。このハンドラは、行に対してソース・データベースの列リストを適用するかどうか、または接続先データベースの行の値を保持するかどうかを決定します。

  • MAXIMUM: ソース・データベースの列リストの値が解消列に関して大きい場合は、そのソース・データベースの列リストを適用します。それ以外の場合は、接続先データベースの値を保持します。

  • MINIMUM: ソース・データベースの列リストの値が解消列に関して小さい場合は、そのソース・データベースの列リストを適用します。それ以外の場合は、接続先データベースの値を保持します。

  • OVERWRITE: ソース・データベースの列リストを適用し、接続先データベースの列の値を上書きします。

  • DISCARD: 接続先データベースの列リストを保持し、ソース・データベースの列リストを廃棄します。

NULLの場合は、同じobject_nameresolution_columnおよびcolumn_listを持つ既存の更新競合ハンドラを削除します。NULL以外の場合は、同じobject_nameおよびresolution_columnを持つ既存の更新競合ハンドラを置換します。

resolution_column

更新競合ハンドラを一意に識別するために使用される列の名前。MAXIMUMおよびMINIMUM事前作成メソッドの場合、解消列は競合の解消にも使用されます。解消列は、column_listパラメータにリストされた列の1つであることが必要です。

このパラメータにNULLは指定できません。OVERWRITEおよびDISCARD事前作成メソッドの場合は、列リスト内のどの列でも指定できます。

column_list

競合ハンドラがコールされる列のリスト。

同一の列が複数の列リストに存在することはできません。

適用コンポーネントが行論理変更レコード(行LCR)を適用しようとしたときに、リスト内の1つ以上の列に対して競合が発生すると、競合を解消するために競合ハンドラがコールされます。競合ハンドラは、リストにない列でのみ競合が発生した場合はコールされません。

ノート: 事前作成された更新競合ハンドラでは、LOB列、LONG列、LONG RAW列、ユーザー定義タイプの列およびオラクル社提供のタイプの列がサポートされません。列がこれらのタイプである場合は、column_listパラメータに指定しないでください。

apply_database_link

Oracle以外のデータベースへのデータベース・リンクの名前。このパラメータは、接続先データベースがOracle以外のデータベースの場合にのみ設定する必要があります。

ノート: 現在、Oracle以外のデータベースに変更を適用するときに、競合ハンドラはサポートされません。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

参照:

事前作成された更新競合ハンドラおよびカスタム更新競合ハンドラの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

既存の更新競合ハンドラの変更

既存の更新競合ハンドラを変更する場合は、既存の更新競合ハンドラの表と解消列を指定します。事前作成メソッドまたは列リストを変更できます。

既存の更新競合ハンドラの削除

既存の更新競合ハンドラを削除する場合は、事前作成メソッドにNULLを指定し、既存の更新競合ハンドラの表、列リストおよび解消列を指定します。

競合に対する一連の処理

更新の競合が発生した場合、次の一連の処理が実行されます。

  1. 適切な更新競合ハンドラをコールして、競合を解消します。

  2. 更新競合ハンドラが指定されていない場合、または更新競合ハンドラで競合を解消できない場合は、適用コンポーネント、表および操作に対する適切なエラー・ハンドラをコールしてエラーを処理します。

  3. エラー・ハンドラが指定されていない、またはエラー・ハンドラでエラーを解決できない場合は、エラーが発生し、エラーの原因となった行LCRが含まれているトランザクションがエラー・キューに移されます。

    参照:

    エラー・ハンドラの設定方法の詳細は、「DMLハンドラ・プロシージャまたはエラー・ハンドラ・プロシージャの署名」を参照してください。

競合に対するプロシージャ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列など、列リストにない列でのみ競合が発生した場合、この競合ハンドラはコールされません。

20.4.27 SET_VALUE_DEPENDENCYプロシージャ

値の依存性を設定または削除します。値の依存性とは、複数の表の列間の関係を規定する仮想的な依存性の定義です。

適用コンポーネントでは、値の依存性の名前を使用して、値の依存性に定義されている列が含まれている行論理変更レコード(行LCR)間の依存性を検出します。値の依存性には、表間の仮想的な外部キー関係を定義できますが、外部キー関係とは異なり、複数のデータベース・オブジェクトを含めることができます。

このプロシージャはオーバーロードされています。attribute_listパラメータとattribute_tableパラメータは、両方同時には指定できません。

構文

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);

パラメータ

表20-30 SET_VALUE_DEPENDENCYプロシージャのパラメータ

パラメータ 説明

dependency_name

値の依存性の名前。

指定した名前の依存性が存在しない場合は、作成されます。

指定した名前の依存性が存在する場合は、指定したオブジェクトおよび属性がその依存性に追加されます。

NULLに設定すると、エラーが発生します。

object_name

[schema_name.]table_nameの形式で指定した表の名前。たとえば、hr.employeesのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLに設定して、指定した依存性が存在する場合、その依存性は削除されます。NULLに設定して、指定した依存性が存在しない場合、エラーが発生します。

NULLに設定すると、attribute_listおよびattribute_tableNULLにする必要があります。

attribute_list

表内の列名のカンマ区切りリスト。エントリ間に空白を挿入しないでください。

attribute_table

表内の列名が含まれているDBMS_UTILITY.NAME_ARRAYタイプのPL/SQL連想配列。最初の列名は位置1、2番目は位置2、以降同様に設定されている必要があります。表の最後をNULLにする必要はありません。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

SET_VALUE_DEPENDENCYプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、XStreamアウトバウンド・サーバーに影響を与えません。

SET_VALUE_DEPENDENCYプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.28 START_APPLYプロシージャ

このプロシージャでは、適用コンポーネントにメッセージの適用開始を指示します。

構文

DBMS_APPLY_ADM.START_APPLY(
   apply_name  IN  VARCHAR2);

パラメータ

表20-31 START_APPLYプロシージャのパラメータ

パラメータ 説明

apply_name

適用コンポーネント名。NULLを設定することはできません。所有者を指定しないでください。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

適用コンポーネントのステータス

適用コンポーネントのステータスは永続的に記録されます。したがって、ステータスがENABLEDの場合、適用コンポーネントはデータベース・インスタンスの起動時に開始されます。適用コンポーネント(annn)は、Oracleバックグラウンド・プロセスです。DBMS_AQADM.START_QUEUEおよびDBMS_AQADM.STOP_QUEUEのエンキューとデキューの状態は、適用コンポーネントの開始ステータスには影響を与えません。

START_APPLYプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、適用プロセスとアウトバウンド・サーバーに対して同じように動作します。

START_APPLYプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。

20.4.29 STOP_APPLYプロシージャ

このプロシージャでは、適用コンポーネントによるメッセージの適用を停止し、適用が終了していないトランザクションをロールバックします。

構文

DBMS_APPLY_ADM.STOP_APPLY(
   apply_name  IN  VARCHAR2,
   force       IN  BOOLEAN   DEFAULT FALSE);

パラメータ

表20-32 STOP_APPLYプロシージャのパラメータ

パラメータ 説明

apply_name

適用コンポーネント名。NULLを設定することはできません。所有者を指定しないでください。

force

TRUEに設定すると、適用コンポーネントは可能なかぎり早く停止されます。

FALSEに設定すると、適用された一連のトランザクションに不整合のないことが確認された後で、適用コンポーネントが停止されます。

適用コンポーネントの動作は、forceパラメータに指定された設定、およびcommit_serialization適用コンポーネント・パラメータに指定された設定によって決まります。詳細は、「使用上のノート」を参照してください。

使用上のノート

このプロシージャには、次の使用上のノートが適用されます。

適用コンポーネントのステータス

適用コンポーネントのステータスは永続的に記録されます。したがって、ステータスが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はロールバックされます。

参照:

commit_serialization適用コンポーネント・パラメータの詳細は、「SET_PARAMETERプロシージャ」を参照してください。

STOP_APPLYプロシージャおよびXStreamアウトバウンド・サーバー

このプロシージャは、適用プロセスとアウトバウンド・サーバーに対して同じように動作します。

STOP_APPLYプロシージャおよびXStreamインバウンド・サーバー

このプロシージャは、適用プロセスとインバウンド・サーバーに対して同じように動作します。