162 DBMS_STREAMS_ADM

DBMS_STREAMS_ADMパッケージは、Oracle Streamsパッケージの1つであり、Oracle Streams環境を構成するためのサブプログラムを提供します。

また、このパッケージには、取得、伝播、適用およびデキューに関する簡単なルールの追加と削除を、表、スキーマおよびデータベースのレベルで実行するためのサブプログラムもあります。このパッケージには、XStreamアウトバウンド・サーバーおよびインバウンド・サーバーを構成および管理するためのサブプログラムも含まれます。

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

162.1 DBMS_STREAMS_ADMの概要

DBMS_STREAMS_ADMパッケージは、Oracle Streamsパッケージの1つであり、Oracle Streams環境を構成するためのサブプログラムを提供します。

また、このパッケージには、取得、伝播、適用およびデキューに関する簡単なルールの追加と削除を、表、スキーマおよびデータベースのレベルで実行するためのサブプログラムもあります。これらのルールでは、論理変更レコード(LCR)がサポートされ、LCRには、行のLCRとデータ定義言語(DDL)のLCRがあります。このパッケージには、特定のメッセージ・タイプのメッセージ・ルールを作成するサブプログラムが用意されています。また、キューの作成およびOracle Streamsメタデータ(データ・ディクショナリ情報など)の管理を実行するサブプログラムもあります。

より複雑なルールが必要な場合は、「DBMS_RULE」パッケージを参照してください。

参照:

162.2 DBMS_STREAMS_ADMの推奨されないサブプログラム

次のDBMS_STREAMS_ADMサブプログラムは、非推奨になりました。

ノート:

推奨されないサブプログラムは、使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

Oracle Database 10g リリース2(10.2)以上では、次のサブプログラムの使用は推奨されていません。

  • MAINTAIN_SIMPLE_TABLESPACE

    このプロシージャのかわりにMAINTAIN_SIMPLE_TTSプロシージャを使用してください。

  • MAINTAIN_TABLESPACES

    このプロシージャのかわりにMAINTAIN_TTSプロシージャを使用してください。

162.3 DBMS_STREAMS_ADMのセキュリティ・モデル

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

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

ユーザーは各Oracle Streamsクライアントと関連付けられます。

ノート:

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

Oracle Streams管理者

このパッケージ内のサブプログラムを実行するユーザーが必要な権限を所有するには、Oracle Streams管理者を構成し、このパッケージを使用するときにOracle Streams管理者として接続します。

参照:

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

取得ユーザー

次のプロシージャを使用すると、取得プロセスを作成できます。

次のプロシージャを使用すると、同期取得を作成できます。

これらのプロシージャの1つによって取得プロセスまたは同期取得が作成されると、現行のユーザーが取得ユーザーとして設定されます。取得ユーザーとは、そのユーザーのセキュリティ・ドメイン内で、取得プロセスまたは同期取得が、そのルール・セットを満たす変更を取得し、これらのルールに対して構成されているカスタム・ルールベースの変換を実行するユーザーのことです。このユーザーには、変更を取得するためのいくつかの権限が必要です。前述のプロシージャを実行すると、取得プロセスまたは同期取得で使用されるキューに対するENQUEUE権限が取得ユーザーに付与され、その取得ユーザーがキューの保護キュー・ユーザーとして構成されます。

参照:

変更の取得に必要な権限は、「CREATE_CAPTUREプロシージャ」および「CREATE_SYNC_CAPTUREプロシージャ」を参照してください(「capture_userパラメータ」を参照)。

伝播ユーザー

次のプロシージャを使用すると、伝播を作成できます。

伝播の作成時には、伝播ジョブも作成されることがあります。前述のプロシージャの1つを実行するときに伝播ジョブが作成されると、そのプロシージャを実行するユーザーが伝播ジョブの所有者になります。各伝播ジョブはOracle Schedulerジョブです。Oracle Schedulerを使用して、伝播ジョブのスケジュールを調整できます。

ノート:

  • ソース・キューの所有者が伝播を実行しますが、伝播ジョブの所有者はそれを作成したユーザーです。この2人のユーザーは同一であっても異なっていてもかまいません。

  • 伝播を正しく動作させるには、メッセージを伝播するのに必要な権限をソース・キューの所有者に付与する必要があります。

参照:

Oracle Streams適用プロセスの適用ユーザー

次のプロシージャを使用すると、適用プロセスを作成できます。

これらのプロシージャの1つによって適用プロセスが作成されると、現行のユーザーが適用ユーザーとして設定されます。適用プロセスにおける適用ユーザーとは、そのセキュリティ・ドメイン内で、適用プロセスが、そのルール・セットを満たすメッセージをデキューするユーザーのことです。

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

参照:

変更の適用に必要な権限は、「CREATE_APPLYプロシージャ」を参照してください(「apply_userパラメータ」を参照)。

XStreamインバウンド・サーバーの適用ユーザー

次のプロシージャを使用すると、XStreamインバウンド・サーバーを作成できます。

ノート:

  • DBMS_XSTREAM_ADMパッケージのプロシージャを使用して、ルールを作成したり、ルールをXStreamインバウンド・サーバーに追加することをお薦めします。詳細は、「DBMS_XSTREAM_ADM」を参照してください。

  • これらのプロシージャでは、アウトバウンド・サーバーは作成できません。

streams_nameパラメータの設定がNULLで、関連する適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが存在しない場合は、システム生成の名前で適用プロセスが自動的に作成されます。

適用プロセスは、取得プロセスから取得された論理変更レコード(LCR)を受信する場合は、適用プロセスのままです。適用プロセスは、取得プロセスから取得されたLCRを受信する前にXStreamクライアント・アプリケーションに連結されると、インバウンド・サーバーになることができます。初期接続の後では、適用プロセスがインバウンド・サーバーに変更されることはなく、インバウンド・サーバーが適用プロセスに変更されることもありません。

これらのプロシージャの1つによってインバウンド・サーバーが作成されると、現行のユーザーが適用ユーザーとして設定されます。適用ユーザーとは、そのセキュリティ・ドメイン内で、XStreamクライアント・アプリケーションがOracle Databaseに連結されるユーザーのことです。

適用ユーザーは、データベース・オブジェクトに変更を直接適用し、インバウンド・サーバー・ルールに対して構成されているカスタム・ルールベースの変換を実行し、インバウンド・サーバーに対して構成されている適用ハンドラを実行します。このユーザーには、変更を適用できる権限が必要です。前述のプロシージャを実行すると、インバウンド・サーバーで使用されるキューに対するDEQUEUE権限が適用ユーザーに付与され、その適用ユーザーが保護キュー・ユーザーとして構成されます。

各インバウンド・サーバーは、それぞれが一意の名前を持つ必要があります。この名前は、同じデータベースの適用プロセス、アウトバウンド・サーバーまたはメッセージ・クライアントでは使用できず、また、同じデータベースの別のインバウンド・サーバーでも使用できません。

関連する適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが存在する場合、プロシージャではインバウンド・サーバーは作成されません。かわりに、プロシージャではその関連する適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが使用されます。streams_nameパラメータで既存の適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが指定されている場合、その指定のクライアントが使用されます。

streams_nameパラメータがNULLで、streams_typeパラメータがapplyに設定されている場合、関連する適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが次のいずれかの方法で特定されます。

  • source_databaseパラメータで指定されるソース・データベースを使用し、queue_nameパラメータで指定されるキューを使用する既存の適用プロセスまたはアウトバウンド・サーバーが1つ存在する場合は、その適用プロセスまたはアウトバウンド・サーバーが選択されます。

  • source_databaseパラメータの設定がNULLで、queue_nameパラメータで指定されるキューを使用する既存の適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが1つ存在する場合は、その適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが選択されます。

streams_nameパラメータの設定がNULLで、関連する適用プロセス、インバウンド・サーバーまたはアウトバウンド・サーバーが複数存在する場合は、エラーが発生します。

ノート:

XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。

メッセージ・クライアント・ユーザー

次のプロシージャを使用すると、メッセージ・クライアントを作成できます。

これらのプロシージャの1つによってメッセージ・クライアントが作成された場合は、メッセージ・クライアントを使用してキューからデキューする権限が、プロシージャを実行するユーザーに付与されます。前述のプロシージャを実行すると、このユーザーがキューの保護キュー・ユーザーとして構成され、このユーザーのみがメッセージ・クライアントを使用できます。

162.4 Oracle StreamsクライアントおよびXStreamクライアントのルールを作成するプロシージャ

Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。XStreamクライアントには、XStreamアウトバウンド・サーバーおよびインバウンド・サーバーがあります。DBMS_STREAMS_ADMパッケージのプロシージャの中には、Oracle StreamsクライアントおよびXStreamクライアントのルール・セットにルールを追加するものがあります。ルールは、REDOログ内の変更に関するルール、表に対するデータ操作言語(DML)変更に関するルール、論理変更レコード(LCR)に関するルール、ユーザー・メッセージに関するルールに分類することができます。

論理変更レコード(LCR)は、データ操作言語(DML)の操作によって生じる行の変更を表すか、データ定義言語(DDL)の変更を表します。行の変更を表すLCRは行LCRと呼ばれ、DDLの変更を表すLCRはDDL LCRと呼ばれます。つまり、LCRは、取得プロセスまたは同期取得によって収集された変更を表すか、ユーザーまたはアプリケーションによって行われる変更を表すことができます。ユーザー・メッセージは、ユーザーが定義したタイプに基づくカスタム・メッセージで、ユーザーまたはアプリケーションによって作成されます。

取得プロセス、伝播、適用プロセス、メッセージ・クライアント、アウトバウンド・サーバーまたはインバウンド・サーバーには、ポジティブ・ルール・セットとネガティブ・ルール・セットの両方を指定できます。同期取得には、ポジティブ・ルール・セットのみを指定できます。

サブセット・ルールを作成するプロシージャ以外のすべてのプロシージャ、および同期取得以外のすべてのクライアントでは、作成したルールに対してルール・セットのタイプ(ポジティブまたはネガティブ)を指定するため、inclusion_ruleパラメータを使用します。指定されたタイプのルール・セットがクライアントに存在しない場合は、ルール・セットが自動的に作成され、そのルール・セットにルールが追加されます。クライアントの既存のルール・セット内にある他のルールは、この影響を受けません。ルール・セットに新しいルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。ポジティブ・ルール・セットとネガティブ・ルール・セットの両方がクライアントに存在する場合は、常にネガティブ・ルール・セットが先に評価されます。

ノート:

XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。

参照:

Oracle Streamsでルールを使用する方法の詳細は、『Oracle Streams概要および管理』を参照してください。

REDOログ内の変更に関する取得プロセス・ルール

次に示すプロシージャでstreams_typeパラメータにcaptureを指定すると、取得プロセスのルール・セットにルールが追加されます。

  • ADD_GLOBAL_RULESプロシージャは、ソース・データベースに対するすべての変更に関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_GLOBAL_RULESプロシージャ」を参照してください。

  • ADD_SCHEMA_RULESプロシージャは、指定したスキーマに対する変更に関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SCHEMA_RULESプロシージャ」を参照してください。

  • ADD_SUBSET_RULESプロシージャは、指定した表の行のサブセットに対するDMLの変更に関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SUBSET_RULESプロシージャ」を参照してください。

  • ADD_TABLE_RULESプロシージャは、指定した表に対する変更に関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_TABLE_RULESプロシージャ」を参照してください。

前述のプロシージャの1つによって取得プロセスのポジティブ・ルール・セットにルールが追加されると、取得プロセスは、DMLの変更から生じる行の変更、またはDDLの変更(あるいはその両方)をソース・データベースから取得し、指定されたキューにそれらの変更をエンキューします。前述のプロシージャの1つによって取得プロセスのネガティブ・ルール・セットにルールが追加されると、取得プロセスは、行の変更、またはDDLの変更(あるいはその両方)をソース・データベースから削除します。

取得プロセスは、変更をソース・データベース上でローカルに取得するか、ダウンストリーム・データベース上でリモートに取得します。したがって、取得プロセス・ルールの場合は、ソース・データベース上またはダウンストリーム・データベース上でプロシージャを実行する必要があります。

取得プロセスがローカル取得プロセス、またはソース・データベースに対するデータベース・リンクを使用するダウンストリーム取得プロセスである場合は、インスタンス化に適したデータベース・オブジェクトが前述のプロシージャによって自動的に準備されます。

  • ADD_GLOBAL_RULESは、DBMS_CAPTURE_ADMパッケージのPREPARE_GLOBAL_INSTANTIATIONプロシージャをソース・データベースで起動します。

  • ADD_SCHEMA_RULESは、DBMS_CAPTURE_ADMパッケージのPREPARE_SCHEMA_INSTANTIATIONプロシージャをソース・データベースで起動します。

  • ADD_SUBSET_RULESおよびADD_TABLE_RULESは、DBMS_CAPTURE_ADMパッケージのPREPARE_TABLE_INSTANTIATIONプロシージャをソース・データベースで起動します。

また、これらのプロシージャによって、インスタンス化用に用意される表の主キー、一意キー、外部キーおよびビットマップ索引の列でのサプリメンタル・ロギングも可能になります。主キー列のログは、無条件に記録されます。一意キー、外部キーおよびビットマップ索引の列のログは、条件付きで記録されます。

取得プロセスがソース・データベースに対するデータベース・リンクを使用しないダウンストリーム取得プロセスの場合は、インスタンス化に適したデータベース・オブジェクトの準備、および必要なサプリメンタル・ロギングの指定をソース・データベースでユーザーが手動で行う必要があります。

前述のプロシージャの1つをダウンストリーム・データベース上で実行する場合は、ユーザーがsource_databaseパラメータを使用してソース・データベースを指定し、あらかじめ存在する取得プロセスを指定する必要があります。このプロシージャがダウンストリーム・データベース上で実行される場合、プロシージャでは新たに取得プロセスを作成できません。ダウンストリーム・データベース上で取得プロセスを作成する場合は、DBMS_CAPTURE_ADMパッケージのCREATE_CAPTUREプロシージャを使用します。

参照:

CREATE_CAPTUREプロシージャ、およびインスタンス化するデータベース・オブジェクトを準備するプロシージャの詳細は、「DBMS_CAPTURE_ADMサブプログラムの要約」を参照してください。

表に対するDML変更に関する同期取得ルール

次に示すプロシージャでstreams_typeパラメータにsync_captureを指定すると、同期取得のルール・セットにルールが追加されます。

  • ADD_SUBSET_RULESプロシージャは、指定した表の行のサブセットに対するDMLの変更に関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SUBSET_RULESプロシージャ」を参照してください。

  • ADD_TABLE_RULESプロシージャは、指定した表に対するDML変更に関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_TABLE_RULESプロシージャ」を参照してください。

前述のプロシージャの1つによって同期取得のポジティブ・ルール・セットにルールが追加されると、同期取得はソース・データベースでの表に対するDMLの変更から生じる行の変更を取得し、指定されたキューにそれらの変更をエンキューします。同期取得には、ネガティブ・ルール・セットを指定できません。

同期取得では、変更は同期取得が構成されたデータベースでローカルに取得されます。このデータベースは、同期取得によって取得される変更のソース・データベースです。したがって、同期取得ルールの場合は、ソース・データベース上でプロシージャを実行する必要があります。

これらのプロシージャでは、DBMS_CAPTURE_ADMパッケージのPREPARE_SYNC_INSTANTIATIONファンクションをソース・データベースで起動することによって、適切な表のインスタンス化が自動的に準備されます。

ノート:

  • 同期取得では、ADD_SUBSET_RULESまたはADD_TABLE_RULES以外のプロシージャによって作成された、ルール・セット内のルールは無視されます。

  • ADD_TABLE_RULESプロシージャまたはADD_SUBSET_RULESプロシージャでルールが同期取得のルール・セットに追加される場合、プロシージャは指定した表の排他ロックを取得する必要があります。指定された表に未処理のトランザクションがある場合、プロシージャはロックを取得できるまで待機します。

LCRに関する伝播ルール

次のプロシージャは、LCRに関する伝播ルールを伝播のルール・セットに追加します。

  • ADD_GLOBAL_PROPAGATION_RULESプロシージャは、ソース・キューのすべてのLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_GLOBAL_PROPAGATION_RULESプロシージャ」を参照してください。

  • ADD_SCHEMA_PROPAGATION_RULESプロシージャは、ソース・キュー内のLCRのうち、指定したスキーマに対する変更が記録されるLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SCHEMA_PROPAGATION_RULESプロシージャ」を参照してください。

  • ADD_SUBSET_PROPAGATION_RULESプロシージャは、ソース・キュー内の行LCRのうち、指定した表の行のサブセットに対するDMLの変更結果が記録される行LCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SUBSET_PROPAGATION_RULESプロシージャ」を参照してください。

  • ADD_TABLE_PROPAGATION_RULESプロシージャは、ソース・キュー内のLCRのうち、指定した表に対する変更が記録されるLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_TABLE_PROPAGATION_RULESプロシージャ」を参照してください。

前述のプロシージャの1つによって伝播のポジティブ・ルール・セットに伝播ルールが追加される場合、追加された伝播ルールに従い、ソース・キューのLCRが宛先キューに伝播されます。前述のプロシージャの1つによって伝播のネガティブ・ルール・セットに伝播ルールが追加される場合、追加された伝播ルールに従い、ソース・キューのLCRが破棄されます。前述のプロシージャの1つを使用してルールを追加するときに、source_databseパラメータに値を指定すると、指定したソース・データベースに関する条件がルールに組み込まれます。

ユーザー・メッセージに関する伝播ルール

ADD_MESSAGE_PROPAGATION_RULEプロシージャは、伝播のルール・セットに対してメッセージ・ルールを追加します。このプロシージャによって伝播のポジティブ・ルール・セットにルールが追加される場合、追加された伝播ルールに従い、特定タイプのユーザー・メッセージのうち、ルール条件がTRUEと評価されるメッセージがソース・キューから宛先キューに伝播されます。このプロシージャによって伝播のネガティブ・ルール・セットにルールが追加される場合、追加された伝播ルールに従い、ソース・キュー内の特定タイプのユーザー・メッセージのうち、ルール条件がTRUEと評価されるメッセージが伝播によって破棄されます。このプロシージャによって作成されるルールには自動的にルール名が割り当てられます。

LCRに関する適用プロセス・ルール

次に示すプロシージャでstreams_typeパラメータにapplyを指定し、streams_nameパラメータに適用プロセスを指定すると、適用プロセスのルール・セットにルールが追加されます。

  • ADD_GLOBAL_RULESプロシージャは、適用プロセス・キュー内のすべてのLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_GLOBAL_RULESプロシージャ」を参照してください。

  • ADD_SCHEMA_RULESプロシージャは、適用プロセス・キュー内のLCRのうち、指定したスキーマに対する変更が記録されるLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SCHEMA_RULESプロシージャ」を参照してください。

  • ADD_SUBSET_RULESプロシージャは、適用プロセス・キュー内の行LCRのうち、指定した表の行のサブセットに対するDMLの変更結果が記録される行LCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SUBSET_RULESプロシージャ」を参照してください。

  • ADD_TABLE_RULESプロシージャは、適用プロセス・キュー内のLCRのうち、指定した表に対する変更が記録されるLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_TABLE_RULESプロシージャ」を参照してください。

前述のプロシージャの1つによって適用プロセスのポジティブ・ルール・セットにルールが追加される場合、追加されたルールに従い、適用プロセスのキュー内のLCRが適用されます。前述のプロシージャの1つによって適用プロセスのネガティブ・ルール・セットにルールが追加される場合、追加されたルールに従い、適用プロセスのキュー内のLCRが破棄されます。適用プロセス・ルールの場合、これらのプロシージャを接続先データベースで実行する必要があります。

前述のプロシージャの1つで作成した適用プロセスによって変更を適用すると、値が'00'(2桁のゼロ)のタグが接続先データベースのREDOログ内に作成されます。DBMS_APPLY_ADMパッケージのALTER_APPLYプロシージャを使用すると、適用プロセスの作成後に必要に応じてタグの値を変更できます。

適用プロセスは、単一のソース・データベースから取得したLCRを適用できます。前述のプロシージャの1つによって適用プロセスが作成される場合は、source_databaseパラメータを使用して、適用プロセスにソース・データベースを指定する必要があります。source_databaseパラメータがNULLで、前述のプロシージャの1つによって適用プロセスが作成される場合は、適用プロセスに渡される最初のLCRのソース・データベース名が適用プロセス用のソース・データベースとして使用されます。

適用プロセス・ルール・セットのルールによって、適用プロセスがデキューするメッセージが決まります。前述のプロシージャの1つを使用してルールを追加するときに、source_databaseパラメータに値を指定すると、指定したソース・データベースに関する条件がルールに組み込まれます。適用プロセスのソース・データベースとは異なるソース・データベースで、適用プロセスによるLCRのデキューを行うと、エラーが発生します。また、既存の適用プロセスにルールを追加する場合は、適用プロセス用のソース・データベースと異なるデータベースをsource_databaseパラメータに指定できません。適用プロセスのソース・データベースを特定する場合は、DBA_APPLY_PROGRESSデータ・ディクショナリ・ビューへの問合せを行います。

前述のプロシージャの1つで作成した適用プロセスによって適用できるのは、ローカル・データベース上のメッセージと、取得済のメッセージに限られます。リモート・データベース上のメッセージを適用する適用プロセス、またはユーザー・メッセージを適用する適用プロセスを作成するには、DBMS_APPLY_ADMパッケージのCREATE_APPLYプロシージャを使用します。

また、DBMS_APPLY_ADM.CREATE_APPLYプロシージャを実行するときは、apply_capturedapply_userapply_database_linkapply_tagの各パラメータに対してデフォルト以外の値を指定できます。作成済の適用プロセスのルール・セットにルールを追加するには、DBMS_STREAMS_ADMパッケージ内のいずれかのプロシージャを使用します。

ユーザー・メッセージに関する適用プロセス・ルール

ADD_MESSAGE_RULEプロシージャのstreams_typeパラメータにapplyを指定すると、適用プロセスのルール・セットに対してメッセージ・ルールが追加されます。適用プロセス・ルールの場合は、このプロシージャを接続先データベースで実行する必要があります。

このプロシージャによって適用プロセスのポジティブ・ルール・セットにルールが追加される場合、ユーザー・メッセージのうち、適用プロセス・ルールを満たす特定タイプのメッセージが適用プロセスによってデキューされ、メッセージ・ハンドラに送信されます。適用プロセス用のメッセージ・ハンドラが指定されていない場合は、DBMS_APPLY_ADMパッケージのALTER_APPLYプロシージャを使用して、メッセージ・ハンドラを設定する必要があります。このプロシージャによって適用プロセスのネガティブ・ルール・セットにルールが追加される場合、ユーザー・メッセージのうち、適用プロセス・ルールを満たす特定タイプのメッセージが適用プロセスによって破棄されます。

LCRに関するメッセージ・クライアント・ルール

次に示すプロシージャでstreams_typeパラメータにdequeueを指定すると、メッセージ・クライアントのルール・セットにルールが追加されます。

  • ADD_GLOBAL_RULESプロシージャは、メッセージ・クライアント・キュー内のすべてのLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_GLOBAL_RULESプロシージャ」を参照してください。

  • ADD_SCHEMA_RULESプロシージャは、メッセージ・クライアント・キュー内のLCRのうち、指定したスキーマに対する変更が記録されるLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SCHEMA_RULESプロシージャ」を参照してください。

  • ADD_SUBSET_RULESプロシージャは、メッセージ・クライアント・キュー内の行LCRのうち、指定した表の行のサブセットに対するDMLの変更結果が記録される行LCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_SUBSET_RULESプロシージャ」を参照してください。

  • ADD_TABLE_RULESプロシージャは、メッセージ・クライアント・キュー内のLCRのうち、指定した表に対する変更が記録されるLCRに関してルール条件がTRUEと評価されるルールを追加します。詳細は、「ADD_TABLE_RULESプロシージャ」を参照してください。

前述のプロシージャの1つによってメッセージ・クライアントのポジティブ・ルール・セットにルールが追加されると、メッセージ・クライアントは、source_databaseパラメータで指定したソース・データベースで作成された永続的な行LCRまたはDDL LCR(あるいはその両方)をデキューできます。前述のプロシージャの1つによってメッセージ・クライアントのネガティブ・ルール・セットにルールが追加されると、メッセージ・クライアントは、source_databaseパラメータで指定されるソース・データベース上で作成された永続的な行LCRまたはDDL LCR(あるいはその両方)を破棄します。これらのプロシージャは、メッセージ・クライアントによってメッセージをデキューするデータベース上で実行する必要があります。

ユーザー・メッセージに関するメッセージ・クライアント・ルール

ADD_MESSAGE_RULEプロシージャではstreams_typeパラメータにdequeueを指定すると、メッセージ・クライアントのルール・セットに対してメッセージ・ルールが追加されます。このプロシージャは、メッセージをデキューするデータベース上で実行する必要があります。

このプロシージャによってメッセージ・クライアントのポジティブ・ルール・セットにルールが追加された場合、ユーザー・メッセージのうち、メッセージ・ルールを満たす特定タイプのメッセージがメッセージ・クライアントによってデキューされます。このプロシージャによってメッセージ・クライアントのネガティブ・ルール・セットにルールが追加された場合、ユーザー・メッセージのうち、メッセージ・ルールを満たす特定タイプのメッセージがメッセージ・クライアントによって破棄されます。

LCRに関するXStreamアウトバウンド・サーバー・ルール

次に示すプロシージャでstreams_typeパラメータにapplyを指定し、streams_nameパラメータにXStreamアウトバウンド・サーバーを指定すると、指定したアウトバウンド・サーバーのルール・セットにルールが追加されます。

  • ADD_GLOBAL_RULESプロシージャは、すべてのLCRに関してルール条件がTRUEと評価されるルールを追加します。

  • ADD_SCHEMA_RULESプロシージャは、指定したスキーマに対する変更が含まれるLCRに関してルール条件がTRUEと評価されるルールを追加します。

  • ADD_SUBSET_RULESプロシージャは、指定した表の行のサブセットに対するDMLの変更結果が含まれる行LCRに関してルール条件がTRUEと評価されるルールを追加します。

  • ADD_TABLE_RULESプロシージャは、指定した表に対する変更が含まれるLCRに関してルール条件がTRUEと評価されるルールを追加します。

これらのルールは、アウトバウンド・サーバーのキュー内のLCRに対して評価されます。

前述のプロシージャの1つによってアウトバウンド・サーバーのポジティブ・ルール・セットにルールが追加される場合、追加されたルールに従い、アウトバウンド・サーバーのキュー内のLCRがXStreamクライアント・アプリケーションに送信されます。前述のプロシージャの1つによってアウトバウンド・サーバーのネガティブ・ルール・セットにルールが追加される場合、追加されたルールに従い、アウトバウンド・サーバーのキュー内のLCRが破棄されます。アウトバウンド・サーバー・ルールの場合、XStreamクライアント・アプリケーションの連結先のデータベースで前述のプロシージャを実行してください。

アウトバウンド・サーバーは、単一のソース・データベースから取得したLCRを処理できます。ソース・データベースは、変更が発生したデータベースです。前述のプロシージャの1つによってアウトバウンド・サーバーのルール・セットにルールが追加される場合は、source_databaseパラメータを使用して、アウトバウンド・サーバーにソース・データベースを指定する必要があります。

アウトバウンド・サーバーのルール・セットのルールによって、アウトバウンド・サーバーがデキューするLCRが決まります。前述のプロシージャの1つを使用してルールを追加するときに、source_databaseパラメータに値を指定すると、指定したソース・データベースに関する条件がルールに組み込まれます。アウトバウンド・サーバーのソース・データベースとは異なるソース・データベースで、アウトバウンド・サーバーによるLCRのデキューを行うと、エラーが発生します。また、既存のアウトバウンド・サーバーにルールを追加する場合は、アウトバウンド・サーバー用のソース・データベースと異なるデータベースをsource_databaseパラメータに指定できません。アウトバウンド・サーバーのソース・データベースを特定する場合は、DBA_XSTREAM_OUTBOUNDデータ・ディクショナリ・ビューへの問合せを行います。

ノート:

これらのプロシージャでは、XStreamアウトバウンド・サーバーを作成できません。作成済のアウトバウンド・サーバーのルール・セットにルールを追加するには、DBMS_STREAMS_ADMパッケージ内のいずれかのプロシージャを使用します。

参照:

アウトバウンド・サーバーの作成の詳細は、Oracle DatabaseのXStreamガイドを参照してください。

LCRに関するXStreamインバウンド・サーバー・ルール

次に示すプロシージャでstreams_typeパラメータにapplyを指定し、streams_nameパラメータにXStreamインバウンド・サーバーを指定すると、指定したインバウンド・サーバーのルール・セットにルールが追加されます。

  • ADD_GLOBAL_RULESプロシージャは、インバウンド・サーバーに送信されたすべてのLCRに関してルール条件がTRUEと評価されるルールを追加します。

  • ADD_SCHEMA_RULESプロシージャは、インバウンド・サーバーに送信された、指定したスキーマに対する変更が含まれるLCRに関してルール条件がTRUEと評価されるルールを追加します。

  • ADD_SUBSET_RULESプロシージャは、インバウンド・サーバーに送信された、指定した表の行のサブセットに対するデータ定義言語(DML)の変更結果が含まれる行LCRに関してルール条件がTRUEと評価されるルールを追加します。

  • ADD_TABLE_RULESプロシージャは、インバウンド・サーバーに送信された、指定した表に対する変更が含まれるLCRに関してルール条件がTRUEと評価されるルールを追加します。

前述のプロシージャの1つによってインバウンド・サーバーのポジティブ・ルール・セットにルールが追加される場合、追加されたルールに従い、XStreamクライアント・アプリケーションによってインバウンド・サーバーに送信されたLCRが適用されます。前述のプロシージャの1つによってインバウンド・サーバーのネガティブ・ルール・セットにルールが追加される場合、追加されたルールに従い、XStreamクライアント・アプリケーションによってインバウンド・サーバーに送信されたLCRが破棄されます。インバウンド・サーバー・ルールの場合、XStreamクライアント・アプリケーションの連結先のデータベースで前述のプロシージャを実行してください。インバウンド・サーバーにルール・セットが存在しない場合、XStreamクライアント・アプリケーションによってインバウンド・サーバーに送信されたすべてのLCRが適用されます。

前述のプロシージャの1つで作成したインバウンド・サーバーによって変更を適用すると、値が'00'(2桁のゼロ)のタグが接続先データベースのREDOログ内に作成されます。DBMS_APPLY_ADMパッケージのALTER_APPLYプロシージャを使用すると、インバウンド・サーバーの作成後に必要に応じてタグの値を変更できます。

XStreamインバウンド・サーバーのルール・セットのルールによって、XStreamクライアント・アプリケーションからLCRを受信した後にどのLCRが適用され、どのLCRが破棄されるかが決まります。インバウンド・サーバーでは、XStreamクライアント・アプリケーションから送信されたLCRのみが処理されます。

前述のプロシージャの1つによってインバウンド・サーバーのルールが作成される場合、source_databaseパラメータは無視されます。

ノート:

streams_nameパラメータに指定された名前が存在しない場合、前述のプロシージャでは常に適用プロセスが作成されます。適用プロセスは、取得プロセスから取得されたLCRを受信する場合は、適用プロセスのままです。適用プロセスは、取得プロセスからLCRを受信する前にXStreamクライアント・アプリケーションに連結されると、インバウンド・サーバーになることができます。初期接続の後では、適用プロセスがインバウンド・サーバーに変更されることはなく、インバウンド・サーバーが適用プロセスに変更されることもありません。

参照:

インバウンド・サーバーの作成の詳細は、Oracle DatabaseのXStreamガイドを参照してください。

162.5 Oracle Streams環境を構成するプロシージャ

このパッケージの次のプロシージャは、Oracle Streamsで管理される環境を構成します。

  • MAINTAIN_CHANGE_TABLEプロシージャは、ソース・テーブルに対して行われたデータ操作言語(DML)の変更をチェンジ・テーブルに記録する、Oracle Streams環境を構成します。このプロシージャは、オプションで、表の一方向レプリケーション(ソース・データベースから接続先データベースへ)を構成することもできます。

  • MAINTAIN_GLOBALプロシージャは、データベース・レベルの変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

  • MAINTAIN_SCHEMASプロシージャは、指定されたスキーマへの変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

  • MAINTAIN_SIMPLE_TTSプロシージャは、ソース・データベース内の単一表領域のクローンを接続先データベースに作成し、指定された表領域への変更をこれらの2つのデータベース間でレプリケートするOracle Streams環境を構成します。

  • MAINTAIN_TABLESプロシージャは、指定された表への変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

  • MAINTAIN_TTSプロシージャは、ソース・データベース内の表領域セットのクローンを接続先データベースに作成し、指定された表領域への変更をこれらの2つのデータベース間でレプリケートするOracle Streams環境を構成します。

  • PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャ

Oracle Streamsレプリケーションの構成を完了するには、PRE_INSTANTIATION_SETUPプロシージャとPOST_INSTANTIATION_SETUPプロシージャの両方を組み合せて使用する必要があります。通常、PRE_INSTANTIATION_SETUPプロシージャとPOST_INSTANTIATION_SETUPプロシージャは、データベースの保守操作に使用されます(停止時間はほとんど生じません)。詳細は、『Oracle Streams概要および管理』を参照してください。

参照:

これらのプロシージャの使用方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

自動プラットフォーム変換

ソース・データベースと接続先データベースを異なるプラットフォームで実行する場合は、転送されるデータファイルが、これらのプロシージャまたはこれらのプロシージャで生成されるスクリプトによって適切なプラットフォームに自動的に変換されます。

これらのプロシージャで実行される処理

これらのプロシージャのいずれかによって実行される全アクションの詳細を表示するには、プロシージャを使用してスクリプトを生成し、このスクリプトをテキスト・エディタで表示します。

構成の進行状況およびリカバリ機能

perform_actionsパラメータをTRUEに設定して、これらのいずれかのプロシージャを実行すると、その構成処理に関するメタデータがデータ・ディクショナリ・ビューのDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSに記録されます。エラーが発生したためプロシージャが停止した場合は、エラーの原因となった状況を解消してからRECOVER_OPERATIONプロシージャを使用すると、構成を完了できます。

ノート:

perform_actionsパラメータをFALSEに設定して、これらのいずれかのプロシージャを実行した場合は、前述のビューにデータが格納されません。また、これらのいずれかのプロシージャで生成されたスクリプトを実行した場合も、データはビューに格納されません。

これらのプロシージャの実行要件

これらのいずれかのプロシージャを使用する場合は、次の要件を満たすように注意してください。

  • プロシージャは、取得データベースで実行します。取得データベースとは、ソース・データベースに加えられた変更を取得する取得プロセスを含むデータベースのことです。取得データベースがソース・データベースと同一の場合は、ローカル取得プロセスが構成されます。取得データベースがソース・データベースと異なる場合は、ダウンストリーム取得プロセスが構成されます。取得データベースの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

  • プロシージャを実行するユーザーは、ソース・データベースから接続先データベースへのデータベース・リンクを使用できる必要があります。このデータベース・リンクの名前は、接続先データベースのグローバル名と同じである必要があります。

  • プロシージャでダウンストリーム取得を構成する場合は、取得データベース上の対応するユーザーが、データベース・リンクを使用してソース・データベースにアクセスできる必要があります。このデータベース・リンクの名前は、ソース・データベースのグローバル名と同じである必要があります。

  • プロシージャでダウンストリーム取得を構成し、取得データベースが接続先データベースと異なる場合は、取得データベース上の対応するユーザーが、データベース・リンクを使用して接続先データベースにアクセスできる必要があります。このデータベース・リンクの名前は、接続先データベースのグローバル名と同じである必要があります。

  • 構成時に、両方のデータベースがオープンしている必要があります。プロシージャでスクリプトの生成のみを行う場合は、プロシージャの実行時に、destination_databaseパラメータで指定されるデータベースが開いている必要はありませんが、生成されたスクリプトを実行するときは、両方のデータベースをオープンしておく必要があります。

  • プロシージャを実行するユーザーには、DBAロールを付与してください。また、次の処理を実行するための権限も必要です。

    • ANYDATAキュー、取得プロセス、伝播および適用プロセスを作成する権限。

    • サプリメンタル・ロギングを指定する権限。

    • DBMS_STREAMS_ADMおよびDBMS_AQADMパッケージのサブプログラムを実行する権限。

    • destination_databaseパラメータで指定されたデータベースにデータベース・リンクを通じてアクセスする権限。このデータベース・リンクの名前は、接続先データベースのグローバル名と同じである必要があります。

    通常、DBAロールは、構成の完了後に必要に応じてユーザーから取り消します。

  • プロシージャまたはこれらのプロシージャによって生成されるスクリプトは、Oracle Database 10gリリース2以上のデータベースで実行する必要があります。

  • プロシージャでperform_actionsパラメータをTRUEに設定してOracle Streams環境を直接構成する場合は、そのプロシージャで構成されるすべてのデータベースがOracle Database 10gリリース2以上のデータベースである必要があります。

  • プロシージャでperform_actionsパラメータをFALSEに設定し、生成されたスクリプトで環境を構成する場合は、そのスクリプトで構成されるデータベースがOracle Database 10gリリース1以上である必要があります。スクリプトを使用してOracle Database 10g リリース1のデータベースを構成する場合は、Oracle Database 10g リリース2以上のみで使用可能な機能(キューからキューへの伝播など)が構成されないように、スクリプトを変更する必要があります。

  • 指定する各ディレクトリ・オブジェクトは、SQL文のCREATE DIRECTORYを使用して作成する必要があります。このプロシージャを起動するユーザーには、それぞれのディレクトリ・オブジェクトに対するREAD権限およびWRITE権限が必要です。

  • プロシージャにbi_directionalパラメータが含まれており、そのbi_directionalパラメータがTRUEに設定されている場合、またはソース・データベースが取得データベースでない場合は、共有するデータベース・オブジェクトが含まれているデータベースをsource_databaseパラメータで指定する必要があります。destination_databaseパラメータで指定するデータベースには、これらのデータベース・オブジェクトが含まれない場合があります。接続先データベースに共有データベース・オブジェクトが含まれていない場合、プロシージャ(PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャは除く)は、接続先データベースのデータベース・オブジェクトをインスタンス化します。

  • プロシージャにbi_directionalパラメータが含まれており、そのbi_directionalパラメータがTRUEに設定されている場合、またはネットワークのインスタンス化を実行する場合は、接続先データベース上の対応するユーザーが、データベース・リンクを使用してソース・データベースにアクセスできる必要があります。このデータベース・リンクの名前は、ソース・データベースのグローバル名と同じである必要があります。

これらのプロシージャを実行するユーザーが、必要な権限を所有するには、各データベースにOracle Streams管理者を構成し、そのOracle Streams管理者のスキーマ内に各データベース・リンクを作成する必要があります。

参照:

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

構成プロシージャの共通パラメータ

表162-1に、Oracle Streams環境を構成する、このパッケージのプロシージャに共通のパラメータを示します。表162-1のパラメータの一部のみを含むプロシージャもあります。

表162-1 構成プロシージャの共通パラメータ

パラメータ 説明

perform_actions

TRUEに設定すると、環境を直接構成するために必要な処理が実行されます。

FALSEに設定すると、環境を直接構成するために必要な処理が実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

script_name

このパラメータがNULL以外の値で、perform_actionsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、環境の構成に使用するすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、perform_actionsパラメータがTRUEの場合は、指定したスクリプトが生成され、環境を直接構成する処理が実行されます。

このパラメータがNULLで、perform_actionsパラメータがTRUEの場合は、環境を直接構成する処理が実行され、スクリプトは生成されません。

このパラメータがNULLで、perform_actionsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

capture_name

変更を取得するように構成する各取得プロセスの名前。所有者を指定しないでください。bi_directionalパラメータの設定をTRUEに設定すると、指定した名前で各取得プロセスが作成されます。

指定した名前が既存の取得プロセスの名前と一致した場合は、その既存の取得プロセスが使用され、データベースへの変更を取得するためのルールが取得プロセスのポジティブ・ルール・セットに追加されます。

NULLに設定すると、作成される個々の取得プロセスの名前が自動的に生成されます。

ノート: 取得プロセスは、作成した後で名前を変更することはできません。

capture_queue_table

取得プロセスで使用する各キューのキュー表の名前で、[schema_name.]queue_table_nameという形式で指定します。たとえば、strmadmin.streams_queue_tableのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLに設定すると、取得プロセスで使用する各キューのキュー表の名前が自動的に生成され、現行のユーザーが各キュー表の所有者になります。

capture_queue_name

取得プロセスで使用する各キューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者名がデフォルトで使用されます。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

NULLに設定すると、取得プロセスで使用する各キューの名前が自動的に生成されます。

capture_queue_user

ソース・データベース内のキューに対するENQUEUE権限とDEQUEUE権限を必要とするユーザーの名前。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

propagation_name

変更を転送するように構成する各伝播の名前。所有者を指定しないでください。

指定した名前が既存の伝播の名前と一致した場合は、その既存の伝播が使用され、変更を転送するためのルールが伝播のポジティブ・ルール・セットに追加されます。

NULLに設定すると、作成される個々の伝播の名前が自動的に生成されます。

ノート: 伝播は、作成した後で名前を変更することは変更できません。

apply_name

変更を適用するように構成する各適用プロセスの名前。所有者を指定しないでください。

指定した名前が既存の適用プロセスの名前と一致した場合は、その既存の適用プロセスが使用され、変更を適用するためのルールが適用プロセスのポジティブ・ルール・セットに追加されます。

指定する適用プロセス名が、接続先データベースにある既存のメッセージ・クライアントの名前と同じにならないように注意してください。

NULLに設定すると、作成される個々の適用プロセスの名前が自動的に生成されます。NULLに設定した場合、ソース・データベースからの変更を適用する適用プロセスは接続先データベース上に存在できません。ソース・データベースからの変更を適用する適用プロセスが接続先データベースに存在する場合は、このパラメータにNULL以外の値を指定します。

ノート: 適用プロセスは、作成した後で名前を変更することはできません。

apply_queue_table

適用プロセスで使用する各キューのキュー表の名前で、[schema_name.]queue_table_nameという形式で指定します。たとえば、strmadmin.streams_queue_tableのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLに設定すると、適用プロセスで使用する各キューのキュー表の名前が自動的に生成され、現行のユーザーが各キュー表の所有者になります。

apply_queue_name

適用プロセスで使用する各キューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者名がデフォルトで使用されます。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

NULLに設定すると、適用プロセスで使用する各キューの名前が自動的に生成されます。

apply_queue_user

接続先データベース内のキューに対するENQUEUE権限とDEQUEUE権限を必要とするユーザーの名前。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

bi_directional

source_databaseで指定されるデータベースと、destination_databaseで指定されるデータベースとの間で、双方向のレプリケーションを構成する場合は、TRUEを指定します。両方のデータベースがソース・データベースおよび接続先データベースとして構成され、両方のデータベースへの変更を取得するための取得プロセスと適用プロセスが構成されて、それらの変更を転送するための伝播が構成されます。TRUEの場合は、ソース・データベースと同じグローバル名を持つ、接続先データベースからソース・データベースへのデータベース・リンクが存在する必要があります。

source_databaseで指定されるデータベースと、destination_databaseで指定されるデータベースとの間で、一方向のレプリケーションを構成する場合は、FALSEを指定します。取得プロセスは現行のデータベース上に構成され、適用プロセスは接続先データベース上に構成されます。伝播は、必要に応じて構成されます。

関連項目: 伝播が構成される場合については、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

include_ddl

DMLとDDLの両方の変更を管理するOracle Streamsレプリケーション環境を構成する場合は、TRUEに設定します。

DML変更のみを管理するOracle Streamsレプリケーション環境を構成する場合は、FALSEに設定します。このパラメータをFALSEに設定すると、ALTER TABLEなどのDDL変更はレプリケートされません。

162.6 DBMS_STREAMS_ADMサブプログラムの要約

この表は、DBMS_STREAMS_ADMサブプログラムを示し、簡単に説明しています。

表162-2 DBMS_STREAMS_ADMパッケージのサブプログラム

サブプログラム 説明

ADD_COLUMNプロシージャ

指定されたルールを満たす行論理変更レコード(行LCR)に列を追加する宣言ルールベースの変換を追加または削除します。

ADD_GLOBAL_PROPAGATION_RULESプロシージャ

伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにグローバル・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

ADD_GLOBAL_RULESプロシージャ

取得プロセス、適用プロセスまたはメッセージ・クライアントのポジティブ・ルール・セットまたはネガティブ・ルール・セットにグローバル・ルールを追加します。指定された取得プロセス、適用プロセスまたはメッセージ・クライアントが存在しない場合は作成します。

ADD_MESSAGE_PROPAGATION_RULEプロシージャ

伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにメッセージ・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

ADD_MESSAGE_RULEプロシージャ

適用プロセスまたはメッセージ・クライアントのポジティブ・ルール・セットまたはネガティブ・ルール・セットにメッセージ・ルールを追加します。指定された適用プロセスまたはメッセージ・クライアントが存在しない場合は作成します。

ADD_SCHEMA_PROPAGATION_RULESプロシージャ

伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにスキーマ・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

ADD_SCHEMA_RULESプロシージャ

取得プロセス、適用プロセスまたはメッセージ・クライアントのポジティブ・ルール・セットまたはネガティブ・ルール・セットにスキーマ・ルールを追加します。指定された取得プロセス、適用プロセスまたはメッセージ・クライアントが存在しない場合は作成します。

ADD_SUBSET_PROPAGATION_RULESプロシージャ

伝播のポジティブ・ルール・セットにサブセット・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

ADD_SUBSET_RULESプロシージャ

取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントのポジティブ・ルール・セットにサブセット・ルールを追加します。指定された取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントが存在しない場合は作成します。

ADD_TABLE_PROPAGATION_RULESプロシージャ

伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットに表ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

ADD_TABLE_RULESプロシージャ

取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントのルール・セットに表ルールを追加します。指定された取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントが存在しない場合は作成します。

CLEANUP_INSTANTIATION_SETUPプロシージャ

このパッケージのPRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって設定されたOracle Streamsレプリケーション構成を削除します。

DELETE_COLUMNプロシージャ

指定されたルールを満たす行LCRから列を削除する宣言ルールベースの変換を追加または削除します。

GET_MESSAGE_TRACKINGファンクション

現在のセッションの追跡ラベルを戻します。

GET_SCN_MAPPINGプロシージャ

Oracle Streamsレプリケーション環境内のOracle Streamsの取得プロセスと適用プロセスで使用するために、システム変更番号(SCN)に関する情報を取り出します。

GET_TAGファンクション

現行のセッションで生成されるREDOエントリすべてに対してバイナリ・タグを取得します。

KEEP_COLUMNSプロシージャ

指定されたルールを満たす行LCR内の列のリストを保持する宣言ルールベースの変換を追加または削除します。

MAINTAIN_CHANGE_TABLEプロシージャ

ソース・テーブルに対して行われたデータ操作言語(DML)の変更をチェンジ・テーブルに記録する、Oracle Streams環境を構成します。このプロシージャは、オプションで、表の一方向レプリケーション(ソース・データベースから接続先データベースへ)を構成することもできます。

MAINTAIN_GLOBALプロシージャ

データベース・レベルの変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

MAINTAIN_SCHEMASプロシージャ

指定されたスキーマへの変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

MAINTAIN_SIMPLE_TABLESPACEプロシージャ

ソース・データベース内の単一表領域のクローンを接続先データベース内に作成し、Oracle Streamsを使用してソース・データベース内と接続先データベース内の表領域を保守します。このプロシージャの使用は推奨されていません。

MAINTAIN_SIMPLE_TTSプロシージャ

ソース・データベース内の単一表領域のクローンを接続先データベース内に作成し、Oracle Streamsを使用してソース・データベース内と接続先データベース内の表領域を保守します。

MAINTAIN_TABLESプロシージャ

指定された表への変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

MAINTAIN_TABLESPACESプロシージャ

ソース・データベース内の表領域セットのクローンを接続先データベース内に作成し、Oracle Streamsを使用してこの2つのデータベース内の表領域セットを保守します。このプロシージャの使用は推奨されていません。

MAINTAIN_TTSプロシージャ

ソース・データベース内の表領域セットのクローンを接続先データベース内に作成し、Oracle Streamsを使用してこの2つのデータベース内の表領域セットを保守します。

MERGE_STREAMSプロシージャ

1つの取得プロセスからのストリームを別の取得プロセスからのストリームとマージします。

MERGE_STREAMS_JOBプロシージャ

元の取得プロセスおよびクローニングされた取得が、指定されたマージしきい値内にあるかどうかを判別し、マージしきい値内にある場合は、MERGE_STREAMSプロシージャを実行して2つのストリームをマージします。

POST_INSTANTIATION_SETUPプロシージャ

Oracle Streamsレプリケーション環境を構成するために、インスタンス化後に必要な処理を実行します。

PRE_INSTANTIATION_SETUPプロシージャ

Oracle Streamsレプリケーション環境を構成するために、インスタンス化前に必要な処理を実行します。

PURGE_SOURCE_CATALOGプロシージャ

指定されたオブジェクトに属するすべてのOracle Streamsデータ・ディクショナリ情報をローカル・データベースから削除します。

RECOVER_OPERATIONプロシージャ

エラーが発生したため停止したOracle Streamsレプリケーション構成の操作に対するオプションを提供します。このプロシージャは、操作のロールフォワード、操作のロールバック、操作に関するすべてのメタデータのパージのいずれかの処理を実行します。

REMOVE_QUEUEプロシージャ

指定されたANYDATAキューを削除します。

REMOVE_RULEプロシージャ

指定された取得プロセス、同期取得、伝播、適用プロセスまたはメッセージ・クライアントに関連付けられたルール・セットから、特定のルールまたはすべてのルールを削除します。

REMOVE_STREAMS_CONFIGURATIONプロシージャ

ローカル・データベースからOracle Streams構成を削除します。

RENAME_COLUMNプロシージャ

指定されたルールを満たす行LCR内の列の名前を変更する宣言ルールベースの変換を追加または削除します。

RENAME_SCHEMAプロシージャ

指定されたルールを満たす行LCR内のスキーマの名前を変更する宣言ルールベースの変換を追加または削除します。

RENAME_TABLEプロシージャ

指定されたルールを満たす行LCR内の表の名前を変更する宣言ルールベースの変換を追加または削除します。

SET_MESSAGE_NOTIFICATIONプロシージャ

指定されたOracle Streamsメッセージ・クライアントによって特定のキューからデキュー可能なメッセージに関する通知を設定します。

SET_MESSAGE_TRACKINGプロシージャ

現在のセッションで生成された論理変更レコード(LCR)の追跡ラベルを設定します。

SET_RULE_TRANSFORM_FUNCTIONプロシージャ

ルールベースの変換に関する変換ファンクション名を設定または削除します。

SET_TAGプロシージャ

現行のセッションで継続して生成されるREDOエントリすべてに対してバイナリ・タグを設定します。

SET_UP_QUEUEプロシージャ

Oracle Streamsの取得機能、伝播機能および適用機能で使用するキュー表とキューを作成します。

SPLIT_STREAMSプロシージャ

取得プロセスからの1つのストリームを、その取得プロセスからの他のすべてのストリームから分割します。

ノート:

特に指定がないかぎり、すべてのサブプログラムがコミットされます。

162.6.1 ADD_COLUMNプロシージャ

このプロシージャは、指定されたルールを満たす行論理変更レコード(行LCR)に列を追加する宣言ルールベースの変換を追加または削除します。

指定されたルールがTRUEに評価されたときに実行する変換の場合、そのルールはOracle Streamsクライアントのポジティブ・ルール・セットに含まれている必要があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。

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

ノート:

  • ADD_COLUMN変換では、BLOBCLOBNCLOBBFILELONGLONG RAWROWID、ユーザー定義タイプ(オブジェクト・タイプ、REF、VARRAY、ネストした表)およびオラクル社提供のタイプ(任意のタイプ、XMLタイプ、空間タイプ、メディア・タイプ)などは追加できません。

  • 宣言的変換では、行LCRのみを変換できます。これらの行LCRは、取得プロセスまたは同期取得で取得されたか、またはアプリケーションで作成され、エンキューされた行LCRです。したがって、このプロシージャを実行する場合は、DMLルールを指定する必要があります。DDLを指定すると、エラーが発生します。

参照:

宣言ルールベースの変換の詳細は、『Oracle Streams概要および管理』を参照してください。

構文

DBMS_STREAMS_ADM.ADD_COLUMN(
   rule_name     IN  VARCHAR2,
   table_name    IN  VARCHAR2,
   column_name   IN  VARCHAR2,
   column_value  IN  ANYDATA,
   value_type    IN  VARCHAR2     DEFAULT 'NEW',
   step_number   IN  NUMBER       DEFAULT 0,
   operation     IN  VARCHAR2     DEFAULT 'ADD');
DBMS_STREAMS_ADM.ADD_COLUMN(
   rule_name        IN  VARCHAR2,
   table_name       IN  VARCHAR2,
   column_name      IN  VARCHAR2,
   column_function  IN  VARCHAR2,
   value_type       IN  VARCHAR2     DEFAULT 'NEW',
   step_number      IN  NUMBER       DEFAULT 0,
   operation        IN  VARCHAR2     DEFAULT 'ADD');

パラメータ

表162-3 ADD_COLUMNプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。NULLの場合は、エラーが発生します。

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

table_name

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

column_name

ルールを満たす各行LCRに追加する列の名前。

column_value

追加する列の値。列のデータ・タイプおよび値に適したANYDATAファンクションを指定します。たとえば、追加する列のデータ・タイプがNUMBERで、値がNULLの場合は、ANYDATA.ConvertNumber(NULL)ファンクションを指定します。

column_functionパラメータが指定されている場合、このパラメータは指定できません。

column_function

'SYSDATE'または'SYSTIMESTAMP'のいずれかのSQLファンクション。

'SYSDATE'SQLファンクションは、データベースが存在するオペレーティング・システムの現在の日付と時刻のセットを戻します。戻り値のデータ・タイプはDATEです。戻り値の書式は、NLS_DATE_FORMAT初期化パラメータの値によって異なります。

'SYSTIMESTAMP' SQLファンクションは、データベースが存在するオペレーティング・システムの日時(小数秒およびタイムゾーンを含む)を戻します。戻り値の型は、TIMESTAMP WITH TIME ZONEです。

このファンクションは、ルールの評価結果がTRUEの場合に実行されます。

column_valueパラメータが指定されている場合、このパラメータは指定できません。

value_type

行LCRの新しい値に列を追加する場合は、'NEW'を指定します。

行LCRの古い値に列を追加する場合は、'OLD'を指定します。

step_number

変換の実行順序。

関連項目: 変換順序の詳細は、『Oracle Streams概要および管理』を参照してください。

operation

変換をルールに追加する場合は、'ADD'を指定します。

変換をルールから削除する場合は、'REMOVE'を指定します。

使用上のノート

operationパラメータに'REMOVE'を指定すると、指定したルールに対する列追加の宣言ルールベースの変換のうち、指定したパラメータ(table_namecolumn_nameおよびstep_number)に一致するすべての変換が削除されます。これらのパラメータにNULLを指定すると、ワイルドカードとして動作します。次の表に、これらのパラメータの1つ以上がNULLの場合のADD_COLUMNプロシージャの動作を示します。

table_name column_name step_number 結果

NULL

NULL

NULL

指定したルールに対するすべての列追加変換が削除されます。

NULL

NULL

NULL以外

指定したルールに対して指定されているstep_numberのすべての列追加変換が削除されます。

NULL

NULL以外

NULL以外

指定したルールに対して指定されているcolumn_nameおよびstep_numberのすべての列追加変換が削除されます。

NULL以外

NULL

NULL以外

指定したルールに対して指定されているtable_nameおよびstep_numberのすべての列追加変換が削除されます。

NULL

NULL以外

NULL

指定したルールに対して指定されているcolumn_nameのすべての列追加変換が削除されます。

NULL以外

NULL以外

NULL

指定したルールに対して指定されているtable_nameおよびcolumn_nameのすべての列追加変換が削除されます。

NULL以外

NULL

NULL

指定したルールに対して指定されているtable_nameのすべての列追加変換が削除されます。

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されているtable_namecolumn_nameおよびstep_numberのすべての列追加変換が削除されます。

162.6.2 ADD_GLOBAL_PROPAGATION_RULESプロシージャ

このプロシージャは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにグローバル・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは2つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

構文

DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES(
   streams_name            IN   VARCHAR2  DEFAULT NULL,
   source_queue_name       IN   VARCHAR2,
   destination_queue_name  IN   VARCHAR2,
   include_dml             IN   BOOLEAN   DEFAULT TRUE,
   include_ddl             IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr      IN   BOOLEAN   DEFAULT FALSE,
   source_database         IN   VARCHAR2  DEFAULT NULL,
   dml_rule_name           OUT  VARCHAR2,
   ddl_rule_name           OUT  VARCHAR2,
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   and_condition           IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_GLOBAL_PROPAGATION_RULES(
   streams_name            IN   VARCHAR2  DEFAULT NULL,
   source_queue_name       IN   VARCHAR2,
   destination_queue_name  IN   VARCHAR2,
   include_dml             IN   BOOLEAN   DEFAULT TRUE,
   include_ddl             IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr      IN   BOOLEAN   DEFAULT FALSE,
   source_database         IN   VARCHAR2  DEFAULT NULL,
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   and_condition           IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

パラメータ

表162-4 ADD_GLOBAL_PROPAGATION_RULESプロシージャのパラメータ

パラメータ 説明

streams_name

伝播の名前所有者を指定しないでください。

指定された伝播が存在しない場合は、自動的に作成されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播がすでに存在する場合は、その伝播が使用されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播が存在しない場合は、システム生成の名前で伝播が自動的に作成されます。

source_queue_name

ソース・キューの名前で、[schema_name.]queue_nameの形式で指定します。現在のデータベースには、ソース・キューが含まれている必要があり、キューはANYDATAタイプである必要があります。

たとえば、strmadminスキーマ内のstreams_queueという名前のキューを指定するには、このパラメータにstrmadmin.streams_queueと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

宛先キュー(データベース・リンクを含む)の名前で、宛先キューがリモート・データベース内に存在する場合は、[schema_name.]queue_name[@dblink_name]と指定します。必ずANYDATAタイプのキューを指定してください。

たとえば、dbs2.netというデータベース・リンクを使用し、strmadminスキーマ内のstreams_queueという名前の宛先キューを指定するには、このパラメータにstrmadmin.streams_queue@dbs2.netと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

データベース・リンクが省略された場合は、現行のデータベースのグローバル名が使用されます。その場合、ソース・キューと宛先キューは同じデータベース内に存在する必要があります。

ノート: 接続修飾子は使用できません。

include_dml

TRUEに設定すると、DMLの変更に関するルールが作成されます。FALSEに設定すると、DMLルールは作成されません。NULLは許可されません。

include_ddl

TRUEに設定すると、DDLの変更に関するルールが作成されます。FALSEに設定すると、DDLルールは作成されません。NULLは許可されません。

include_tagged_lcr

TRUEに設定すると、生成されるルールに対してOracle Streamsタグに関する条件が追加されません。したがって、これらのルールは、論理変更レコード(LCR)にNULL以外のタグがあるかどうかに関係なく、TRUEと評価されます。伝播のポジティブ・ルール・セットにルールが追加される場合、NULL以外のタグがLCRにあるかどうかに関係なく、LCRは常に伝播の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、データベースの完全なコピー(スタンバイなど)を作成するときに、このパラメータをTRUEに設定することをお薦めします。伝播のネガティブ・ルール・セットにルールが追加される場合は、LCRのタグの値に関係なく、LCRが破棄されます。

FALSEに設定すると、LCRにNULLのOracle Streamsタグがあるときにかぎり、ルールがTRUEと評価される条件が、生成される各ルールに追加されます。伝播のポジティブ・ルール・セットにルールが追加される場合、LCRにNULLのタグがあるときにかぎり、LCRが伝播の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐために、このパラメータをFALSEに設定することをお薦めします。伝播のネガティブ・ルール・セットにルールが追加される場合は、LCRにNULLのタグがあるときにかぎり、LCRを破棄できます。

inclusion_ruleパラメータをFALSEに設定する場合は、通常、このパラメータをTRUEに設定してください。

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

source_database

ソース・データベースのグローバル名。ソース・データベースは、変更が発生したデータベースです。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

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

伝播ルールではソース・データベースを指定することをお薦めします。

dml_rule_name

include_dmlTRUEの場合は、このパラメータでDMLルールの名前を指定します。

include_dmlFALSEの場合は、このパラメータをNULLに設定します。

ddl_rule_name

include_ddlTRUEの場合は、このパラメータでDDLルールの名前を指定します。

include_ddlFALSEの場合は、このパラメータをNULLに設定します。

inclusion_rule

inclusion_ruleTRUEに設定すると、伝播のポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、伝播のネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

and_condition

このパラメータにNULL以外の文字列を指定すると、次に示すようにAND句によって、システム生成されるルール条件の後に指定した条件が追加されます。

(system_condition) AND (and_condition)

指定する条件の変数は、必ず:lcrを使用してください。たとえば、Oracle Streamsタグの16進表現が'02'の場合にかぎり、このプロシージャで生成されるグローバル・ルールをTRUEと評価する場合は、次のように条件を指定します。

:lcr.get_tag() = HEXTORAW(''02'')

指定した条件内の:lcr変数は、生成されるルールのタイプに応じて、:dmlまたは:ddlに変換されます。特定のLCRタイプ(行LCRまたはDDL LCR)に依存するLCRメンバー・サブプログラムを指定する場合は、適切なルールのみが生成されるように確認する必要があります。

つまり、行LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをTRUEに、include_ddlパラメータをFALSEに設定します。DDL LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをFALSEに、include_ddlパラメータをTRUEに設定します。

関連項目: 論理変更レコードのタイプ

queue_to_queue

TRUEまたはNULLの場合、このプロシージャによって作成される新しい伝播は、キューからキューへの伝播です。キューからキューへの伝播では、常に独自の伝播ジョブが存在し、宛先キューがOracle Real Application Clusters(Oracle RAC)データベースでバッファに入れられたキューの場合、自動フェイルオーバーのサービスが使用されます。

FALSEの場合、このプロシージャによって作成される新しい伝播はキューからデータベース・リンクへの伝播です。キューからデータベース・リンクの伝播では、同じデータベース・リンクを使用する他の伝播と伝播ジョブを共有できますが、Oracle RAC環境での自動フェイルオーバーはサポートされません。

このプロシージャでは、既存の伝播のqueue_to_queueプロパティは変更できません。指定した伝播が存在する場合は、それぞれの設定に対して次のように処理されます。

  • このパラメータがTRUEで、指定した伝播がキューからキューへの伝播でない場合は、エラーが発生します。

  • このパラメータがFALSEで、指定した伝播がキューからキューへの伝播の場合は、エラーが発生します。

  • このパラメータがNULL場合、伝播のqueue_to_queueプロパティは変更されません。

関連項目: キューからキューへの伝播の詳細は、『Oracle Streams概要および管理』を参照してください。

使用上のノート

このプロシージャは、現行のユーザーを使用して伝播を構成します。特定のソース・キューと宛先キューの間で許可される伝播は1つのみです。

このプロシージャは、include_dmlパラメータ値とinclude_ddlパラメータ値に基づいて、DMLとDDLのルールをそれぞれ自動的に作成します。各ルールには、システム生成のルール名(データベース名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。データベース名と順序番号を組み合せた名前が長すぎる場合は、データベース名が切り捨てられます。伝播では、これらのルールがフィルタ処理に使用されます。

次に、DMLの変更に関して作成されるグローバル・ルール条件の例を示します。

(:dml.is_null_tag() = 'Y' and :dml.get_source_database_name() = 'DBS1.NET' )

162.6.3 ADD_GLOBAL_RULESプロシージャ

このプロシージャは、Oracle Streamsクライアント・ルール・セットにルールを追加します。

これは、次に示すいずれかのタイプのOracle Streamsクライアントのルール・セットに対してグローバル・ルールを追加します。

  • streams_typeパラメータをcaptureに設定すると、このプロシージャは、データベース全体に対する変更を取得する取得プロセス・ルールを追加します。

  • streams_typeパラメータをapplyに設定し、streams_nameパラメータで適用プロセスの名前を指定すると、このプロシージャは、キュー内のすべての論理変更レコード(LCR)を適用する適用プロセス・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

  • streams_typeパラメータをdequeueに設定すると、このプロシージャは、すべての永続LCRをキューからデキューするメッセージ・クライアント・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

指定された取得プロセス、適用プロセスまたはメッセージ・クライアントが存在しない場合は、そのクライアントが自動的に作成されます。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは2つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

ノート:

グローバル・ルールを取得プロセスのポジティブ・ルールセットに追加する場合は、Oracle Streamsでサポートされていないデータベース・オブジェクトを除外するルールを、取得プロセスのネガティブ・ルールセットに追加してください。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされないデータベース・オブジェクトが除外されていない場合は、取得エラーが発生します。

ノート:

現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。

構文

DBMS_STREAMS_ADM.ADD_GLOBAL_RULES(
   streams_type        IN   VARCHAR2,
   streams_name        IN   VARCHAR2  DEFAULT NULL,
   queue_name          IN   VARCHAR2  DEFAULT 'streams_queue',
   include_dml         IN   BOOLEAN   DEFAULT TRUE,
   include_ddl         IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr  IN   BOOLEAN   DEFAULT FALSE,
   source_database     IN   VARCHAR2  DEFAULT NULL,
   dml_rule_name       OUT  VARCHAR2,
   ddl_rule_name       OUT  VARCHAR2,
   inclusion_rule      IN   BOOLEAN   DEFAULT TRUE,
   and_condition       IN   VARCHAR2  DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_GLOBAL_RULES(
   streams_type        IN   VARCHAR2,
   streams_name        IN   VARCHAR2  DEFAULT NULL,
   queue_name          IN   VARCHAR2  DEFAULT 'streams_queue',
   include_dml         IN   BOOLEAN   DEFAULT TRUE,
   include_ddl         IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr  IN   BOOLEAN   DEFAULT FALSE,
   source_database     IN   VARCHAR2  DEFAULT NULL,
   inclusion_rule      IN   BOOLEAN   DEFAULT TRUE,
   and_condition       IN   VARCHAR2  DEFAULT NULL);

パラメータ

表162-5 ADD_GLOBAL_RULESプロシージャのパラメータ

パラメータ 説明

streams_type

Oracle Streamsクライアントのタイプを次のように指定します。

  • 取得プロセスの場合は、capture

  • 適用プロセスの場合は、apply

  • メッセージ・クライアントの場合は、dequeue

streams_name

取得プロセス、適用プロセスまたはメッセージ・クライアントの名前。所有者を指定しないでください。

このパラメータがNULLで、streams_typeパラメータがcaptureまたはdequeueであり、キューに関連する取得プロセスまたはメッセージ・クライアントが1つ存在する場合は、そのOracle Streamsクライアントが使用されます。キューに関連するOracle Streamsクライアントが存在しない場合は、システム生成の名前でOracle Streamsクライアントが自動的に作成されます。このパラメータがNULLで、指定したstreams_typeのOracle Streamsクライアントがキューに対して複数存在する場合は、エラーが発生します。

このパラメータがNULLで、streams_typeパラメータがapplyであり、関連する適用プロセスが1つ存在する場合は、その適用プロセスが使用されます。関連する適用プロセスは、次のいずれかの方法で選択されます。

  • source_databaseで指定されるソース・データベースを使用し、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

  • source_databaseNULLで、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

このパラメータがNULLで、関連する適用プロセスが存在しない場合は、システム生成の名前で適用プロセスが自動的に作成されます。

このパラメータがNULLで、関連する適用プロセスが複数存在する場合は、エラーが発生します。

各適用プロセスとメッセージ・クライアントは、それぞれが一意の名前を持つ必要があります。

queue_name

ローカル・キューの名前で、[schema_name.]queue_nameの形式で指定します。現行のデータベースにキューが含まれている必要があり、キューはANYDATAタイプを指定する必要があります。

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

取得プロセス・ルールの場合は、取得プロセスによってLCRがエンキューされるキューを指定します。適用プロセス・ルールの場合は、適用プロセスによってメッセージがデキューされるキューを指定します。メッセージ・クライアント・ルールの場合は、メッセージ・クライアントによってメッセージがデキューされるキューを指定します。

include_dml

TRUEに設定すると、DMLの変更に関するルールが作成されます。FALSEに設定すると、DMLルールは作成されません。NULLは許可されません。

include_ddl

TRUEに設定すると、DDLの変更に関するルールが作成されます。FALSEに設定すると、DDLルールは作成されません。NULLは許可されません。

include_tagged_lcr

TRUEに設定すると、生成されるルールに対してOracle Streamsタグに関する条件が追加されません。したがって、これらのルールは、REDOエントリまたはLCRにNULL以外のタグがあるかどうかに関係なく、TRUEと評価されます。プロセスのポジティブ・ルール・セットにルールが追加される場合、REDOエントリまたはLCRにNULL以外のタグがあるかどうかに関係なく、REDOエントリは常に取得の対象とみなされ、LCRは常に適用の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、データベースの完全なコピー(スタンバイなど)を作成するときに、このパラメータをTRUEに設定することをお薦めします。プロセスのネガティブ・ルール・セットにルールが追加される場合は、タグの値に関係なく、REDOエントリまたはLCRが破棄されます。

FALSEに設定すると、REDOエントリまたはLCRにNULLのOracle Streamsタグがあるときにかぎり、ルールがTRUEと評価される条件が、生成される各ルールに追加されます。プロセスのポジティブ・ルール・セットにルールが追加される場合、REDOエントリまたはLCRにNULLのタグがあるときにかぎり、REDOエントリが取得の対象とみなされ、LCRが適用の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐために、このパラメータをFALSEに設定することをお薦めします。プロセスのネガティブ・ルール・セットにルールが追加される場合は、REDOエントリまたはLCRにNULLのタグがあるときにかぎり、REDOエントリまたはLCRを破棄できます。

inclusion_ruleパラメータをFALSEに設定する場合は、通常、このパラメータをTRUEに設定してください。

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

source_database

ソース・データベースのグローバル名。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

取得プロセス・ルールの場合、ソース・データベース上でローカルに取得プロセスを作成するには、NULLを指定するか、ローカル・データベースのグローバル名を指定します。ダウンストリーム・データベース上のダウンストリーム取得プロセスのルール・セットにルールを追加する場合は、変更が取得されるソース・データベースを指定します。

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

メッセージ・クライアント・ルールの場合、このプロシージャによって作成されるルールにソース・データベースに関する条件を付加しないときは、NULLを指定します。このプロシージャによって作成されるルールにソース・データベースに関する条件を付加する場合は、そのソース・データベースを指定します。ソース・データベースはLCRに記録される情報の一部ですが、ユーザーが作成するLCRには、ソース・データベースの情報が記録されない場合もあります。

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

dml_rule_name

include_dmlTRUEの場合は、このパラメータでDMLルールの名前を指定します。

include_dmlFALSEの場合は、このパラメータをNULLに設定します。

ddl_rule_name

include_ddlTRUEの場合は、このパラメータでDDLルールの名前を指定します。

include_ddlFALSEの場合は、このパラメータをNULLに設定します。

inclusion_rule

inclusion_ruleTRUEに設定すると、Oracle Streamsクライアントのポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、Oracle Streamsクライアントのネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

and_condition

このパラメータにNULL以外の文字列を指定すると、次に示すようにAND句によって、システム生成されるルール条件の後に指定した条件が追加されます。

(system_condition) AND (and_condition)

指定する条件の変数は、必ず:lcrを使用してください。たとえば、Oracle Streamsタグの16進表現が'02'の場合にかぎり、このプロシージャで生成されるグローバル・ルールをTRUEと評価する場合は、次のように条件を指定します。

:lcr.get_tag() = HEXTORAW(''02'')

指定した条件内の:lcr変数は、生成されるルールのタイプに応じて、:dmlまたは:ddlに変換されます。特定のLCRタイプ(行LCRまたはDDL LCR)に依存するLCRメンバー・サブプログラムを指定する場合は、このプロシージャによって適切なルールのみが生成されるように確認する必要があります。

つまり、行LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをTRUEに、include_ddlパラメータをFALSEに設定します。DDL LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをFALSEに、include_ddlパラメータをTRUEに設定します。

関連項目: 論理変更レコードのタイプ

使用上のノート

このプロシージャは、include_dmlパラメータ値とinclude_ddlパラメータ値に基づいて、DMLとDDLのルールをそれぞれ自動的に作成します。各ルールには、システム生成のルール名(データベース名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。データベース名と順序番号を組み合せた名前が長すぎる場合は、データベース名が切り捨てられます。取得プロセス、適用プロセスまたはメッセージ・クライアントでは、これらのルールがフィルタ処理に使用されます。

次に、DMLの変更に関して作成されるグローバル・ルール条件の例を示します。

(:dml.is_null_tag() = 'Y' and :dml.get_source_database_name() = 'DBS1.NET' )

162.6.4 ADD_MESSAGE_PROPAGATION_RULEプロシージャ

このプロシージャは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにメッセージ・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンではOUTパラメータrule_nameを使用しますが、もう一方のバージョンでは使用しません。

構文

DBMS_STREAMS_ADM.ADD_MESSAGE_PROPAGATION_RULE(
   message_type            IN   VARCHAR2,    
   rule_condition          IN   VARCHAR2,    
   streams_name            IN   VARCHAR2  DEFAULT NULL,    
   source_queue_name       IN   VARCHAR2,    
   destination_queue_name  IN   VARCHAR2,    
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   rule_name               OUT  VARCHAR2,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_MESSAGE_PROPAGATION_RULE(
   message_type            IN   VARCHAR2,    
   rule_condition          IN   VARCHAR2,    
   streams_name            IN   VARCHAR2  DEFAULT NULL,    
   source_queue_name       IN   VARCHAR2,    
   destination_queue_name  IN   VARCHAR2,    
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

パラメータ

表162-6 ADD_MESSAGE_PROPAGATION_RULEプロシージャのパラメータ

パラメータ 説明

message_type

メッセージのタイプ。このタイプには、VARCHAR2NUMBERなどのOracle組込みタイプまたはユーザー定義のタイプを指定できます。

メッセージのタイプがOracle組込みタイプでない場合は、[schema_name.]type_nameという形式で指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

たとえば、VARCHAR2を指定するには、VARCHAR2(n)と入力し、nにはサイズを指定します。strmadminスキーマ内のusr_msgというタイプを指定するには、このパラメータにstrmadmin.usr_msgと入力します。

VARCHAR2NVARCHAR2またはRAWデータ・タイプには、サイズの指定が必要です。

関連項目: データ・タイプの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

rule_condition

メッセージのタイプに適用されるルール条件。ルール条件に指定されるルール変数名は、次のように指定する必要があります。

:msg

関連項目:

streams_name

伝播の名前所有者を指定しないでください。

指定された伝播が存在しない場合は、自動的に作成されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播がすでに存在する場合は、その伝播が使用されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播が存在しない場合は、システム生成の名前で伝播が自動的に作成されます。

source_queue_name

ソース・キューの名前で、[schema_name.]queue_nameの形式で指定します。現在のデータベースには、ソース・キューが含まれている必要があり、キューはANYDATAタイプである必要があります。

たとえば、strmadminスキーマ内のstreams_queueという名前のキューを指定するには、このパラメータにstrmadmin.streams_queueと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

宛先キュー(データベース・リンクを含む)の名前で、宛先キューがリモート・データベース内に存在する場合は、[schema_name.]queue_name[@dblink_name]と指定します。必ずANYDATAタイプのキューを指定してください。

たとえば、dbs2.netというデータベース・リンクを使用し、strmadminスキーマ内のstreams_queueという名前の宛先キューを指定するには、このパラメータにstrmadmin.streams_queue@dbs2.netと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

データベース・リンクが省略された場合は、現行のデータベースのグローバル名が使用されます。その場合、ソース・キューと宛先キューは同じデータベース内に存在する必要があります。

ノート: 接続修飾子は使用できません。

inclusion_rule

inclusion_ruleTRUEに設定すると、伝播のポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、伝播のネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

rule_name

ルール名が出力されます。

queue_to_queue

TRUEまたはNULLの場合、このプロシージャによって作成される新しい伝播は、キューからキューへの伝播です。キューからキューへの伝播では、常に独自の伝播ジョブが存在し、宛先キューがOracle Real Application Clusters(Oracle RAC)データベースでバッファに入れられたキューの場合、自動フェイルオーバーのサービスが使用されます。

FALSEの場合、このプロシージャによって作成される新しい伝播はキューからデータベース・リンクへの伝播です。キューからデータベース・リンクの伝播では、同じデータベース・リンクを使用する他の伝播と伝播ジョブを共有できますが、Oracle RAC環境での自動フェイルオーバーはサポートされません。

このプロシージャでは、既存の伝播のqueue_to_queueプロパティは変更できません。指定した伝播が存在する場合は、それぞれの設定に対して次のように処理されます。

  • このパラメータがTRUEで、指定した伝播がキューからキューへの伝播でない場合は、エラーが発生します。

  • このパラメータがFALSEで、指定した伝播がキューからキューへの伝播の場合は、エラーが発生します。

  • このパラメータがNULL場合、伝播のqueue_to_queueプロパティは変更されません。

関連項目: キューからキューへの伝播の詳細は、『Oracle Streams概要および管理』を参照してください。

使用上のノート

このプロシージャは、現行のユーザーを使用して伝播を構成します。特定のソース・キューと宛先キューの間で許可される伝播は1つのみです。

このプロシージャを使用してメッセージ・ルール用の新しいルール・セットを作成する場合、新しいルール・セットには評価コンテキストがありません。指定したメッセージ・タイプに評価コンテキストが存在しない場合は、このプロシージャによって新しい評価コンテキストが作成され、新しいルールと関連付けられます。新しい評価コンテキストには、システム生成の名前が付けられます。既存のメッセージ・タイプを使用する新しいルールを作成した場合は、そのメッセージ・タイプ用の既存の評価コンテキストが新しいルールで使用されます。

メッセージ・タイプがVARCHAR2(128)であるとします。このタイプでは、次のようなルール条件を指定できます。

':msg = ''HQ'''

VARCHAR2(128)タイプのユーザー・メッセージの値がHQの場合、このルール条件はTRUEと評価されます。

usr_msgというメッセージ・タイプに、source_dbnameownernameおよびmessageの属性が設定されているとします。このタイプでは、次のようなルール条件を指定できます。

':msg.source_dbname = ''DBS1.NET'' AND ' || ':msg.owner = ''HR'' AND  ' ||
':msg.name = ''EMPLOYEES'''

このルール条件がTRUEと評価されるのは、usr_msgタイプのユーザー・メッセージのsource_dbname属性がDBS1.NETowner属性がHR、およびname属性がEMPLOYEESの場合です。

ノート:

前述の例の引用符は、すべて一重引用符です。

162.6.5 ADD_MESSAGE_RULEプロシージャ

このプロシージャは、次に示すいずれかのタイプのOracle Streamsクライアントのルール・セットに対してメッセージ・ルールを追加します。

  • streams_typeパラメータをapplyに設定すると、このプロシージャは、特定のメッセージ・タイプのユーザー・メッセージをキューからデキューする適用プロセス・ルールを追加します。

  • streams_typeパラメータをdequeueに設定すると、このプロシージャは、特定のメッセージ・タイプのユーザー・メッセージをキューからデキューするメッセージ・クライアント・ルールを追加します。

このプロシージャは、指定されたOracle Streamsクライアントが存在しない場合、そのOracle Streamsクライアントも作成します。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンではOUTパラメータrule_nameを使用しますが、もう一方のバージョンでは使用しません。

ノート:

現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。

構文

DBMS_STREAMS_ADM.ADD_MESSAGE_RULE(
   message_type    IN   VARCHAR2,    
   rule_condition  IN   VARCHAR2,    
   streams_type    IN   VARCHAR2,
   streams_name    IN   VARCHAR2  DEFAULT NULL,    
   queue_name      IN   VARCHAR2  DEFAULT 'streams_queue',    
   inclusion_rule  IN   BOOLEAN   DEFAULT TRUE,
   rule_name       OUT  VARCHAR2);

DBMS_STREAMS_ADM.ADD_MESSAGE_RULE(
   message_type    IN   VARCHAR2,    
   rule_condition  IN   VARCHAR2,    
   streams_type    IN   VARCHAR2,
   streams_name    IN   VARCHAR2  DEFAULT NULL,    
   queue_name      IN   VARCHAR2  DEFAULT 'streams_queue',    
   inclusion_rule  IN   BOOLEAN   DEFAULT TRUE);

パラメータ

表162-7 ADD_MESSAGE_RULEプロシージャのパラメータ

パラメータ 説明

message_type

メッセージのタイプ。このタイプには、VARCHAR2NUMBERなどのOracle組込みタイプまたはユーザー定義のタイプを指定できます。

メッセージのタイプがOracle組込みタイプでない場合は、[schema_name.]type_nameという形式で指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

たとえば、VARCHAR2を指定するには、VARCHAR2(n)と入力し、nにはサイズを指定します。strmadminスキーマ内のusr_msgというタイプを指定するには、このパラメータにstrmadmin.usr_msgと入力します。

VARCHAR2NVARCHAR2またはRAWデータ・タイプには、サイズの指定が必要です。

関連項目: データ・タイプの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

rule_condition

メッセージのタイプに適用されるルール条件。ルール条件に指定されるルール変数名は、次のように指定する必要があります。

:msg

関連項目:

streams_type

メッセージ・コンシューマのタイプ。apply(適用プロセスの場合)またはdequeue(メッセージ・クライアントの場合)のどちらかを指定します。

streams_name

Oracle Streams適用プロセスまたはメッセージ・クライアントの名前。

streams_typeとしてapplyを指定した場合は、適用プロセスの名前を指定します。所有者を指定しないでください。指定された適用プロセスが存在しない場合は、システム生成の名前で自動的に作成されます。

streams_typeとしてdequeueを指定した場合は、メッセージ・クライアントの名前を指定します。たとえば、ユーザーstrmadminがメッセージ・クライアントである場合、strmadminと指定します。

このパラメータがNULLで、キューに関連する適用プロセスまたはメッセージ・クライアントが1つ存在する場合は、関連する適用プロセスまたはメッセージ・クライアントの名前が使用されます。このパラメータがNULLで、キューに関連する適用プロセスまたはメッセージ・クライアントが複数存在する場合は、エラーが発生します。

このパラメータがNULLで、指定したstreams_typeのOracle Streamsクライアントがキューに存在しない場合は、システム生成の名前で適用プロセスまたはメッセージ・クライアントが自動的に作成されます。

適用プロセスとメッセージ・クライアントに同じ名前を付けることはできません。

queue_name

メッセージをデキューするローカル・キューの名前で、[schema_name.]queue_nameの形式で指定します。現行のデータベースにキューが含まれている必要があり、キューはANYDATAタイプを指定する必要があります。

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

inclusion_rule

inclusion_ruleTRUEに設定すると、適用プロセスまたはメッセージ・クライアントのポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、適用プロセスまたはメッセージ・クライアントのネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

rule_name

ルール名が出力されます。

使用上のノート

適用プロセス・ルールを追加するときに、適用プロセスが存在しない場合は、このプロシージャによって作成されます。このプロシージャによって作成される適用プロセスは、ユーザー・メッセージのみを適用可能であり、デキューされたメッセージは、適用プロセス用のメッセージ・ハンドラに送信します。メッセージ・クライアント・ルールを追加するときに、メッセージ・クライアントが存在しない場合は、このプロシージャによって作成されます。

このプロシージャを使用してメッセージ・ルール用の新しいルール・セットを作成する場合、新しいルール・セットには評価コンテキストがありません。指定したメッセージ・タイプに評価コンテキストが存在しない場合は、このプロシージャによって新しい評価コンテキストが作成され、新しいルールと関連付けられます。新しい評価コンテキストには、システム生成の名前が付けられます。既存のメッセージ・タイプを使用する新しいルールを作成した場合は、そのメッセージ・タイプ用の既存の評価コンテキストが新しいルールで使用されます。

メッセージ・タイプがVARCHAR2(128)であるとします。このタイプでは、次のようなルール条件を指定できます。

':msg = ''HQ'''

VARCHAR2(128)タイプのユーザー・メッセージの値がHQの場合、このルール条件はTRUEと評価されます。

usr_msgというメッセージ・タイプに、source_dbnameownernameおよびmessageの属性が設定されているとします。このタイプでは、次のようなルール条件を指定できます。

':msg.source_dbname = ''DBS1.NET'' AND ' || ':msg.owner = ''HR'' AND  ' ||
':msg.name = ''EMPLOYEES'''

このルール条件がTRUEと評価されるのは、usr_msgタイプのユーザー・メッセージのsource_dbname属性がDBS1.NETowner属性がHR、およびname属性がEMPLOYEESの場合です。

ノート:

前述の例の引用符は、すべて一重引用符です。

162.6.6 ADD_SCHEMA_PROPAGATION_RULESプロシージャ

このプロシージャは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットにスキーマ・ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは2つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

構文

DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
   schema_name             IN   VARCHAR2,
   streams_name            IN   VARCHAR2  DEFAULT NULL,
   source_queue_name       IN   VARCHAR2,
   destination_queue_name  IN   VARCHAR2,
   include_dml             IN   BOOLEAN   DEFAULT TRUE,
   include_ddl             IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr      IN   BOOLEAN   DEFAULT FALSE,
   source_database         IN   VARCHAR2  DEFAULT NULL,
   dml_rule_name           OUT  VARCHAR2,
   ddl_rule_name           OUT  VARCHAR2,
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   and_condition           IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
   schema_name             IN   VARCHAR2,
   streams_name            IN   VARCHAR2  DEFAULT NULL,
   source_queue_name       IN   VARCHAR2,
   destination_queue_name  IN   VARCHAR2,
   include_dml             IN   BOOLEAN   DEFAULT TRUE,
   include_ddl             IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr      IN   BOOLEAN   DEFAULT FALSE,
   source_database         IN   VARCHAR2  DEFAULT NULL,
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   and_condition           IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

パラメータ

表162-8 ADD_SCHEMA_PROPAGATION_RULESプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。たとえば、hrのように指定します。

streams_name

伝播の名前所有者を指定しないでください。

指定された伝播が存在しない場合は、自動的に作成されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播がすでに存在する場合は、その伝播が使用されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播が存在しない場合は、システム生成の名前で伝播が自動的に作成されます。

source_queue_name

ソース・キューの名前で、[schema_name.]queue_nameの形式で指定します。現在のデータベースには、ソース・キューが含まれている必要があり、キューはANYDATAタイプである必要があります。

たとえば、strmadminスキーマ内のstreams_queueという名前のキューを指定するには、このパラメータにstrmadmin.streams_queueと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

宛先キュー(データベース・リンクを含む)の名前で、宛先キューがリモート・データベース内に存在する場合は、[schema_name.]queue_name[@dblink_name]と指定します。必ずANYDATAタイプのキューを指定してください。

たとえば、dbs2.netというデータベース・リンクを使用し、strmadminスキーマ内のstreams_queueという名前の宛先キューを指定するには、このパラメータにstrmadmin.streams_queue@dbs2.netと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

データベース・リンクが省略された場合は、現行のデータベースのグローバル名が使用されます。その場合、ソース・キューと宛先キューは同じデータベース内に存在する必要があります。

ノート: 接続修飾子は使用できません。

include_dml

TRUEに設定すると、DMLの変更に関するルールが作成されます。FALSEに設定すると、DMLルールは作成されません。NULLは許可されません。

include_ddl

TRUEに設定すると、DDLの変更に関するルールが作成されます。FALSEに設定すると、DDLルールは作成されません。NULLは許可されません。

include_tagged_lcr

TRUEに設定すると、生成されるルールに対してOracle Streamsタグに関する条件が追加されません。したがって、これらのルールは、論理変更レコード(LCR)にNULL以外のタグがあるかどうかに関係なく、TRUEと評価されます。伝播のポジティブ・ルール・セットにルールが追加される場合、NULL以外のタグがLCRにあるかどうかに関係なく、LCRは常に伝播の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、データベースの完全なコピー(スタンバイなど)を作成するときに、このパラメータをTRUEに設定することをお薦めします。伝播のネガティブ・ルール・セットにルールが追加される場合は、LCRのタグの値に関係なく、LCRが破棄されます。

FALSEに設定すると、LCRにNULLのOracle Streamsタグがあるときにかぎり、ルールがTRUEと評価される条件が、生成される各ルールに追加されます。伝播のポジティブ・ルール・セットにルールが追加される場合、LCRにNULLのタグがあるときにかぎり、LCRが伝播の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐために、このパラメータをFALSEに設定することをお薦めします。伝播のネガティブ・ルール・セットにルールが追加される場合は、LCRにNULLのタグがあるときにかぎり、LCRを破棄できます。

inclusion_ruleパラメータをFALSEに設定する場合は、通常、このパラメータをTRUEに設定してください。

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

source_database

ソース・データベースのグローバル名。ソース・データベースは、変更が発生したデータベースです。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

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

伝播ルールではソース・データベースを指定することをお薦めします。

dml_rule_name

include_dmlTRUEの場合は、このパラメータでDMLルールの名前を指定します。

include_dmlFALSEの場合は、このパラメータをNULLに設定します。

ddl_rule_name

include_ddlTRUEの場合は、このパラメータでDDLルールの名前を指定します。

include_ddlFALSEの場合は、このパラメータをNULLに設定します。

inclusion_rule

inclusion_ruleTRUEに設定すると、伝播のポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、伝播のネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

and_condition

このパラメータにNULL以外の文字列を指定すると、次に示すようにAND句によって、システム生成されるルール条件の後に指定した条件が追加されます。

(system_condition) AND (and_condition)

指定する条件の変数は、必ず:lcrを使用してください。たとえば、Oracle Streamsタグの16進表現が'02'の場合にかぎり、このプロシージャで生成されるスキーマ・ルールをTRUEと評価する場合は、次のように条件を指定します。

:lcr.get_tag() = HEXTORAW(''02'')

指定した条件内の:lcr変数は、生成されるルールのタイプに応じて、:dmlまたは:ddlに変換されます。特定のLCRタイプ(行LCRまたはDDL LCR)に依存するLCRメンバー・サブプログラムを指定する場合は、このプロシージャによって適切なルールのみが生成されるように確認する必要があります。

つまり、行LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをTRUEに、include_ddlパラメータをFALSEに設定します。DDL LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをFALSEに、include_ddlパラメータをTRUEに設定します。

関連項目: 論理変更レコードのタイプ

queue_to_queue

TRUEまたはNULLの場合、このプロシージャによって作成される新しい伝播は、キューからキューへの伝播です。キューからキューへの伝播では、常に独自の伝播ジョブが存在し、宛先キューがOracle Real Application Clusters(Oracle RAC)データベースでバッファに入れられたキューの場合、自動フェイルオーバーのサービスが使用されます。

FALSEの場合、このプロシージャによって作成される新しい伝播はキューからデータベース・リンクへの伝播です。キューからデータベース・リンクの伝播では、同じデータベース・リンクを使用する他の伝播と伝播ジョブを共有できますが、Oracle RAC環境での自動フェイルオーバーはサポートされません。

このプロシージャでは、既存の伝播のqueue_to_queueプロパティは変更できません。指定した伝播が存在する場合は、それぞれの設定に対して次のように処理されます。

  • このパラメータがTRUEで、指定した伝播がキューからキューへの伝播でない場合は、エラーが発生します。

  • このパラメータがFALSEで、指定した伝播がキューからキューへの伝播の場合は、エラーが発生します。

  • このパラメータがNULL場合、伝播のqueue_to_queueプロパティは変更されません。

関連項目: キューからキューへの伝播の詳細は、『Oracle Streams概要および管理』を参照してください。

使用上のノート

このプロシージャは、現行のユーザーを使用して伝播を構成します。特定のソース・キューと宛先キューの間で許可される伝播は1つのみです。

このプロシージャは、include_dmlパラメータ値とinclude_ddlパラメータ値に基づいて、DMLとDDLのルールをそれぞれ自動的に作成します。各ルールには、システム生成のルール名(スキーマ名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。スキーマ名と順序番号を組み合せた名前が長すぎる場合は、スキーマ名が切り捨てられます。伝播では、これらのルールがフィルタ処理に使用されます。

次に、DMLの変更に関して作成されるスキーマ・ルール条件の例を示します。

((:dml.get_object_owner() = 'HR') and :dml.is_null_tag() = 'Y' 
and :dml.get_source_database_name() = 'DBS1.NET' )

162.6.7 ADD_SCHEMA_RULESプロシージャ

このプロシージャは、Oracle Streamsクライアント・ルール・セットにルールを追加します。

これは、次に示すいずれかのタイプのOracle Streamsクライアントのルール・セットに対してグローバル・ルールを追加します。

  • streams_typeパラメータをcaptureに設定すると、このプロシージャは、指定したスキーマに対する変更を取得する取得プロセス・ルールを追加します。

  • streams_typeパラメータをapplyに設定し、streams_nameパラメータで適用プロセスの名前を指定すると、このプロシージャは、キュー内の論理変更レコード(LCR)のうち、指定したスキーマに対する変更が記録されるLCRを適用する適用プロセス・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

  • streams_typeパラメータをdequeueに設定すると、このプロシージャは、指定したスキーマに対する変更が記録される永続LCRをキューからデキューするメッセージ・クライアント・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

指定された取得プロセス、適用プロセスまたはメッセージ・クライアントが存在しない場合は、そのクライアントが自動的に作成されます。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは2つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

ノート:

スキーマ・ルールを取得プロセスのポジティブ・ルールセットに追加する場合は、Oracle Streamsでサポートされていない、スキーマ内のデータベース・オブジェクトを除外するルールを、取得プロセスのネガティブ・ルールセットに必ず追加するようにしてください。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされないデータベース・オブジェクトが除外されていない場合は、取得エラーが発生します。

ノート:

現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。

構文

DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
   schema_name         IN   VARCHAR2,
   streams_type        IN   VARCHAR2,
   streams_name        IN   VARCHAR2  DEFAULT NULL,
   queue_name          IN   VARCHAR2  DEFAULT 'streams_queue',
   include_dml         IN   BOOLEAN   DEFAULT TRUE,
   include_ddl         IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr  IN   BOOLEAN   DEFAULT FALSE,
   source_database     IN   VARCHAR2  DEFAULT NULL,
   dml_rule_name       OUT  VARCHAR2,
   ddl_rule_name       OUT  VARCHAR2,
   inclusion_rule      IN   BOOLEAN   DEFAULT TRUE,
   and_condition       IN   VARCHAR2  DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
   schema_name         IN   VARCHAR2,
   streams_type        IN   VARCHAR2,
   streams_name        IN   VARCHAR2  DEFAULT NULL,
   queue_name          IN   VARCHAR2  DEFAULT 'streams_queue',
   include_dml         IN   BOOLEAN   DEFAULT TRUE,
   include_ddl         IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr  IN   BOOLEAN   DEFAULT FALSE,
   source_database     IN   VARCHAR2  DEFAULT NULL,
   inclusion_rule      IN   BOOLEAN   DEFAULT TRUE,
   and_condition       IN   VARCHAR2  DEFAULT NULL);

パラメータ

表162-9 ADD_SCHEMA_RULESプロシージャのパラメータ

パラメータ 説明

schema_name

スキーマの名前。たとえば、hrのように指定します。

Oracle Streamsではスキーマの有無がチェックされないため、まだ存在しないスキーマも指定できます。

streams_type

Oracle Streamsクライアントのタイプを次のように指定します。

  • 取得プロセスの場合は、capture

  • 適用プロセスの場合は、apply

  • メッセージ・クライアントの場合は、dequeue

streams_name

取得プロセス、適用プロセスまたはメッセージ・クライアントの名前。所有者を指定しないでください。

このパラメータがNULLで、streams_typeパラメータがcaptureまたはdequeueであり、キューに関連する取得プロセスまたはメッセージ・クライアントが1つ存在する場合は、そのOracle Streamsクライアントが使用されます。キューに関連するOracle Streamsクライアントが存在しない場合は、システム生成の名前でOracle Streamsクライアントが自動的に作成されます。このパラメータがNULLで、指定したstreams_typeのOracle Streamsクライアントがキューに対して複数存在する場合は、エラーが発生します。

このパラメータがNULLで、streams_typeパラメータがapplyであり、関連する適用プロセスが1つ存在する場合は、その適用プロセスが使用されます。関連する適用プロセスは、次のいずれかの方法で選択されます。

  • source_databaseで指定されるソース・データベースを使用し、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

  • source_databaseNULLで、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

このパラメータがNULLで、関連する適用プロセスが存在しない場合は、システム生成の名前で適用プロセスが自動的に作成されます。

このパラメータがNULLで、関連する適用プロセスが複数存在する場合は、エラーが発生します。

各適用プロセスとメッセージ・クライアントは、それぞれが一意の名前を持つ必要があります。

queue_name

ローカル・キューの名前で、[schema_name.]queue_nameの形式で指定します。現行のデータベースにキューが含まれている必要があり、キューはANYDATAタイプを指定する必要があります。

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

取得プロセス・ルールの場合は、取得プロセスによってLCRがエンキューされるキューを指定します。適用プロセス・ルールの場合は、適用プロセスによってメッセージがデキューされるキューを指定します。メッセージ・クライアント・ルールの場合は、メッセージ・クライアントによってメッセージがデキューされるキューを指定します。

include_dml

TRUEに設定すると、DMLの変更に関するルールが作成されます。FALSEに設定すると、DMLルールは作成されません。NULLは許可されません。

include_ddl

TRUEに設定すると、DDLの変更に関するルールが作成されます。FALSEに設定すると、DDLルールは作成されません。NULLは許可されません。

include_tagged_lcr

TRUEに設定すると、生成されるルールに対してOracle Streamsタグに関する条件が追加されません。したがって、これらのルールは、REDOエントリまたはLCRにNULL以外のタグがあるかどうかに関係なく、TRUEと評価されます。プロセスのポジティブ・ルール・セットにルールが追加される場合、REDOエントリまたはLCRにNULL以外のタグがあるかどうかに関係なく、REDOエントリは常に取得の対象とみなされ、LCRは常に適用の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、データベースの完全なコピー(スタンバイなど)を作成するときに、このパラメータをTRUEに設定することをお薦めします。プロセスのネガティブ・ルール・セットにルールが追加される場合は、タグの値に関係なく、REDOエントリまたはLCRが破棄されます。

FALSEに設定すると、REDOエントリまたはLCRにNULLのOracle Streamsタグがあるときにかぎり、ルールがTRUEと評価される条件が、生成される各ルールに追加されます。プロセスのポジティブ・ルール・セットにルールが追加される場合、REDOエントリまたはLCRにNULLのタグがあるときにかぎり、REDOエントリが取得の対象とみなされ、LCRが適用の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐために、このパラメータをFALSEに設定することをお薦めします。プロセスのネガティブ・ルール・セットにルールが追加される場合は、REDOエントリまたはLCRにNULLのタグがあるときにかぎり、REDOエントリまたはLCRを破棄できます。

inclusion_ruleパラメータをFALSEに設定する場合は、通常、このパラメータをTRUEに設定してください。

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

source_database

ソース・データベースのグローバル名。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

取得プロセス・ルールの場合、ソース・データベース上でローカルに取得プロセスを作成するには、NULLを指定するか、ローカル・データベースのグローバル名を指定します。ダウンストリーム・データベース上のダウンストリーム取得プロセスのルール・セットにルールを追加する場合は、変更が取得されるソース・データベースを指定します。

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

メッセージ・クライアント・ルールの場合、このプロシージャによって作成されるルールにソース・データベースに関する条件を付加しないときは、NULLを指定します。このプロシージャによって作成されるルールにソース・データベースに関する条件を付加する場合は、そのソース・データベースを指定します。ソース・データベースはLCRに記録される情報の一部ですが、ユーザーが作成するLCRには、ソース・データベースの情報が記録されない場合もあります。

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

dml_rule_name

include_dmlTRUEの場合は、このパラメータでDMLルールの名前を指定します。

include_dmlFALSEの場合は、このパラメータをNULLに設定します。

ddl_rule_name

include_ddlTRUEの場合は、このパラメータでDDLルールの名前を指定します。

include_ddlFALSEの場合は、このパラメータをNULLに設定します。

inclusion_rule

inclusion_ruleTRUEに設定すると、Oracle Streamsクライアントのポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、Oracle Streamsクライアントのネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

and_condition

このパラメータにNULL以外の文字列を指定すると、次に示すようにAND句によって、システム生成されるルール条件の後に指定した条件が追加されます。

(system_condition) AND (and_condition)

指定する条件の変数は、必ず:lcrを使用してください。たとえば、Oracle Streamsタグの16進表現が'02'の場合にかぎり、このプロシージャで生成されるスキーマ・ルールをTRUEと評価する場合は、次のように条件を指定します。

:lcr.get_tag() = HEXTORAW(''02'')

指定した条件内の:lcr変数は、生成されるルールのタイプに応じて、:dmlまたは:ddlに変換されます。特定のLCRタイプ(行LCRまたはDDL LCR)に依存するLCRメンバー・サブプログラムを指定する場合は、このプロシージャによって適切なルールのみが生成されるように確認する必要があります。

つまり、行LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをTRUEに、include_ddlパラメータをFALSEに設定します。DDL LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをFALSEに、include_ddlパラメータをTRUEに設定します。

関連項目: 論理変更レコードのタイプ

使用上のノート

このプロシージャは、include_dmlパラメータ値とinclude_ddlパラメータ値に基づいて、DMLとDDLのルールをそれぞれ自動的に作成します。各ルールには、システム生成のルール名(スキーマ名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。スキーマ名と順序番号を組み合せた名前が長すぎる場合は、スキーマ名が切り捨てられます。取得プロセス、適用プロセスまたはメッセージ・クライアントでは、これらのルールがフィルタ処理に使用されます。

次に、DMLの変更に関して作成されるスキーマ・ルール条件の例を示します。

((:dml.get_object_owner() = 'HR') and :dml.is_null_tag() = 'Y' 
and :dml.get_source_database_name() = 'DBS1.NET' )

162.6.8 ADD_SUBSET_PROPAGATION_RULESプロシージャ

このプロシージャは、ソース・キュー内の論理変更レコード(LCR)のうち、指定した表の行のサブセットに関連するLCRを宛先キューに伝播するための伝播ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは3つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

構文

DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES(
   table_name               IN   VARCHAR2,
   dml_condition            IN   VARCHAR2,
   streams_name             IN   VARCHAR2  DEFAULT NULL,
   source_queue_name        IN   VARCHAR2,
   destination_queue_name   IN   VARCHAR2,
   include_tagged_lcr       IN   BOOLEAN   DEFAULT FALSE,
   source_database          IN   VARCHAR2  DEFAULT NULL,
   insert_rule_name         OUT  VARCHAR2,
   update_rule_name         OUT  VARCHAR2,
   delete_rule_name         OUT  VARCHAR2,
   queue_to_queue           IN   BOOLEAN   DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_SUBSET_PROPAGATION_RULES(
   table_name               IN   VARCHAR2,
   dml_condition            IN   VARCHAR2,
   streams_name             IN   VARCHAR2  DEFAULT NULL,
   source_queue_name        IN   VARCHAR2,
   destination_queue_name   IN   VARCHAR2,
   include_tagged_lcr       IN   BOOLEAN   DEFAULT FALSE,
   source_database          IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue           IN   BOOLEAN   DEFAULT NULL);

パラメータ

表162-10 ADD_SUBSET_PROPAGATION_RULESプロシージャのパラメータ

パラメータ 説明

table_name

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

指定した表は、伝播と同じデータベースに存在する必要があります。また、指定した表では、現在および将来にわたり、LOB列、LONG列、LONG RAW列またはXMLType列を使用できません。

dml_condition

サブセット条件。SQLのWHERE句に条件を指定する場合と同じ方法で、サブセット条件を指定します。

たとえば、salary4000を超え、かつjob_idSA_MANである行をhr.employees表で指定するには、次のように条件を入力します。

' salary > 4000 and job_id = ''SA_MAN'' '

ノート: 前述の例の引用符は、すべて一重引用符です。

streams_name

伝播の名前所有者を指定しないでください。

指定された伝播が存在しない場合は、自動的に作成されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播がすでに存在する場合は、その伝播が使用されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播が存在しない場合は、システム生成の名前で伝播が自動的に作成されます。

source_queue_name

ソース・キューの名前で、[schema_name.]queue_nameの形式で指定します。現在のデータベースには、ソース・キューが含まれている必要があり、キューはANYDATAタイプである必要があります。

たとえば、strmadminスキーマ内のstreams_queueという名前のキューを指定するには、このパラメータにstrmadmin.streams_queueと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

宛先キュー(データベース・リンクを含む)の名前で、宛先キューがリモート・データベース内に存在する場合は、[schema_name.]queue_name[@dblink_name]と指定します。必ずANYDATAタイプのキューを指定してください。

たとえば、dbs2.netというデータベース・リンクを使用し、strmadminスキーマ内のstreams_queueという名前の宛先キューを指定するには、このパラメータにstrmadmin.streams_queue@dbs2.netと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

データベース・リンクが省略された場合は、現行のデータベースのグローバル名が使用されます。その場合、ソース・キューと宛先キューは同じデータベース内に存在する必要があります。

ノート: 接続修飾子は使用できません。

include_tagged_lcr

TRUEの場合は、LCRにNULL以外のタグがあるかどうかに関係なく、LCRが常に伝播の対象とみなされます。データベースの完全なコピー(スタンバイなど)を作成するときには、この設定をお薦めします。

FALSEの場合は、LCRにNULLのタグがあるときにかぎり、LCRが伝播の対象とみなされます。通常、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐには、FALSEの設定が有効です。

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

source_database

ソース・データベースのグローバル名。ソース・データベースは、変更が発生したデータベースです。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

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

伝播ルールではソース・データベースを指定することをお薦めします。

insert_rule_name

システムによって生成されたINSERTルール名が出力されます。このルールによって、挿入と、挿入に変換する必要がある更新が制御されます。

update_rule_name

システムによって生成されたUPDATEルール名が出力されます。このルールによって、更新のまま変換されない更新が制御されます。

delete_rule_name

システムによって生成されたDELETEルール名が出力されます。このルールによって、削除と、削除に変換する必要がある更新が制御されます。

queue_to_queue

TRUEまたはNULLの場合、このプロシージャによって作成される新しい伝播は、キューからキューへの伝播です。キューからキューへの伝播では、常に独自の伝播ジョブが存在し、宛先キューがOracle Real Application Clusters(Oracle RAC)データベースでバッファに入れられたキューの場合、自動フェイルオーバーのサービスが使用されます。

FALSEの場合、このプロシージャによって作成される新しい伝播はキューからデータベース・リンクへの伝播です。キューからデータベース・リンクの伝播では、同じデータベース・リンクを使用する他の伝播と伝播ジョブを共有できますが、Oracle RAC環境での自動フェイルオーバーはサポートされません。

このプロシージャでは、既存の伝播のqueue_to_queueプロパティは変更できません。指定した伝播が存在する場合は、それぞれの設定に対して次のように処理されます。

  • このパラメータがTRUEで、指定した伝播がキューからキューへの伝播でない場合は、エラーが発生します。

  • このパラメータがFALSEで、指定した伝播がキューからキューへの伝播の場合は、エラーが発生します。

  • このパラメータがNULL場合、伝播のqueue_to_queueプロパティは変更されません。

関連項目: キューからキューへの伝播の詳細は、『Oracle Streams概要および管理』を参照してください。

使用上のノート

このプロシージャは、現行のユーザーを使用して伝播を構成します。特定のソース・キューと宛先キューの間で許可される伝播は1つのみです。

このプロシージャを実行すると、指定された伝播に対して3つのルール(INSERT文に関するルール、UPDATE文に関するルール、DELETE文に関するルール)が生成されます。INSERT文とDELETE文については、dml_conditionパラメータで指定された条件を満たす行LCRのみが伝播されます。UPDATE文については、次のバリエーションがあります。

  • 行LCRの新旧の値が両方とも指定のdml_conditionを満たす場合、その行LCRは変更なしで伝播されます。

  • 行LCRの新旧の値が両方とも指定のdml_conditionを満たさない場合、その行LCRは伝播されません。

  • 行LCRの古い値が指定のdml_conditionを満たし、新しい値が満たさない場合、更新行LCRは削除行LCRに変換されます。

  • 行LCRの新しい値が指定のdml_conditionを満たし、古い値が満たさない場合、更新行LCRは挿入行LCRに変換されます。

更新が挿入または削除に変換されることを行の移行と呼びます。

伝播では、これらのルールがフィルタ処理に使用されます。伝播にポジティブ・ルール・セットがない場合は、ポジティブ・ルール・セットが自動的に作成され、表に変更を伝播するためのルールがポジティブ・ルール・セットに追加されます。サブセット・ルールはポジティブ・ルール・セットのみに追加可能で、ネガティブ・ルール・セットには追加できません。伝播の既存のポジティブ・ルール・セット内にある他のルールは、この影響を受けません。新しいルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。

このプロシージャを実行すると、INSERT文、UPDATE文およびDELETE文のルールが自動的に作成され、これらのルールには、システム生成のルール名が指定されます。各ルールには、システム生成のルール名(表名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。表名と順序番号を組み合せた名前が長すぎる場合は、表名が切り捨てられます。ADD_SUBSET_RULESプロシージャがオーバーロードされているため、INSERT文、UPDATE文およびDELETE文に対するシステム生成のルール名が戻されます。

表のサブセット・ルールを作成する場合は、表のすべての列を保持するソース・データベースで、無条件のサプリメンタル・ログ・グループを作成してください。サプリメンタル・ロギングは、更新を挿入に変換する必要がある場合に必要です。この変換を正しく実行するには、伝播ルールに列値がすべて設定されている必要があります。

ノート:

サブセット・ルールはポジティブ・ルール・セットの内部のみで使用できます。ネガティブ・ルール・セットにはサブセット・ルールを追加できません。ネガティブ・ルール・セットにサブセット・ルールを追加すると、ネガティブ・ルール・セットによって破棄されないLCRに対して行の移行が実行されないため、予期しない結果が発生する場合があります。

次に、行LCRのフィルタ処理に関して作成されるルール条件の例を示します。このルール条件では、dml_conditionregion_id = 2table_namehr.regions、およびsource_databasedbs1.netである場合の更新操作を示します。

:dml.get_object_owner()='HR' AND :dml.get_object_name()='REGIONS' 
AND :dml.is_null_tag()='Y' AND :dml.get_source_database_name()='DBS1.NET' 
AND :dml.get_command_type()='UPDATE' 
AND (:dml.get_value('NEW','"REGION_ID"') IS NOT NULL) 
AND (:dml.get_value('OLD','"REGION_ID"') IS NOT NULL) 
AND (:dml.get_value('OLD','"REGION_ID"').AccessNumber()=2) 
AND (:dml.get_value('NEW','"REGION_ID"').AccessNumber()=2)

162.6.9 ADD_SUBSET_RULESプロシージャ

このプロシージャは、Oracle Streamsクライアントにルールを追加します。

これは、次に示すいずれかのタイプのOracle Streamsクライアントのルール・セットに対してグローバル・ルールを追加します。

  • streams_typeパラメータをcaptureに設定すると、このプロシージャは、指定した表の行のサブセットに対する変更を取得する取得プロセス・ルールを追加します。

  • streams_typeパラメータをsync_captureに設定すると、このプロシージャは、指定した表の行のサブセットに対する変更を取得するルールを追加します。

  • streams_typeパラメータをapplyに設定し、streams_nameパラメータで適用プロセスの名前を指定すると、このプロシージャは、キュー内の論理変更レコード(LCR)のうち、指定した表の行のサブセットに対する変更が記録されるLCRを適用する適用プロセス・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

  • streams_typeパラメータをdequeueに設定すると、このプロシージャは、指定した表の行のサブセットに対する変更が記録される永続LCRをキューからデキューするメッセージ・クライアント・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

指定された取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントが存在しない場合は、そのクライアントが自動的に作成されます。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは3つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

ノート:

  • 現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。

  • 起動ユーザーには、同期取得を作成するためのDBAロールを付与する必要があります。

構文

DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
   table_name          IN   VARCHAR2,
   dml_condition       IN   VARCHAR2,
   streams_type        IN   VARCHAR2 DEFAULT 'apply',
   streams_name        IN   VARCHAR2 DEFAULT NULL,
   queue_name          IN   VARCHAR2 DEFAULT 'streams_queue',
   include_tagged_lcr  IN   BOOLEAN  DEFAULT FALSE,
   source_database     IN   VARCHAR2 DEFAULT NULL,
   insert_rule_name    OUT  VARCHAR2,
   update_rule_name    OUT  VARCHAR2,
   delete_rule_name    OUT  VARCHAR2);

DBMS_STREAMS_ADM.ADD_SUBSET_RULES(
   table_name          IN   VARCHAR2,
   dml_condition       IN   VARCHAR2,
   streams_type        IN   VARCHAR2 DEFAULT 'apply',
   streams_name        IN   VARCHAR2 DEFAULT NULL,
   queue_name          IN   VARCHAR2 DEFAULT 'streams_queue',
   include_tagged_lcr  IN   BOOLEAN  DEFAULT FALSE,
   source_database     IN   VARCHAR2 DEFAULT NULL);

パラメータ

表162-11 ADD_SUBSET_RULESプロシージャのパラメータ

パラメータ 説明

table_name

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

指定する表は、取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントと同じデータベース内に存在する必要があります。また、指定した表では、現在および将来にわたり、LOB列、LONG列、LONG RAW列またはXMLType列を使用できません。

dml_condition

サブセット条件。SQLのWHERE句に条件を指定する場合と同じ方法で、サブセット条件を指定します。

たとえば、salary4000を超え、かつjob_idSA_MANである行をhr.employees表で指定するには、次のように条件を入力します。

' salary > 4000 and job_id = ''SA_MAN'' '

ノート: 前述の例の引用符は、すべて一重引用符です。

streams_type

Oracle Streamsクライアントのタイプを次のように指定します。

  • 取得プロセスの場合は、capture

  • 同期取得の場合は、sync_capture

  • 適用プロセスの場合は、apply

  • メッセージ・クライアントの場合は、dequeue

streams_name

取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントの名前。所有者を指定しないでください。

このパラメータがNULLで、streams_typeパラメータがcapturesync_captureまたはdequeueであり、キューに関連する取得プロセス、同期取得またはメッセージ・クライアントが1つ存在する場合は、そのOracle Streamsクライアントが使用されます。キューに関連するOracle Streamsクライアントが存在しない場合は、システム生成の名前でOracle Streamsクライアントが自動的に作成されます。このパラメータがNULLで、指定したstreams_typeのOracle Streamsクライアントがキューに対して複数存在する場合は、エラーが発生します。

このパラメータがNULLで、streams_typeパラメータがapplyであり、関連する適用プロセスが1つ存在する場合は、その適用プロセスが使用されます。関連する適用プロセスは、次のいずれかの方法で選択されます。

  • source_databaseで指定されるソース・データベースを使用し、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

  • source_databaseNULLで、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

このパラメータがNULLで、関連する適用プロセスが存在しない場合は、システム生成の名前で適用プロセスが自動的に作成されます。

このパラメータがNULLで、関連する適用プロセスが複数存在する場合は、エラーが発生します。

各適用プロセスとメッセージ・クライアントは、それぞれが一意の名前を持つ必要があります。

queue_name

ローカル・キューの名前で、[schema_name.]queue_nameの形式で指定します。現行のデータベースにキューが含まれている必要があり、キューはANYDATAタイプを指定する必要があります。

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

取得プロセス・ルールまたは同期取得ルールの場合は、取得プロセスまたは同期取得によってLCRがエンキューされるキューを指定します。適用プロセス・ルールの場合は、適用プロセスによってメッセージがデキューされるキューを指定します。メッセージ・クライアント・ルールの場合は、メッセージ・クライアントによってメッセージがデキューされるキューを指定します。

include_tagged_lcr

TRUEの場合、Oracle Streamsクライアントはタグに関係なくそのアクションを実行します。

  • REDOエントリは、NULL以外のタグがあるかどうかに関係なく、常に取得プロセスによる取得の対象とみなされます。

  • 変更は、変更を行うセッションにNULL以外のタグがあるかどうかに関係なく、常に同期取得による取得の対象とみなされます。

  • LCRは、REDOエントリまたはLCRにNULL以外のタグがあるかどうかに関係なく、常にメッセージ・クライアントによる適用プロセスまたはデキューの適用対象とみなされます。

FALSEの場合、Oracle Streamsクライアントは、タグがNULLの場合にのみ、そのアクションを実行します。

  • REDOエントリは、NULLタグがある場合にのみ、取得プロセスによる取得の対象とみなされます。

  • 変更は、変更を行うセッションにNULLタグがある場合にのみ、同期取得による取得の対象とみなされます。

  • LCRは、NULLタグがある場合にのみ、メッセージ・クライアントによる適用プロセスまたはデキューの適用対象とみなされます。

通常、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐには、FALSEの設定が有効です。

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

source_database

ソース・データベースのグローバル名。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

取得プロセス・ルールの場合、ソース・データベース上でローカルに取得プロセスを作成するには、NULLを指定するか、ローカル・データベースのグローバル名を指定します。ダウンストリーム・データベース上のダウンストリーム取得プロセスのルール・セットにルールを追加する場合は、変更が取得されるソース・データベースを指定します。

同期取得ルールの場合は、ローカル・データベースの名前を指定します。

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

メッセージ・クライアント・ルールの場合、このプロシージャによって作成されるルールにソース・データベースに関する条件を付加しないときは、NULLを指定します。このプロシージャによって作成されるルールにソース・データベースに関する条件を付加する場合は、そのソース・データベースを指定します。ソース・データベースはLCRに記録される情報の一部ですが、ユーザーが作成するLCRには、ソース・データベースの情報が記録されない場合もあります。

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

insert_rule_name

システムによって生成されたINSERTルール名が出力されます。このルールによって、挿入と、挿入に変換する必要がある更新が制御されます。

update_rule_name

システムによって生成されたUPDATEルール名が出力されます。このルールによって、更新のまま変換されない更新が制御されます。

delete_rule_name

システムによって生成されたDELETEルール名が出力されます。このルールによって、削除と、削除に変換する必要がある更新が制御されます。

使用上のノート

このプロシージャを実行すると、指定された取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントに対して3つのルール(INSERT文に関するルール、UPDATE文に関するルール、DELETE文に関するルール)が生成されます。INSERT文とDELETE文については、dml_conditionパラメータで指定された条件を満たすDML変更のみが取得、適用、デキューの対象となります。UPDATE文については、次のバリエーションがあります。

  • DML変更の新旧の値が両方とも指定のdml_conditionを満たす場合、そのDML変更は変更なしでそのまま取得、適用、デキューの対象となります。

  • DML変更の新旧の値が両方とも指定のdml_conditionを満たさない場合、そのDML変更は取得、適用、デキューの対象となりません。

  • DML変更の古い値が指定のdml_conditionを満たし、新しい値が満たさない場合、DML変更は削除に変換されます。

  • DML変更の新しい値が指定のdml_conditionを満たし、古い値が満たさない場合、DML変更は挿入に変換されます。

更新が挿入または削除に変換されることを行の移行と呼びます。

取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントでは、これらのルールがフィルタ処理に使用されます。Oracle Streamsクライアントにポジティブ・ルール・セットがない場合は、ポジティブ・ルール・セットが自動的に作成され、表に関するルールがポジティブ・ルール・セットに追加されます。サブセット・ルールはポジティブ・ルール・セットのみに追加可能で、ネガティブ・ルール・セットには追加できません。プロセスの既存のルール・セット内にある他のルールは、この影響を受けません。新しいルールを追加するには、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージを使用します。

このプロシージャを実行すると、INSERT文、UPDATE文およびDELETE文のルールが自動的に作成され、これらのルールには、システム生成のルール名が指定されます。各ルールには、システム生成のルール名(表名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。表名と順序番号を組み合せた名前が長すぎる場合は、表名が切り捨てられます。ADD_SUBSET_RULESプロシージャがオーバーロードされているため、INSERT文、UPDATE文およびDELETE文に対するシステム生成のルール名が戻されます。

ノート:

サブセット・ルールはポジティブ・ルール・セットの内部のみで使用できます。ネガティブ・ルール・セットにはサブセット・ルールを追加できません。ネガティブ・ルール・セットにサブセット・ルールを追加すると、ネガティブ・ルール・セットによって破棄されないLCRに対して行の移行が実行されないため、予期しない結果が発生する場合があります。

次に、DML変更のフィルタ処理に関して作成されるルール条件の例を示します。このルール条件では、dml_conditionregion_id = 2table_namehr.regions、かつsource_databasedbs1.netである場合の更新操作を示します。

:dml.get_object_owner()='HR' AND :dml.get_object_name()='REGIONS' 
AND :dml.is_null_tag()='Y' AND :dml.get_source_database_name()='DBS1.NET' 
AND :dml.get_command_type()='UPDATE' 
AND (:dml.get_value('NEW','"REGION_ID"') IS NOT NULL) 
AND (:dml.get_value('OLD','"REGION_ID"') IS NOT NULL) 
AND (:dml.get_value('OLD','"REGION_ID"').AccessNumber()=2) 
AND (:dml.get_value('NEW','"REGION_ID"').AccessNumber()=2)

162.6.10 ADD_TABLE_PROPAGATION_RULESプロシージャ

このプロシージャは、伝播のポジティブ・ルール・セットまたはネガティブ・ルール・セットに表ルールを追加します。指定された伝播が存在しない場合は、伝播を作成します。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは2つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

構文

DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
   table_name              IN   VARCHAR2,
   streams_name            IN   VARCHAR2  DEFAULT NULL,
   source_queue_name       IN   VARCHAR2,
   destination_queue_name  IN   VARCHAR2,
   include_dml             IN   BOOLEAN   DEFAULT TRUE,
   include_ddl             IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr      IN   BOOLEAN   DEFAULT FALSE,
   source_database         IN   VARCHAR2  DEFAULT NULL,
   dml_rule_name           OUT  VARCHAR2,
   ddl_rule_name           OUT  VARCHAR2,
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   and_condition           IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
   table_name              IN   VARCHAR2,
   streams_name            IN   VARCHAR2  DEFAULT NULL,
   source_queue_name       IN   VARCHAR2,
   destination_queue_name  IN   VARCHAR2,
   include_dml             IN   BOOLEAN   DEFAULT TRUE,
   include_ddl             IN   BOOLEAN   DEFAULT FALSE,
   include_tagged_lcr      IN   BOOLEAN   DEFAULT FALSE,
   source_database         IN   VARCHAR2  DEFAULT NULL,
   inclusion_rule          IN   BOOLEAN   DEFAULT TRUE,
   and_condition           IN   VARCHAR2  DEFAULT NULL,
   queue_to_queue          IN   BOOLEAN   DEFAULT NULL);

パラメータ

表162-12 ADD_TABLE_PROPAGATION_RULESプロシージャのパラメータ

パラメータ 説明

table_name

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

streams_name

伝播の名前所有者を指定しないでください。

指定された伝播が存在しない場合は、自動的に作成されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播がすでに存在する場合は、その伝播が使用されます。

このパラメータがNULLで、同じソース・キューと宛先キュー(データベース・リンクを含む)を指定した伝播が存在しない場合は、システム生成の名前で伝播が自動的に作成されます。

source_queue_name

ソース・キューの名前で、[schema_name.]queue_nameの形式で指定します。現在のデータベースには、ソース・キューが含まれている必要があり、キューはANYDATAタイプである必要があります。

たとえば、strmadminスキーマ内のstreams_queueという名前のキューを指定するには、このパラメータにstrmadmin.streams_queueと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

宛先キュー(データベース・リンクを含む)の名前で、宛先キューがリモート・データベース内に存在する場合は、[schema_name.]queue_name[@dblink_name]と指定します。必ずANYDATAタイプのキューを指定してください。

たとえば、dbs2.netというデータベース・リンクを使用し、strmadminスキーマ内のstreams_queueという名前の宛先キューを指定するには、このパラメータにstrmadmin.streams_queue@dbs2.netと入力します。

スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

データベース・リンクが省略された場合は、現行のデータベースのグローバル名が使用されます。その場合、ソース・キューと宛先キューは同じデータベース内に存在する必要があります。

ノート: 接続修飾子は使用できません。

include_dml

TRUEに設定すると、DMLの変更に関するルールが作成されます。FALSEに設定すると、DMLルールは作成されません。NULLは許可されません。

include_ddl

TRUEに設定すると、DDLの変更に関するルールが作成されます。FALSEに設定すると、DDLルールは作成されません。NULLは許可されません。

生成されるルールは、表で動作するDDL変更または表内のオブジェクト(表の索引、トリガーなど)で動作するDDL変更に対してはTRUEと評価されます。また、表を参照しないDDL変更または下位の表を参照するDDL変更に対してはFALSEと評価されます。たとえば、表に基づいてシノニムまたはビューを作成する変更に対してはFALSEと評価されます。また、表を参照するPL/SQLサブプログラムへの変更に対してもFALSEと評価されます。

include_tagged_lcr

TRUEに設定すると、生成されるルールに対してOracle Streamsタグに関する条件が追加されません。したがって、これらのルールは、論理変更レコード(LCR)にNULL以外のタグがあるかどうかに関係なく、TRUEと評価されます。伝播のポジティブ・ルール・セットにルールが追加される場合、NULL以外のタグがLCRにあるかどうかに関係なく、LCRは常に伝播の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、データベースの完全なコピー(スタンバイなど)を作成するときに、このパラメータをTRUEに設定することをお薦めします。伝播のネガティブ・ルール・セットにルールが追加される場合は、LCRのタグの値に関係なく、LCRが破棄されます。

FALSEに設定すると、LCRにNULLのOracle Streamsタグがあるときにかぎり、ルールがTRUEと評価される条件が、生成される各ルールに追加されます。伝播のポジティブ・ルール・セットにルールが追加される場合、LCRにNULLのタグがあるときにかぎり、LCRが伝播の対象とみなされます。ポジティブ・ルール・セットにルールが追加される場合は、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐために、このパラメータをFALSEに設定することをお薦めします。伝播のネガティブ・ルール・セットにルールが追加される場合は、LCRにNULLのタグがあるときにかぎり、LCRを破棄できます。

inclusion_ruleパラメータをFALSEに設定する場合は、通常、このパラメータをTRUEに設定してください。

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

source_database

ソース・データベースのグローバル名。ソース・データベースは、変更が発生したデータベースです。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

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

伝播ルールではソース・データベースを指定することをお薦めします。

dml_rule_name

include_dmlTRUEの場合は、このパラメータでDMLルールの名前を指定します。

include_dmlFALSEの場合は、このパラメータをNULLに設定します。

ddl_rule_name

include_ddlTRUEの場合は、このパラメータでDDLルールの名前を指定します。

include_ddlFALSEの場合は、このパラメータをNULLに設定します。

inclusion_rule

inclusion_ruleTRUEに設定すると、伝播のポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、伝播のネガティブ・ルール・セットにルールが追加されます。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

and_condition

このパラメータにNULL以外の文字列を指定すると、次に示すようにAND句によって、システム生成されるルール条件の後に指定した条件が追加されます。

(system_condition) AND (and_condition)

指定する条件の変数は、必ず:lcrを使用してください。たとえば、Oracle Streamsタグの16進表現が'02'の場合にかぎり、このプロシージャで生成される表ルールをTRUEと評価するには、次のように条件を指定します。

:lcr.get_tag() = HEXTORAW(''02'')

指定した条件内の:lcr変数は、生成されるルールのタイプに応じて、:dmlまたは:ddlに変換されます。特定のLCRタイプ(行LCRまたはDDL LCR)に依存するLCRメンバー・サブプログラムを指定する場合は、このプロシージャによって適切なルールのみが生成されるように確認する必要があります。

つまり、行LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをTRUEに、include_ddlパラメータをFALSEに設定します。DDL LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをFALSEに、include_ddlパラメータをTRUEに設定します。

関連項目: 論理変更レコードのタイプ

queue_to_queue

TRUEまたはNULLの場合、このプロシージャによって作成される新しい伝播は、キューからキューへの伝播です。キューからキューへの伝播では、常に独自の伝播ジョブが存在し、宛先キューがOracle Real Application Clusters(Oracle RAC)データベースでバッファに入れられたキューの場合、自動フェイルオーバーのサービスが使用されます。

FALSEの場合、このプロシージャによって作成される新しい伝播はキューからデータベース・リンクへの伝播です。キューからデータベース・リンクの伝播では、同じデータベース・リンクを使用する他の伝播と伝播ジョブを共有できますが、Oracle RAC環境での自動フェイルオーバーはサポートされません。

このプロシージャでは、既存の伝播のqueue_to_queueプロパティは変更できません。指定した伝播が存在する場合は、それぞれの設定に対して次のように処理されます。

  • このパラメータがTRUEで、指定した伝播がキューからキューへの伝播でない場合は、エラーが発生します。

  • このパラメータがFALSEで、指定した伝播がキューからキューへの伝播の場合は、エラーが発生します。

  • このパラメータがNULL場合、伝播のqueue_to_queueプロパティは変更されません。

関連項目: キューからキューへの伝播の詳細は、『Oracle Streams概要および管理』を参照してください。

使用上のノート

このプロシージャは、現行のユーザーを使用して伝播を構成します。特定のソース・キューと宛先キューの間で許可される伝播は1つのみです。

このプロシージャは、include_dmlパラメータ値とinclude_ddlパラメータ値に基づいて、DMLとDDLのルールをそれぞれ自動的に作成します。各ルールには、システム生成のルール名(表名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。表名と順序番号を組み合せた名前が長すぎる場合は、表名が切り捨てられます。伝播では、これらのルールがフィルタ処理に使用されます。

次に、DML文のフィルタ処理に関して作成される表ルール条件の例を示します。

(((:dml.get_object_owner() = 'HR' and :dml.get_object_name() = 'LOCATIONS')) 
and :dml.is_null_tag() = 'Y' and :dml.get_source_database_name() = 'DBS1.NET' )

162.6.11 ADD_TABLE_RULESプロシージャ

このプロシージャは、Oracle Streamsクライアントのルール・セットにルールを追加します。

これは、次に示すいずれかのタイプのOracle Streamsクライアントのルール・セットに対してグローバル・ルールを追加します。

  • streams_typeパラメータをcaptureに設定すると、このプロシージャは、指定した表に対する変更を取得する取得プロセス・ルールを追加します。

  • streams_typeパラメータをsync_captureに設定すると、このプロシージャは、指定した表に対する変更を取得するルールを追加します。

  • streams_typeパラメータをapplyに設定し、streams_nameパラメータで適用プロセスの名前を指定すると、このプロシージャは、キュー内の論理変更レコード(LCR)のうち、指定した表に対する変更が記録されるLCRを適用する適用プロセス・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

  • streams_typeパラメータをdequeueに設定すると、このプロシージャは、指定した表に対する変更が記録される永続LCRをキューからデキューするメッセージ・クライアント・ルールを追加します。このルールでは、特定のソース・データベースに属するLCRのみをルールの対象として指定できます。

指定された取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントが存在しない場合は、そのクライアントが自動的に作成されます。

このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンでは2つのOUTパラメータを使用しますが、もう一方のバージョンでは使用しません。

ノート:

  • 現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。

  • 起動ユーザーには、同期取得を作成するためのDBAロールを付与する必要があります。

構文

DBMS_STREAMS_ADM.ADD_TABLE_RULES(
   table_name          IN   VARCHAR2,
   streams_type        IN   VARCHAR2,
   streams_name        IN   VARCHAR2 DEFAULT NULL,
   queue_name          IN   VARCHAR2 DEFAULT 'streams_queue',
   include_dml         IN   BOOLEAN  DEFAULT TRUE,
   include_ddl         IN   BOOLEAN  DEFAULT FALSE,
   include_tagged_lcr  IN   BOOLEAN  DEFAULT FALSE,
   source_database     IN   VARCHAR2 DEFAULT NULL,
   dml_rule_name       OUT  VARCHAR2,
   ddl_rule_name       OUT  VARCHAR2,
   inclusion_rule      IN   BOOLEAN   DEFAULT TRUE,
   and_condition       IN   VARCHAR2  DEFAULT NULL);

DBMS_STREAMS_ADM.ADD_TABLE_RULES(
   table_name          IN   VARCHAR2,
   streams_type        IN   VARCHAR2,
   streams_name        IN   VARCHAR2 DEFAULT NULL,
   queue_name          IN   VARCHAR2 DEFAULT 'streams_queue',
   include_dml         IN   BOOLEAN  DEFAULT TRUE,
   include_ddl         IN   BOOLEAN  DEFAULT FALSE,
   include_tagged_lcr  IN   BOOLEAN  DEFAULT FALSE,
   source_database     IN   VARCHAR2 DEFAULT NULL,
   inclusion_rule      IN   BOOLEAN   DEFAULT TRUE,
   and_condition       IN   VARCHAR2  DEFAULT NULL);

パラメータ

表162-13 ADD_TABLE_RULESプロシージャのパラメータ

パラメータ 説明

table_name

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

Oracle Streamsでは表の有無がチェックされないため、まだ存在しない表も指定できます。

streams_type

Oracle Streamsクライアントのタイプを次のように指定します。

  • 取得プロセスの場合は、capture

  • 同期取得の場合は、sync_capture

  • 適用プロセスの場合は、apply

  • メッセージ・クライアントの場合は、dequeue

streams_name

取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントの名前。所有者を指定しないでください。

このパラメータがNULLで、streams_typeパラメータがcapturesync_captureまたはdequeueであり、キューに関連する取得プロセス、同期取得またはメッセージ・クライアントが1つ存在する場合は、そのOracle Streamsクライアントが使用されます。キューに関連するOracle Streamsクライアントが存在しない場合は、システム生成の名前でOracle Streamsクライアントが自動的に作成されます。このパラメータがNULLで、指定したstreams_typeのOracle Streamsクライアントがキューに対して複数存在する場合は、エラーが発生します。

このパラメータがNULLで、streams_typeパラメータがapplyであり、関連する適用プロセスが1つ存在する場合は、その適用プロセスが使用されます。関連する適用プロセスは、次のいずれかの方法で選択されます。

  • source_databaseで指定されるソース・データベースを使用し、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

  • source_databaseNULLで、queue_nameで指定されるキューを使用する既存の適用プロセスが1つ存在する場合は、その適用プロセスが選択されます。

このパラメータがNULLで、関連する適用プロセスが存在しない場合は、システム生成の名前で適用プロセスが自動的に作成されます。

このパラメータがNULLで、関連する適用プロセスが複数存在する場合は、エラーが発生します。

各適用プロセスとメッセージ・クライアントは、それぞれが一意の名前を持つ必要があります。

queue_name

ローカル・キューの名前で、[schema_name.]queue_nameの形式で指定します。現行のデータベースにキューが含まれている必要があり、キューはANYDATAタイプを指定する必要があります。

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

取得プロセス・ルールまたは同期取得ルールの場合は、取得プロセスまたは同期取得によってLCRがエンキューされるキューを指定します。適用プロセス・ルールの場合は、適用プロセスによってメッセージがデキューされるキューを指定します。メッセージ・クライアント・ルールの場合は、メッセージ・クライアントによってメッセージがデキューされるキューを指定します。

include_dml

TRUEに設定すると、DMLの変更に関するDMLルールが作成されます。FALSEに設定すると、DMLルールは作成されません。NULLは許可されません。

include_ddl

TRUEに設定すると、DDLの変更に関するDDLルールが作成されます。FALSEに設定すると、DDLルールは作成されません。NULLは許可されません。

生成されるルールは、表で動作するDDL変更または表内のオブジェクト(表の索引、トリガーなど)で動作するDDL変更に対してはTRUEと評価されます。また、表を参照しないDDL変更または下位の表を参照するDDL変更に対してはFALSEと評価されます。たとえば、表に基づいてシノニムまたはビューを作成する変更に対してはFALSEと評価されます。また、表を参照するPL/SQLサブプログラムへの変更に対してもFALSEと評価されます。

include_tagged_lcr

TRUEに設定すると、生成されるルールに対してOracle Streamsタグに関する条件が追加されません。したがって、これらのルールは、REDOエントリ、セッションまたはLCRにNULL以外のタグがあるかどうかに関係なく、TRUEと評価されます。Oracle Streamsクライアントのポジティブ・ルール・セットにルールが追加される場合は、Oracle Streamsクライアントはタグに関係なくそのアクションを実行します。

  • REDOエントリは、NULL以外のタグがあるかどうかに関係なく、常に取得プロセスによる取得の対象とみなされます。

  • 変更は、変更を行うセッションにNULL以外のタグがあるかどうかに関係なく、常に同期取得による取得の対象とみなされます。

  • LCRは、REDOエントリまたはLCRにNULL以外のタグがあるかどうかに関係なく、常にメッセージ・クライアントによる適用プロセスまたはデキューの適用対象とみなされます。

ポジティブ・ルール・セットにルールが追加される場合は、データベースの完全なコピー(スタンバイなど)を作成するときに、このパラメータをTRUEに設定することをお薦めします。Oracle Streamsクライアントのネガティブ・ルール・セットにルールが追加される場合は、タグの値に関係なく、データベース変更が破棄されます。

FALSEに設定すると、REDOエントリ、セッションまたはLCRにNULLのOracle Streamsタグがあるときにかぎり、ルールがTRUEと評価される条件が、生成される各ルールに追加されます。Oracle Streamsクライアントのポジティブ・ルール・セットにルールが追加される場合は、Oracle Streamsクライアントは、タグがNULLの場合にのみ、そのアクションを実行します。

  • REDOエントリは、NULLタグがある場合にのみ、取得プロセスによる取得の対象とみなされます。

  • 変更は、変更を行うセッションにNULLタグがある場合にのみ、同期取得による取得の対象とみなされます。

  • LCRは、NULLタグがある場合にのみ、メッセージ・クライアントによる適用プロセスまたはデキューの適用対象とみなされます。

ポジティブ・ルール・セットにルールが追加される場合は、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐために、このパラメータをFALSEに設定することをお薦めします。Oracle Streamsクライアントのネガティブ・ルール・セットにルールが追加される場合は、NULLのタグがあるときにかぎり、データベース変更を破棄できます。

通常、変更が頻発する構成でソース・データベースに変更が循環するのを防ぐには、FALSEの設定が有効です。

inclusion_ruleパラメータをFALSEに設定する場合は、通常、このパラメータをTRUEに設定してください。

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

source_database

ソース・データベースのグローバル名。NULLに設定すると、生成されるルールに対してソース・データベースに関する条件が追加されません。

取得プロセス・ルールの場合、ソース・データベース上でローカルに取得プロセスを作成するには、NULLを指定するか、ローカル・データベースのグローバル名を指定します。ダウンストリーム・データベース上のダウンストリーム取得プロセスのルール・セットにルールを追加する場合は、変更が取得されるソース・データベースを指定します。

同期取得ルールの場合は、ローカル・データベースの名前を指定します。

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

メッセージ・クライアント・ルールの場合、このプロシージャによって作成されるルールにソース・データベースに関する条件を付加しないときは、NULLを指定します。このプロシージャによって作成されるルールにソース・データベースに関する条件を付加する場合は、そのソース・データベースを指定します。ソース・データベースはLCRに記録される情報の一部ですが、ユーザーが作成するLCRには、ソース・データベースの情報が記録されない場合もあります。

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

dml_rule_name

include_dmlTRUEの場合は、このパラメータでDMLルールの名前を指定します。

include_dmlFALSEの場合は、このパラメータをNULLに設定します。

ddl_rule_name

include_ddlTRUEの場合は、このパラメータでDDLルールの名前を指定します。

include_ddlFALSEの場合は、このパラメータをNULLに設定します。

inclusion_rule

inclusion_ruleTRUEに設定すると、Oracle Streamsクライアントのポジティブ・ルール・セットにルールが追加されます。

inclusion_ruleFALSEに設定すると、Oracle Streamsクライアントのネガティブ・ルール・セットにルールが追加されます。同期取得には、ネガティブ・ルール・セットを指定できません。同期取得にFALSEを指定すると、エラーが発生します。

どちらの場合も、ルール・セットが存在しないときは、自動的に作成されます。

and_condition

このパラメータにNULL以外の文字列を指定すると、次に示すようにAND句によって、システム生成されるルール条件の後に指定した条件が追加されます。

(system_condition) AND (and_condition)

指定する条件の変数は、必ず:lcrを使用してください。たとえば、Oracle Streamsタグの16進表現が'02'の場合にかぎり、このプロシージャで生成される表ルールをTRUEと評価するには、次のように条件を指定します。

:lcr.get_tag() = HEXTORAW(''02'')

指定した条件内の:lcr変数は、生成されるルールのタイプに応じて、:dmlまたは:ddlに変換されます。特定のLCRタイプ(行LCRまたはDDL LCR)に依存するLCRメンバー・サブプログラムを指定する場合は、このプロシージャによって適切なルールのみが生成されるように確認する必要があります。

つまり、行LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをTRUEに、include_ddlパラメータをFALSEに設定します。DDL LCRに対してのみ有効なLCRメンバー・サブプログラムを指定する場合は、include_dmlパラメータをFALSEに、include_ddlパラメータをTRUEに設定します。

関連項目: 論理変更レコードのタイプ

使用上のノート

このプロシージャは、include_dmlパラメータ値とinclude_ddlパラメータ値に基づいて、DMLとDDLのルールをそれぞれ自動的に作成します。各ルールには、システム生成のルール名(表名とその後ろに付加される順序番号で構成される)が付けられます。この順序番号によって、名前の競合が回避されます。表名と順序番号を組み合せた名前が長すぎる場合は、表名が切り捨てられます。取得プロセス、同期取得、適用プロセスまたはメッセージ・クライアントでは、これらのルールがフィルタ処理に使用されます。

次に、DMLの変更に関して作成される表ルール条件の例を示します。

(((:dml.get_object_owner() = 'HR' and :dml.get_object_name() = 'LOCATIONS')) 
and :dml.is_null_tag() = 'Y' and :dml.get_source_database_name() = 'DBS1.NET' )

162.6.12 CLEANUP_INSTANTIATION_SETUPプロシージャ

このプロシージャは、このパッケージのPRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって設定されたOracle Streamsレプリケーション構成を削除します。このプロシージャは、構成を直接削除するか、または構成を削除するスクリプトを生成できます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

ノート:

CLEANUP_INSTANTIATION_SETUPプロシージャの実行時、パラメータの値は、対応するPRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャの実行時に指定したパラメータ(perform_actionsscript_nameおよびscript_directory_objectを除く)の値と一致している必要があります。

構文

DBMS_STREAMS_ADM.CLEANUP_INSTANTIATION_SETUP(
   maintain_mode           IN VARCHAR2,
   tablespace_names        IN DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,
   source_database         IN VARCHAR2,
   destination_database    IN VARCHAR2,
   perform_actions         IN BOOLEAN   DEFAULT TRUE,
   script_name             IN VARCHAR2  DEFAULT NULL,
   script_directory_object IN VARCHAR2  DEFAULT NULL,
   capture_name            IN VARCHAR2  DEFAULT NULL,
   capture_queue_table     IN VARCHAR2  DEFAULT NULL,
   capture_queue_name      IN VARCHAR2  DEFAULT NULL,
   capture_queue_user      IN VARCHAR2  DEFAULT NULL,
   propagation_name        IN VARCHAR2  DEFAULT NULL,
   apply_name              IN VARCHAR2  DEFAULT NULL,
   apply_queue_table       IN VARCHAR2  DEFAULT NULL,
   apply_queue_name        IN VARCHAR2  DEFAULT NULL,
   apply_queue_user        IN VARCHAR2  DEFAULT NULL,
   bi_directional          IN BOOLEAN   DEFAULT FALSE,
   change_global_name      IN BOOLEAN   DEFAULT FALSE);

パラメータ

表162-14 CLEANUP_INSTANTIATION_SETUPプロシージャのパラメータ

パラメータ 説明

maintain_mode

次のいずれかを指定します。

  • GLOBALを指定すると、ソース・データベースと接続先データベースの両方でデータベース全体を維持していたOracle Streams構成がクリーンアップされます。

  • TRANSPORTABLE TABLESPACESを指定すると、ソース・データベースと接続先データベースの両方で表領域セットを維持していたOracle Streams構成がクリーンアップされます。

tablespace_names

maintain_modeTRANSPORTABLE TABLESPACESに設定した場合は、Oracle Streamsによって接続先データベースにクローンが作成され保守されるローカル表領域セットを指定します。

表領域セット内の表領域は、ソース・データベースに存在している必要がありますが、接続先データベースに存在しないようにする必要があります。

この表領域セットのデータファイルを格納するディレクトリごとに、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、それらのディレクトリ・オブジェクトに対するREAD権限が必要です。

maintain_modeGLOBALに設定した場合は、空の表領域セットを指定します。

maintain_modeの設定に関係なく、tablespace_namesパラメータが設定されていない場合またはNULLに設定されている場合は、エラーが発生します。

関連項目: 「TABLESPACE_SET表タイプ」

source_database

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

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

perform_actions

TRUEに設定すると、Oracle Streams構成を直接クリーンアップするために必要な処理が実行されます。

FALSEに設定すると、Oracle Streams構成を直接クリーンアップするために必要な処理は実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

script_name

このパラメータがNULL以外の値で、perform_actionsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、Oracle Streams構成のクリーンアップに使用するすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、perform_actionsパラメータがTRUEの場合は、指定したスクリプトが生成され、Oracle Streams構成を直接クリーンアップする処理が実行されます。

このパラメータがNULLで、perform_actionsパラメータがTRUEの場合は、Oracle Streams構成を直接クリーンアップする処理が実行され、スクリプトは生成されません。

このパラメータがNULLで、perform_actionsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

capture_name

Oracle Streams構成内の変更を取得するように構成する取得プロセスの名前。所有者を指定しないでください。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた取得プロセスが自動的に指定されます。

capture_queue_table

取得プロセスで使用する各キューのキュー表の名前で、[schema_name.]queue_table_nameという形式で指定します。たとえば、strmadmin.streams_queue_tableのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた取得キュー表が自動的に指定されます。

capture_queue_name

取得プロセスで使用する各キューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者名がデフォルトで使用されます。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた取得キューが自動的に指定されます。

capture_queue_user

ソース・データベース内のキューに対するENQUEUE権限とDEQUEUE権限を持っているユーザーの名前。このユーザーは、キューの保護キュー・ユーザーです。

propagation_name

Oracle Streams構成内の変更を転送するように構成する伝播の名前。所有者を指定しないでください。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた伝播が自動的に指定されます。

apply_name

Oracle Streams構成内の変更を適用するように構成する適用プロセスの名前。所有者を指定しないでください。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた適用プロセスが自動的に指定されます。

apply_queue_table

適用プロセスで使用する各キューのキュー表の名前で、[schema_name.]queue_table_nameという形式で指定します。たとえば、strmadmin.streams_queue_tableのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた適用キュー表が自動的に指定されます。

apply_queue_name

適用プロセスで使用する各キューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者名がデフォルトで使用されます。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

NULLに設定すると、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャによって作成され、システム生成の名前が付けられた適用キューが自動的に指定されます。

apply_queue_user

接続先データベース内のキューに対するENQUEUE権限とDEQUEUE権限を持っているユーザーの名前。このユーザーは、キューの保護キュー・ユーザーです。

bi_directional

source_databaseで指定するデータベースとdestination_databaseで指定するデータベースとの間のOracle Streamsレプリケーション構成が双方向の場合は、TRUEを指定します。

Oracle Streamsレプリケーションの構成が、現行のデータベースからdestination_databaseで指定するデータベースへの一方向レプリケーションの場合は、FALSEを指定します。

change_global_name

TRUEに設定すると、destination_databaseで指定したデータベースのグローバル名が、現行のデータベースのグローバル名に一致するように変更されます。

FALSEに設定すると、destination_databaseで指定したデータベースのグローバル名は変更されません。

162.6.13 DELETE_COLUMNプロシージャ

このプロシージャは、指定されたルールを満たす行論理変更レコード(LCR)から列を削除する宣言ルールベースの変換を追加または削除します。

指定されたルールがTRUEに評価されたときに実行する変換の場合、そのルールはOracle Streamsクライアントのポジティブ・ルール・セットに含まれている必要があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。

ノート:

  • DELETE_COLUMNプロシージャでサポートされているデータ・タイプは、Oracle Streams取得プロセスでサポートされているデータ・タイプと同じです。

  • DELETE_COLUMNプロシージャは、行LCR内の比較的少ない数の列を削除する場合に役立ちます。行LCR内のほとんどの列を削除し、比較的少ない数の列を保持するには、このパッケージのKEEP_COLUMNSプロシージャの使用を検討してください。

  • 宣言的変換では、行LCRのみを変換できます。これらの行LCRは、取得プロセスまたは同期取得で取得されたか、またはアプリケーションで作成され、エンキューされた行LCRです。したがって、このプロシージャを実行する場合は、DMLルールを指定する必要があります。DDLを指定すると、エラーが発生します。

構文

DBMS_STREAMS_ADM.DELETE_COLUMN(
   rule_name     IN  VARCHAR2,
   table_name    IN  VARCHAR2,
   column_name   IN  VARCHAR2,
   value_type    IN  VARCHAR2   DEFAULT '*',
   step_number   IN  NUMBER     DEFAULT 0,
   operation     IN  VARCHAR2   DEFAULT 'ADD');

パラメータ

表162-15 DELETE_COLUMNプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。NULLの場合は、エラーが発生します。

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

table_name

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

column_name

ルールを満たす各行LCRから削除する列の名前。

value_type

行LCRの新しい値から列を削除する場合は、'NEW'を指定します。

行LCRの古い値から列を削除する場合は、'OLD'を指定します。

行LCRの新しい値と古い値の両方から列を削除する場合は、'*'を指定します。

step_number

変換の実行順序。

関連項目: 変換順序の詳細は、『Oracle Streams概要および管理』を参照してください。

operation

変換をルールに追加する場合は、'ADD'を指定します。

変換をルールから削除する場合は、'REMOVE'を指定します。

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

使用上のノート

operationパラメータに'REMOVE'を指定すると、指定したルールに対する列削除の宣言ルールベースの変換のうち、指定したパラメータ(table_namecolumn_nameおよびstep_number)に一致するすべての変換が削除されます。これらのパラメータにNULLを指定すると、ワイルドカードとして動作します。次の表に、これらのパラメータの1つ以上がNULLの場合の、DELETE_COLUMNプロシージャの動作を示します。

table_name column_name step_number 結果

NULL

NULL

NULL

指定したルールに対するすべての列削除変換が削除されます。

NULL

NULL

NULL以外

指定したルールに対して指定されているstep_numberのすべての列削除変換が削除されます。

NULL

NULL以外

NULL以外

指定したルールに対して指定されているcolumn_nameおよびstep_numberのすべての列削除変換が削除されます。

NULL以外

NULL

NULL以外

指定したルールに対して指定されているtable_nameおよびstep_numberのすべての列削除変換が削除されます。

NULL

NULL以外

NULL

指定したルールに対して指定されているcolumn_nameのすべての列削除変換が削除されます。

NULL以外

NULL以外

NULL

指定したルールに対して指定されているtable_nameおよびcolumn_nameのすべての列削除変換が削除されます。

NULL以外

NULL

NULL

指定したルールに対して指定されているtable_nameのすべての列削除変換が削除されます。

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されているtable_namecolumn_nameおよびstep_numberのすべての列削除変換が削除されます。

162.6.14 GET_MESSAGE_TRACKINGファンクション

GET_MESSAGE_TRACKINGファンクションは、現在のセッションの追跡ラベルを戻します。

構文

DBMS_STREAMS_ADM.GET_MESSAGE_TRACKING
RETURN VARCHAR2;

162.6.15 GET_SCN_MAPPINGプロシージャ

このプロシージャは、Oracle Streamsレプリケーション環境内のOracle Streamsの取得プロセスと適用プロセスで使用するために、システム変更番号(SCN)に関する情報を取り出します。

取り出した情報は、次の目的で使用できます。

  • マルチ・ソースOracle Streams構成のソース・データベース上でPoint-in-Timeリカバリを実行した後、トランザクションを復元する。

  • 単一ソースOracle Streamsレプリケーション構成のソース・データベースまたは接続先データベースにおいて、対応するSCNに対してフラッシュバック問合せを実行する。

    参照:

構文

DBMS_STREAMS_ADM.GET_SCN_MAPPING(
   apply_name             IN  VARCHAR2,
   src_pit_scn            IN  NUMBER,
   dest_instantiation_scn OUT NUMBER,
   dest_start_scn         OUT NUMBER,
   dest_skip_txn_ids      OUT DBMS_UTILITY.NAME_ARRAY);

パラメータ

表162-16 GET_SCN_MAPPINGプロシージャのパラメータ

パラメータ 説明

apply_name

ソース・データベースから取得した論理変更レコード(LCR)を適用する適用プロセスの名前。指定した適用プロセスが存在しない場合は、エラーが発生します。

src_pit_scn

ソース・データベースにおけるSCN。

Point-in-Timeリカバリの場合は、ソース・データベースにおけるPoint-in-TimeリカバリSCNを指定します。

指定したSCNが最後に適用されたトランザクションのソース・コミットSCNよりも大きい場合は、dest_start_scndest_instantiation_scnの2つのパラメータにNULLが戻されます。この場合、接続先データベースに対して対応するトランザクションがまだ適用されていないため、これら2つのパラメータに値を戻すことはできません。

dest_instantiation_scn

ソース・データベースに指定したsrc_pit_scnに対応する、接続先データベースのSCN。

Point-in-Timeリカバリの実行中は、このSCNをソース・データベースにおけるインスタンス化SCNとして使用します。

dest_start_scn

Point-in-Timeリカバリにおいて、リカバリ取得プロセス用のstart_scnパラメータとして使用するSCN。

dest_skip_txn_ids

適用プロセスが非依存トランザクションを順不同に適用したため、dest_instantiation_scnでスキップされたトランザクションのトランザクションID。

Point-in-Timeリカバリの場合、これらのトランザクションIDはリカバリ適用プロセスによって無視されます。

このパラメータは、これらのトランザクションを適用した適用プロセスに対してcommit_serializationパラメータがDEPENDENT_TRANSACTIONSに設定され、トランザクションが順不同に適用された場合にのみ関連します。

162.6.16 GET_TAGファンクション

このファンクションは、現行のセッションで生成されるREDOエントリすべてに対してバイナリ・タグを取得します。

参照:

構文

DBMS_STREAMS_ADM.GET_TAG
RETURN RAW;

次の例は、現行の論理変更レコード(LCR)タグを出力として表示する方法を示しています。

SET SERVEROUTPUT ON
DECLARE
   raw_tag RAW(2000);
BEGIN
   raw_tag := DBMS_STREAMS_ADM.GET_TAG();
   DBMS_OUTPUT.PUT_LINE('Tag Value = ' || RAWTOHEX(raw_tag));
END;
/

DUALビューを問い合せて値を表示することもできます。

SELECT DBMS_STREAMS_ADM.GET_TAG FROM DUAL; 

162.6.17 KEEP_COLUMNSプロシージャ

このプロシージャは、指定されたルールを満たす行論理変更レコード(LCR)内の列のリストを保持する宣言ルールベースの変換を追加または削除します。変換によって、リストにない列が行LCRから削除されます。

指定されたルールがTRUEに評価されたときに実行する変換の場合、そのルールはOracle Streamsクライアントのポジティブ・ルール・セットに含まれている必要があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。

このプロシージャはオーバーロードされています。column_listパラメータは、VARCHAR2タイプで、column_tableパラメータは、DBMS_UTILITY.LNAME_ARRAYタイプです。これらのパラメータによって、列のリストを異なる方法で入力できますが、これらのパラメータを同時に使用することはできません。

ノート:

  • KEEP_COLUMNSプロシージャでサポートされているデータ・タイプは、Oracle Streams取得プロセスでサポートされているデータ・タイプと同じです。

  • KEEP_COLUMNSプロシージャは、行LCR内の比較的少ない数の列を保持する場合に役立ちます。行LCR内のほとんどの列を保持し、比較的少ない数の列を削除するには、このパッケージのDELETE_COLUMNプロシージャの使用を検討してください。

  • 宣言的変換では、行LCRのみを変換できます。これらの行LCRは、取得プロセスまたは同期取得で取得されたか、またはアプリケーションで作成され、エンキューされた行LCRです。したがって、このプロシージャを実行する場合は、DMLルールを指定する必要があります。DDLを指定すると、エラーが発生します。

参照:

構文

DBMS_STREAMS_ADM.KEEP_COLUMNS(
   rule_name     IN  VARCHAR2,
   table_name    IN  VARCHAR2,
   column_list   IN  VARCHAR2,
   value_type    IN  VARCHAR2 DEFAULT '*',
   step_number   IN  NUMBER DEFAULT 0,
   operation     IN  VARCHAR2 DEFAULT 'ADD');

DBMS_STREAMS_ADM.KEEP_COLUMNS(
   rule_name     IN  VARCHAR2,
   table_name    IN  VARCHAR2,
   column_table  IN  DBMS_UTILITY.LNAME_ARRAY,
   value_type    IN  VARCHAR2 DEFAULT '*',
   step_number   IN  NUMBER DEFAULT 0,
   operation     IN  VARCHAR2 DEFAULT 'ADD');

パラメータ

表162-17 KEEP_COLUMNSプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。NULLの場合は、エラーが発生します。

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

table_name

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

column_list

ルールを満たす各行LCRで保持される列の名前。VARCHAR2タイプのカンマ区切りリストを指定します。リストに含まれていない列は、変換によって行LCRから削除されません。

このパラメータがNULLに設定され、column_tableパラメータもNULLに設定されている場合は、エラーが発生します。

column_table

ルールを満たす各行LCRで保持される列の名前。DBMS_UTILITY.LNAME_ARRAYタイプのPL/SQL連想配列を指定し、この場合、各要素は表の名前です。最初のスキーマの位置は1です。最後の位置はNULLになります。

表に含まれていない列は、変換によって行LCRから削除されません。

このパラメータがNULLに設定され、column_listパラメータもNULLに設定されている場合は、エラーが発生します。

value_type

行LCRの新しい値に列を保持する場合は、'NEW'を指定します。

行LCRの古い値に列を保持する場合は、'OLD'を指定します。

行LCRの新しい値と古い値の両方に列を保持する場合は、'*'を指定します。

step_number

変換の実行順序。

関連項目: 変換順序の詳細は、『Oracle Streams概要および管理』を参照してください。

operation

変換をルールに追加する場合は、'ADD'を指定します。

変換をルールから削除する場合は、'REMOVE'を指定します。

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

使用上のノート

operationパラメータに'REMOVE'を指定すると、指定したルールに対する列保持の宣言ルールベースの変換のうち、指定したパラメータ(table_namecolumn_listcolumn_tableおよびstep_number)に一致するすべての変換が削除されます。これらのパラメータにNULLを指定すると、ワイルドカードとして動作します。次の表に、これらのパラメータの1つ以上がNULLの場合の、KEEP_COLUMNSプロシージャの動作を示します。

table_name column_list/column_table step_number 結果

NULL

NULL

NULL

指定したルールに対するすべての列保持変換が削除されます。

NULL

NULL

NULL以外

指定したルールに対して指定されているstep_numberのすべての列保持変換が削除されます。

NULL

NULL以外

NULL以外

指定したルールに対して指定されているcolumn_list/column_tableおよびstep_numberのすべての列保持変換が削除されます。

NULL以外

NULL

NULL以外

指定したルールに対して指定されているtable_nameおよびstep_numberのすべての列保持変換が削除されます。

NULL

NULL以外

NULL

指定したルールに対して指定されているcolumn_list/column_tableのすべての列保持変換が削除されます。

NULL以外

NULL以外

NULL

指定したルールに対して指定されているtable_nameおよびcolumn_list/column_tableのすべての列保持変換が削除されます。

NULL以外

NULL

NULL

指定したルールに対して指定されているtable_nameのすべての列保持変換が削除されます。

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されているtable_namecolumn_list/column_tableおよびstep_numberのすべての列保持変換が削除されます。

162.6.18 MAINTAIN_CHANGE_TABLEプロシージャ

このプロシージャは、ソース・テーブルに対して行われたデータ操作言語(DML)の変更を変更ハンドラを使用してチェンジ・テーブルに記録する、Oracle Streams環境を構成します。このプロシージャは、オプションで、表の一方向レプリケーション(ソース・データベースから接続先データベースへ)を構成することもできます。

このプロシージャは、環境を直接構成するか、または環境を構成するスクリプトを生成できます。

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

チェンジ・テーブルは、ソース・テーブルと同じデータベースまたは異なるデータベースに存在することができます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

ノート:

このプロシージャによって構成された環境は、ソース・テーブルに対して行われたデータ定義言語(DDL)の変更について、記録もレプリケートも行いません。

参照:

このプロシージャの詳細は、「Oracle Streams環境を構成するプロシージャ」を参照してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_CHANGE_TABLE(
   change_table_name        IN VARCHAR2,
   source_table_name        IN VARCHAR2,
   column_type_list         IN VARCHAR2,
   extra_column_list        IN VARCHAR2  DEFAULT 'command_type, value_type',
   capture_values           IN VARCHAR2,
   options_string           IN VARCHAR2  DEFAULT NULL,
   script_name              IN VARCHAR2  DEFAULT NULL,
   script_directory_object  IN VARCHAR2  DEFAULT NULL,
   perform_actions          IN BOOLEAN   DEFAULT TRUE,
   capture_name             IN VARCHAR2  DEFAULT NULL,
   propagation_name         IN VARCHAR2  DEFAULT NULL,
   apply_name               IN VARCHAR2  DEFAULT NULL,
   source_database          IN VARCHAR2  DEFAULT NULL,
   destination_database     IN VARCHAR2  DEFAULT NULL,
   keep_change_columns_only IN BOOLEAN   DEFAULT TRUE,
   execute_lcr              IN BOOLEAN   DEFAULT FALSE);

パラメータ

表162-18 MAINTAIN_CHANGE_TABLEプロシージャのパラメータ

パラメータ 説明

change_table_name

ソース・テーブルの変更を記録する表。この表は、構成後にOracle Streamsによって保持されます。

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

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

指定した表がdestination_databaseパラメータで指定したデータベースに存在する場合は、エラーが発生します。

source_table_name

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

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

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

column_type_list

変更が記録されるソース・テーブルの列のリスト。列とそのデータ・タイプごとにカンマ区切りリストを指定します。

たとえば、hr.jobs表に対して次のように指定します。

job_id VARCHAR2(10), job_title VARCHAR2(35), min_salary NUMBER(6), max_salary NUMBER(6)

プロシージャは、ソース・データベースの列と同じ名前を持つ列を無条件のサプリメンタル・ログ・グループに自動的に配置します。

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

extra_column_list

チェンジ・テーブルに格納するメタデータ属性のカンマ区切りリスト。メタデータ属性の列名は、属性名の後に$記号を付けた形式で示されます。たとえば、source_database_name属性は、チェンジ・テーブルのsource_database_name$列に格納されます。

次のメタデータ属性を含めることができます。

  • value_type

  • source_database_name

  • command_type

  • object_owner

  • object_name

  • tag

  • transaction_id

  • scn

  • commit_scn

  • compatible

  • instance_number

  • message_number

  • row_text

  • row_id

  • serial#

  • session#

  • source_time

  • thread#

  • tx_name

  • username

value_typeおよびmessage_numberを除き、これらのメタデータ属性はすべて行LCR属性であり、行LCRに格納できます。LCR属性の詳細は、『Oracle Streams概要および管理』を参照してください。

チェンジ・テーブルのvalue_type$列には、列の値が元の列の値であるか新しい列の値であるかに応じて、OLDまたはNEWが含まれます。

チェンジ・テーブルのmessage_number$列には、トランザクション内の各行LCRの識別番号が含まれます。メッセージ番号は、トランザクション内の各行LCRに対して段階的に増分され、トランザクション内での行LCRの順序を示します。

プロシージャはソース・データベースを自動的に構成して、追加属性(serial#など)に関する情報をREDOログに格納し、その情報を取得および記録できるようにします。

capture_values

ソース・テーブルに対する更新操作の実行時に取得する値を指定します。

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

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

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

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

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

options_string

チェンジ・テーブルを作成するCREATE TABLE文に渡されるオプションの文字列。この文字列は、作成されたCREATE TABLE文において、表の列を定義するカッコの後に追加されます。文字列は構文的に正確である必要があります。

script_name

このパラメータがNULL以外の値で、perform_actionsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、環境の構成に使用するすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、perform_actionsパラメータがTRUEの場合は、指定したスクリプトが生成され、レプリケーション環境を直接構成する処理が実行されます。

このパラメータがNULLで、perform_actionsパラメータがTRUEの場合は、レプリケーション環境を直接構成する処理が実行され、スクリプトは生成されません。

このパラメータがNULLで、perform_actionsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

perform_actions

TRUEに設定すると、環境を直接構成するために必要な処理が実行されます。

FALSEに設定すると、環境を直接構成するために必要な処理が実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

capture_name

変更を取得するように構成する各取得プロセスの名前。所有者を指定しないでください。

指定した名前が既存の取得プロセスの名前と一致した場合は、その既存の取得プロセスが使用され、データベースへの変更を取得するためのルールが取得プロセスのポジティブ・ルール・セットに追加されます。

NULLに設定すると、作成される個々の取得プロセスの名前が自動的に生成されます。

ノート: 取得プロセスは、作成した後で名前を変更することはできません。

propagation_name

ソース・データベースから接続先データベースに変更を伝播するように構成された伝播の名前。所有者を指定しないでください。

指定した名前が既存の伝播の名前と一致した場合は、その既存の伝播が使用され、変更を転送するためのルールが伝播のポジティブ・ルール・セットに追加されます。

NULLの場合は、システムによって伝播の名前が生成されます。

NULL以外の場合にsource_databasedestination_databaseを同じ値に設定すると、エラーが発生します。取得プロセスと適用プロセスが同じデータベースに存在する場合、それらは同じキューを使用できるため、伝播は不要です。

ノート: 伝播は、作成した後で名前を変更することは変更できません。

apply_name

変更を適用するように構成する各適用プロセスの名前。所有者を指定しないでください。

指定した名前が既存の適用プロセスの名前と一致した場合は、その既存の適用プロセスが使用され、変更を適用するためのルールが適用プロセスのポジティブ・ルール・セットに追加されます。

指定する適用プロセス名が、接続先データベースにある既存のメッセージ・クライアントの名前と同じにならないように注意してください。

NULLの場合は、システムによって適用プロセスの名前が生成されます。NULLに設定した場合、ソース・データベースからの変更を適用する適用プロセスは接続先データベース上に存在できません。ソース・データベースからの変更を適用する適用プロセスが接続先データベースに存在する場合は、このパラメータにNULL以外の値を指定します。

ノート: 適用プロセスは、作成した後で名前を変更することはできません。

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

keep_change_columns_only

TRUEに設定すると、このプロシージャは、column_type_listパラメータで指定した列のリストを保持する宣言ルールベースの変換を追加します。column_type_listパラメータで指定されていない列は、取得プロセスで取得された各行LCRから削除されます。

FALSEに設定すると、このプロシージャは宣言ルールベースの変換を作成せず、行LCR内のすべての列が保持されます。

column_type_listパラメータに含まれない列の情報が接続先データベースで必要な場合は、FALSEを設定します。たとえば、execute_lcrパラメータがTRUEに設定され、構成がソース・テーブルのすべての列をレプリケートしても、column_type_listパラメータにそれらの列のサブセットが含まれている場合は、keep_change_columns_onlyパラメータをFALSEに設定する必要があります。

ノート: このパラメータをTRUEに設定すると、column_type_listにソース・テーブルのすべての列が含まれている場合でも、常に宣言ルールベースの変換が作成されます。

execute_lcr

TRUEに設定すると、このプロシージャは、接続先データベースの各行LCRを実行する変更ハンドラを作成します。

FALSEに設定すると、接続先データベースで行LCRは実行されません。

使用上のノート

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

プロシージャによって構成されるOracle Streams環境のタイプ

このプロシージャは、次のタイプのOracle Streams環境を構成できます。

  • Local capture and apply on one database: source_databaseパラメータとdestination_databaseパラメータに同じグローバル名を指定します。

  • Local capture and remote apply: source_databaseパラメータにローカル・データベースのグローバル名を指定し、destination_databaseパラメータにリモート・データベースのグローバル名を指定します。

  • Downstream capture and local apply: source_databaseパラメータにリモート・データベースを指定し、destination_databaseパラメータにローカル・データベースを指定します。

  • Downstream capture and remote apply: source_databaseパラメータにリモート・データベースを指定し、destination_databaseパラメータにリモート・データベースを指定します。

このプロシージャによる一方向レプリケーション(オプション)

表の一方向レプリケーションを構成するには、変更内容を表に記録し、さらにexecute_lcrパラメータをTRUEに設定します。適用プロセスは、各行LCRを実行し、行LCRでの変更内容を接続先データベースのレプリカ表に適用します。この場合、プロシージャを実行する前に、接続先データベースでソース表がインスタンス化されていることを確認します。具体的には、インスタンス化のためにソース表が作成されていること、インスタンス化SCNが接続先データベースでレプリカ表に設定されていることが必要であり、通常は、ソース表とレプリカ表が一致している必要があります。

文DMLハンドラ、チェンジ・テーブル、行LCRの実行

このプロシージャは、次のアクションを実行する1つ以上の文DMLハンドラを構成します。

  • 行LCRの情報を使用して、チェンジ・テーブルの変更を記録する。

  • execute_lcrパラメータがTRUEに設定されている場合に、行LCRを実行する。

このプロシージャによって、capture_type_listextra_column_listおよびcapture_valuesパラメータで指定された変更を記録するために必要な属性が、行LCRに確実に含まれるようになります。このプロシージャは、apply_nameパラメータで指定された適用プロセスに文DMLハンドラを追加します。

162.6.19 MAINTAIN_GLOBALプロシージャ

このプロシージャは、データベース・レベルの変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。このプロシージャは、環境を直接構成するか、または環境を構成するスクリプトを生成できます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

ノート:

  • このプロシージャは、各取得プロセスおよび適用プロセスのネガティブ・ルール・セットにルールを追加して、Oracle Streamsでサポートされていないデータベース・オブジェクトをレプリケーション環境から自動的に除外します。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされないデータベース・オブジェクトが除外されていない場合は、取得エラーが発生します。

  • bi_directionalパラメータをTRUEに設定する場合、MAINTAIN_GLOBALプロシージャまたはプロシージャが作成するスクリプトを実行している間は、データ操作言語(DML)またはデータ定義言語(DDL)を接続先データベースに変更できません。この制限は、ソース・データベースには適用されません。

  • 取得プロセスでは、SYSSYSTEMまたはCTXSYSスキーマ内の変更は取得されません。このプロシージャは、これらのスキーマに対するレプリケーションは構成しません。

参照:

このプロシージャの詳細は、「Oracle Streams環境を構成するプロシージャ」を参照してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_GLOBAL(
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT NULL,
   capture_queue_table          IN VARCHAR2  DEFAULT NULL,
   capture_queue_name           IN VARCHAR2  DEFAULT NULL,
   capture_queue_user           IN VARCHAR2  DEFAULT NULL,
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   apply_queue_table            IN VARCHAR2  DEFAULT NULL,
   apply_queue_name             IN VARCHAR2  DEFAULT NULL,
   apply_queue_user             IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE,
   instantiation                IN INTEGER   DEFAULT 
                                             DBMS_STREAMS_ADM.INSTANTIATION_FULL);

パラメータ

参照:

共通のプロシージャのパラメータについては、「Oracle Streams環境を構成するプロシージャ」を参照してください。

表162-19 MAINTAIN_GLOBALプロシージャのパラメータ

パラメータ 説明

source_directory_object

生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルの格納先となる、ソース・データベースを実行するコンピュータ・システム上にあるディレクトリのディレクトリ・オブジェクト。プロシージャの実行後も、このファイルはこのディレクトリ内に残ります。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。この場合、source_directory_objectパラメータにはNULLを指定します。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULLの場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

destination_directory_object

生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルの転送先となる、宛先データベースを実行するコンピュータ・システム上にあるディレクトリのディレクトリ・オブジェクト。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。これらの場合は、destination_directory_objectパラメータをNULLに設定してください。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULLの場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

dump_file_name

データ・ポンプ・エクスポート・ダンプ・ファイルの名前。指定したファイル名のファイルが、source_directory_objectまたはdestination_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、エラーが発生します。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULLの場合は、エクスポート・ダンプ・ファイル名が自動的に生成されます。この場合、エクスポート・ダンプ・ファイル名はexpatnn.dmp(nnは順序番号)になります。ソース・ディレクトリ内で生成されるエクスポート・ダンプ・ファイル名が一意になるように、順序番号はファイルごとに増分されます。

log_file

データ・ポンプ・エクスポート・ログ・ファイルの名前。このログ・ファイルは、データ・ポンプ・エクスポート・ダンプ・ファイルと同じディレクトリに保存されます。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_FULLの場合、ログ・ファイル名は、エクスポート・ダンプ・ファイルの拡張子を.clgにした名前になります。

instantiation

インスタンス化を実行するかどうか、および実行する場合はインスタンス化のタイプを次のように指定します。

DBMS_STREAMS_ADM.INSTANTIATION_FULLを指定すると、ソース・データベースで完全なデータ・ポンプ・エクスポートが実行され、接続先データベースでそのエクスポート・ダンプ・ファイルのデータ・ポンプ・インポートが実行されます。インスタンス化SCNは、インポート時に共有データベース・オブジェクトに対して設定されます。instantiationパラメータにこの値を設定する場合は、このプロシージャを実行するユーザーにDBMS_FILE_TRANSFERパッケージのEXECUTE権限が必要です。

DBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORKは、ネットワーク全体からのデータ・ポンプ・インポートを実行します。ネットワーク・インポートとは、エクスポート・ダンプ・ファイルを使用せずにデータ・ポンプでインポートを実行することを意味します。インスタンス化SCNは、インポート時に共有データベース・オブジェクトに対して設定されます。instantiationパラメータをこの値に設定している場合、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

DBMS_STREAMS_ADM.INSTANTIATION_NONEを指定すると、インスタンス化は実行されません。この設定は、perform_actionsパラメータがFALSEに設定されており、プロシージャで構成スクリプトを生成する場合にのみ有効です。この場合、構成スクリプトによって、インスタンス化、および各共有データベース・オブジェクトのインスタンス化SCNの設定は実行されません。かわりに、ユーザーがインスタンス化を実行し、インスタンス化SCNの値を適切に設定する必要があります。RMANのDUPLICATEコマンドまたはCONVERT DATABASEコマンドを使用してデータベースをインスタンス化する場合は、接続先データベースを取得データベースにすることはできません。

このパラメータをDBMS_STREAMS_ADM.INSTANTIATION_FULLまたはDBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORKに設定する場合は、インスタンス化するデータベース・オブジェクトがソース・データベースに存在する必要があります。

接続先データベースにインスタンス化されたデータベース・オブジェクトがない場合は、ソース・データベースからのサプリメンタル・ロギング指定および索引やトリガーなどのサポート・データベース・オブジェクトとともにインポートされます。ただし、インスタンス化の実行前に接続先データベースにデータベース・オブジェクトがある場合は、インポートされません。このため、ソース・データベースからのサプリメンタル・ロギング指定は宛先データベースのデータベース・オブジェクトに指定されず、サポート・データベース・オブジェクトはインポートされません。

162.6.20 MAINTAIN_SCHEMASプロシージャ

このプロシージャは、指定されたスキーマへの変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

このプロシージャは、環境を直接構成するか、または環境を構成するスクリプトを生成できます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

このプロシージャはオーバーロードされています。1つのschema_namesパラメータは、VARCHAR2タイプで、もう1つのschema_namesパラメータは、DBMS_UTILITY.UNCL_ARRAYタイプです。これらのパラメータによって、スキーマのリストを異なる方法で入力できますが、これらのパラメータを同時に使用することはできません。

ノート:

  • このプロシージャは、各取得プロセスおよび適用プロセスのネガティブ・ルール・セットにルールを追加して、Oracle Streamsでサポートされていない、スキーマ内のデータベース・オブジェクトをレプリケーション環境から自動的に除外します。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされないデータベース・オブジェクトが除外されていない場合は、取得エラーが発生します。

  • bi_directionalパラメータをTRUEに設定している場合、MAINTAIN_SCHEMASプロシージャまたはプロシージャが作成するスクリプトを実行している間は、データ操作言語(DML)またはデータ定義言語(DDL)を、接続先データベースの共有データベース・オブジェクトに変更できません。この制限は、ソース・データベースには適用されません。

参照:

このプロシージャの詳細は、「Oracle Streams環境を構成するプロシージャ」を参照してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
   schema_names                 IN VARCHAR2,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT NULL,
   capture_queue_table          IN VARCHAR2  DEFAULT NULL,
   capture_queue_name           IN VARCHAR2  DEFAULT NULL,
   capture_queue_user           IN VARCHAR2  DEFAULT NULL,
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   apply_queue_table            IN VARCHAR2  DEFAULT NULL,
   apply_queue_name             IN VARCHAR2  DEFAULT NULL,
   apply_queue_user             IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE,
   instantiation                IN INTEGER   DEFAULT 
                                           DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA);

DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
   schema_names                 IN DBMS_UTILITY.UNCL_ARRAY,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT NULL,
   capture_queue_table          IN VARCHAR2  DEFAULT NULL,
   capture_queue_name           IN VARCHAR2  DEFAULT NULL,
   capture_queue_user           IN VARCHAR2  DEFAULT NULL,
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   apply_queue_table            IN VARCHAR2  DEFAULT NULL,
   apply_queue_name             IN VARCHAR2  DEFAULT NULL,
   apply_queue_user             IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE,
   instantiation                IN INTEGER   DEFAULT 
                                           DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA);

パラメータ

参照:

表162-20にない共通のプロシージャのパラメータについては、「Oracle Streams環境を構成するプロシージャ」を参照してください。

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

パラメータ 説明

schema_names

レプリケーションを行うように構成し、構成後はOracle Streamsによって保守されるスキーマ。スキーマは、次の方法で指定できます。

  • VARCHAR2タイプのカンマ区切りリスト。

  • DBMS_UTILITY.UNCL_ARRAYタイプのPL/SQL連想配列で、スキーマの名前が各要素になります。最初のスキーマの位置は1です。最後の位置はNULLになります。

このプロシージャでは、次のいずれかの場合にエラーが発生します。

  • 指定したスキーマがソース・データベースに存在しない場合

  • schema_namesパラメータをNULLに設定した場合

source_directory_object

生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルの格納先となる、ソース・データベースを実行するコンピュータ・システム上にあるディレクトリのディレクトリ・オブジェクト。プロシージャの実行後も、このファイルはこのディレクトリ内に残ります。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。この場合、source_directory_objectパラメータにはNULLを指定します。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMAの場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

destination_directory_object

生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルの転送先となる、宛先データベースを実行するコンピュータ・システム上にあるディレクトリのディレクトリ・オブジェクト。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。この場合は、destination_directory_objectパラメータをNULLに設定してください。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMAの場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

dump_file_name

データ・ポンプ・エクスポート・ダンプ・ファイルの名前。指定したファイル名のファイルが、source_directory_objectまたはdestination_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、エラーが発生します。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMAの場合は、エクスポート・ダンプ・ファイルの名前が自動的に生成されます。この場合、エクスポート・ダンプ・ファイル名はexpatnn.dmp(nnは順序番号)になります。ソース・ディレクトリ内で生成されるエクスポート・ダンプ・ファイル名が一意になるように、順序番号はファイルごとに増分されます。

capture_queue_user

ソース・データベース内のキューに対するENQUEUE権限とDEQUEUE権限を必要とするユーザーの名前。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

log_file

データ・ポンプ・エクスポート・ログ・ファイルの名前。このログ・ファイルは、データ・ポンプ・エクスポート・ダンプ・ファイルと同じディレクトリに保存されます。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_SCHEMAの場合、ログ・ファイル名は、エクスポート・ダンプ・ファイルの拡張子を.clgにした名前になります。

instantiation

インスタンス化を実行するかどうか、および実行する場合はインスタンス化のタイプを次のように指定します。

DBMS_STREAMS_ADM.INSTANTIATION_SCHEMAを指定すると、ソース・データベースで完全なデータ・ポンプ・エクスポートが実行され、接続先データベースでそのエクスポート・ダンプ・ファイルのデータ・ポンプ・インポートが実行されます。インスタンス化SCNは、インポート時に共有データベース・オブジェクトに対して設定されます。instantiationパラメータにこの値を設定する場合は、このプロシージャを実行するユーザーにDBMS_FILE_TRANSFERパッケージのEXECUTE権限が必要です。

DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORKは、ネットワーク全体からのデータ・ポンプ・インポートを実行します。ネットワーク・インポートとは、エクスポート・ダンプ・ファイルを使用せずにデータ・ポンプでインポートを実行することを意味します。インスタンス化SCNは、インポート時に共有データベース・オブジェクトに対して設定されます。instantiationパラメータをこの値に設定している場合、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

DBMS_STREAMS_ADM.INSTANTIATION_NONEを指定すると、インスタンス化は実行されません。この設定は、perform_actionsパラメータがFALSEに設定されており、プロシージャで構成スクリプトを生成する場合にのみ有効です。この場合、構成スクリプトによって、インスタンス化、および各共有データベース・オブジェクトのインスタンス化SCNの設定は実行されません。かわりに、ユーザーがインスタンス化を実行し、インスタンス化SCNの値を適切に設定する必要があります。

このパラメータをDBMS_STREAMS_ADM.INSTANTIATION_SCHEMAまたはDBMS_STREAMS_ADM.INSTANTIATION_SCHEMA_NETWORKに設定する場合は、インスタンス化するデータベース・オブジェクトがソース・データベースに存在する必要があります。また、スキーマの格納されている表領域が接続先データベースに存在する必要もあります。

接続先データベースにインスタンス化されたデータベース・オブジェクトがない場合は、ソース・データベースからのサプリメンタル・ロギング指定および索引やトリガーなどのサポート・データベース・オブジェクトとともにインポートされます。ただし、インスタンス化の実行前に接続先データベースにデータベース・オブジェクトがある場合は、インポートされません。このため、ソース・データベースからのサプリメンタル・ロギング指定は宛先データベースのデータベース・オブジェクトに指定されず、サポート・データベース・オブジェクトはインポートされません。

162.6.21 MAINTAIN_SIMPLE_TABLESPACEプロシージャ

このプロシージャは、ソース・データベース内の単一表領域のクローンを接続先データベース内に作成し、Oracle Streamsを使用してソース・データベース内と接続先データベース内の表領域を保守します。

このプロシージャは、これらの処理を直接実行するか、またはこれらの処理を実行するスクリプトを生成できます。このプロシージャは、ソース・データベースで実行します。

ノート:

このプロシージャの使用は推奨されていません。かわりにMAINTAIN_SIMPLE_TTSプロシージャを使用してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TABLESPACE(
   tablespace_name              IN VARCHAR2,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   destination_database         IN VARCHAR2,
   setup_streams                IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE);

パラメータ

表162-21 MAINTAIN_SIMPLE_TABLESPACEプロシージャのパラメータ

パラメータ 説明

tablespace_name

Oracle Streamsによって接続先データベースにクローンが作成され保守される、ローカル単一表領域。

この表領域は、ソース・データベースには存在している必要がありますが、接続先データベースには存在しないようにする必要があります。

この表領域のデータファイルを格納するディレクトリには、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、そのディレクトリ・オブジェクトに対するREAD権限が必要です。ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

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

source_directory_object

ソース・データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域のデータファイルが保存されます。プロシージャの実行後も、これらのファイルはこのディレクトリ内に残ります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

destination_directory_object

接続先データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域のデータファイルが転送されます。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

destination_database

宛先データベースのグローバル名。接続先データベースのグローバル名と同じ名前を持つ、ソース・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。

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

setup_streams

TRUEに設定すると、表領域を直接保守するために必要な処理が実行されます。

FALSEに設定すると、表領域を直接保守するために必要な処理は実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

script_name

このパラメータがNULL以外の値で、setup_streamsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、指定された表領域を保守するために必要なすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、setup_streamsパラメータがTRUEの場合は、指定のスクリプトが生成され、指定の表領域を直接保守する処理が実行されます。

このパラメータがNULLで、setup_streamsパラメータがTRUEの場合は、スクリプトは生成されず、指定の表領域を直接保守する処理が実行されます。

このパラメータがNULLで、setup_streamsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

bi_directional

現行のデータベースと、destination_databaseで指定されるデータベースとの間で、双方向のレプリケーションを構成する場合は、TRUEを指定します。両方のデータベースがソース・データベースおよび接続先データベースとして構成され、両方のデータベースで取得プロセスおよび適用プロセスが構成されて、データベース間でメッセージを転送する伝播が構成されます。

現行のデータベースと、destination_databaseで指定されるデータベースとの間で、一方向のレプリケーションを構成する場合は、FALSEを指定します。現行のデータベースで取得プロセスが構成され、現行のデータベースから接続先データベースにメッセージを転送する伝播が構成され、接続先データベースで適用プロセスが構成されます。

使用上のノート

指定する表領域は単一表領域である必要があります。単一表領域とは、1つのデータファイルのみを使用する自己完結型の単一表領域です。自己完結型の表領域には、その表領域の外部を指す表領域からの参照は含まれません。たとえば、表領域の索引が異なる表領域の表に対する索引である場合、その表領域は自己完結型ではありません。このプロシージャは、単一でない表領域、つまり表領域セットに対しては使用できません。

保守されないDDL変更

このプロシージャのOracle Streams環境構成では、表領域に対するDDL変更または表領域内のデータベース・オブジェクトに対するDDL変更は保守されません。たとえば、このプロシージャによって構成されるOracle Streams環境では、表領域に関するALTER TABLESPACE文や、表領域内の表に関するALTER TABLE文がレプリケートされません。DDL変更が保守されるようにするには、Oracle Streams環境を手作業で構成するか、このプロシージャによって生成されたスクリプトを編集する必要があります。

このプロシージャの関連項目

MAINTAIN_SIMPLE_TABLESPACEプロシージャについては、次の説明を参照してください。

このプロシージャの実行要件

MAINTAIN_SIMPLE_TABLESPACEプロシージャを実行するには、次の要件を満たしている必要があります。

  • このプロシージャは、ソース・データベースで実行します。

  • 構成時に、両方のデータベースがオープンしている必要があります。プロシージャでスクリプトの生成のみを行う場合は、プロシージャの実行時に、destination_databaseパラメータで指定されるデータベースが開いている必要はありませんが、生成されたスクリプトを実行するときは、両方のデータベースをオープンしておく必要があります。

  • このプロシージャを実行するユーザーには、DBAロールを付与してください。また、次の処理を実行するための権限も必要です。

    • ANYDATAキュー、取得プロセス、伝播および適用プロセスを作成する権限。

    • サプリメンタル・ロギングを指定する権限。

    • DBMS_STREAMS_ADMおよびDBMS_AQADMパッケージのサブプログラムを実行する権限。

    • destination_databaseパラメータで指定されたデータベースにデータベース・リンクを通じてアクセスする権限。このデータベース・リンクの名前は、接続先データベースのグローバル名と同じである必要があります。

    • DBMS_STREAMS_TABLESPACES_ADMパッケージのサブプログラムを実行する権限。

    • DBMS_STREAMS_TABLESPACES_ADMパッケージのCLONE_SIMPLE_TABLESPACEプロシージャをソース・データベースで実行するのに必要な権限。必要な権限の一覧は、「CLONE_SIMPLE_TABLESPACEプロシージャ」を参照してください。

    • DBMS_STREAMS_TABLESPACES_ADMパッケージのATTACH_SIMPLE_TABLESPACEプロシージャを接続先データベースで実行するのに必要な権限。必要な権限の一覧は、「ATTACH_SIMPLE_TABLESPACEプロシージャ」を参照してください。

    このプロシージャを実行するユーザーが、必要な権限を所有するには、各データベースにOracle Streams管理者を構成し、そのOracle Streams管理者のスキーマ内に各データベース・リンクを作成する必要があります。

    通常、DBAロールは、構成の完了後に必要に応じてユーザーから取り消します。

  • bi_directionalパラメータをTRUEに設定した場合は、接続先データベース上の対応するユーザーが、データベース・リンクを通じてソース・データベースにアクセスできるようにする必要があります。このデータベース・リンクの名前は、ソース・データベースのグローバル名と同じである必要があります。

  • 指定する各ディレクトリ・オブジェクトは、SQL文のCREATE DIRECTORYを使用して作成する必要があります。このプロシージャを起動するユーザーには、それぞれのディレクトリ・オブジェクトに対するREAD権限およびWRITE権限が必要です。

  • このプロシージャを次の条件で実行する場合、このプロシージャで構成するデータベースはOracle Database 10g リリース2以上のデータベースである必要があります。

    • このプロシージャをOracle Database 10g リリース2以上のデータベースで実行する場合。

    • Oracle Streamsレプリケーション環境を直接構成するためにsetup_streamsパラメータがTRUEに設定されている場合。

  • このプロシージャを次の条件で実行する場合、このプロシージャで構成するデータベースはOracle Database 10g リリース1以上のデータベースである必要があります。

    • このプロシージャをOracle Database 10g リリース2以上のデータベースで実行する場合。

    • このプロシージャのsetup_streamsパラメータがFALSEに設定され、生成されたスクリプトでレプリケーション環境が構成されている場合。

    スクリプトを使用してOracle Database 10g リリース1のデータベースを構成する場合は、Oracle Database 10g リリース2以上のみで使用可能な機能(キューからキューへの伝播など)が構成されないように、スクリプトを変更する必要があります。

  • このプロシージャをOracle Database 10g リリース1のデータベースで実行する場合、このプロシージャで構成するデータベースは、Oracle Database 10g リリース1以上のデータベースである必要があります。

参照:

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

MAINTAIN_SIMPLE_TABLESPACEプロシージャから除外されたパラメータのデフォルト値

このプロシージャは、MAINTAIN_SIMPLE_TABLESPACEプロシージャに存在しない、MAINTAIN_TABLESPACESプロシージャのパラメータのデフォルト値を使用します。たとえば、このプロシージャは、MAINTAIN_TABLESPACESプロシージャ内のcapture_nameパラメータのデフォルト値がcaptureであるため、captureという名前の取得プロセスをソース・データベースで作成します。

構成の進行状況およびリカバリ機能

setup_streamsパラメータをTRUEに設定して、このプロシージャを実行すると、その構成処理に関するメタデータがデータ・ディクショナリ・ビューのDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSに記録されます。エラーが発生したためプロシージャが停止した場合は、エラーの原因となった状況を解消してからRECOVER_OPERATIONプロシージャを使用すると、構成を完了できます。

ノート:

setup_streamsパラメータをFALSEに設定して、このプロシージャを実行した場合は、前述のビューにデータが格納されません。また、このプロシージャで生成されたスクリプトを実行した場合も、データはビューに格納されません。

162.6.22 MAINTAIN_SIMPLE_TTSプロシージャ

このプロシージャは、ソース・データベース内の単一表領域のクローンを接続先データベース内に作成し、Oracle Streamsを使用してソース・データベース内と接続先データベース内の表領域を保守します。

このプロシージャは、これらの処理を直接実行するか、またはこれらの処理を実行するスクリプトを生成できます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

ノート:

  • このプロシージャは、各取得プロセスおよび適用プロセスのネガティブ・ルール・セットにルールを追加して、Oracle Streamsでサポートされていない、表領域内のデータベース・オブジェクトをレプリケーション環境から自動的に除外します。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされないデータベース・オブジェクトが除外されていない場合は、取得エラーが発生します。

  • このプロシージャは、推奨されないMAINTAIN_SIMPLE_TABLESPACEプロシージャのかわりに使用します。

参照:

このプロシージャの詳細は、「Oracle Streams環境を構成するプロシージャ」を参照してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_SIMPLE_TTS(
   tablespace_name              IN VARCHAR2,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE);

パラメータ

参照:

表162-22にない共通のプロシージャのパラメータについては、「Oracle Streams環境を構成するプロシージャ」を参照してください。

表162-22 MAINTAIN_SIMPLE_TTSプロシージャのパラメータ

パラメータ 説明

tablespace_name

Oracle Streamsによって接続先データベースにクローンが作成され保守される、ローカル単一表領域。

この表領域は、ソース・データベースには存在している必要がありますが、接続先データベースには存在しないようにする必要があります。

この表領域のデータファイルを格納するディレクトリには、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、そのディレクトリ・オブジェクトに対するREAD権限が必要です。ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

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

source_directory_object

ソース・データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域のデータファイルが保存されます。プロシージャの実行後も、これらのファイルはこのディレクトリ内に残ります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

destination_directory_object

接続先データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域のデータファイルが転送されます。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

使用上のノート

指定する表領域は単一表領域である必要があります。単一表領域とは、1つのデータファイルのみを使用する自己完結型の単一表領域です。自己完結型の表領域には、その表領域の外部を指す表領域からの参照は含まれません。たとえば、表領域の索引が異なる表領域の表に対する索引である場合、その表領域は自己完結型ではありません。このプロシージャは、単一でない表領域、つまり表領域セットに対しては使用できません。

保守されないDDL変更

このプロシージャのOracle Streams環境構成では、表領域に対するDDL変更または表領域内のデータベース・オブジェクトに対するDDL変更は保守されません。たとえば、このプロシージャによって構成されるOracle Streams環境では、表領域に関するALTER TABLESPACE文や、表領域内の表に関するALTER TABLE文がレプリケートされません。DDL変更が保守されるようにするには、Oracle Streams環境を手作業で構成するか、このプロシージャによって生成されたスクリプトを編集する必要があります。

MAINTAIN_SIMPLE_TTSプロシージャで必要なその他の権限

MAINTAIN_SIMPLE_TTSプロシージャを実行するユーザーには、「Oracle Streams環境を構成するプロシージャ」で説明した権限の他に、次の処理を実行するための権限も必要です。

  • DBMS_STREAMS_TABLESPACES_ADMパッケージのサブプログラムを実行する権限。

  • DBMS_STREAMS_TABLESPACES_ADMパッケージのCLONE_SIMPLE_TABLESPACEプロシージャをソース・データベースで実行するのに必要な権限。必要な権限の一覧は、「CLONE_SIMPLE_TABLESPACEプロシージャ」を参照してください。

  • DBMS_STREAMS_TABLESPACES_ADMパッケージのATTACH_SIMPLE_TABLESPACEプロシージャを接続先データベースで実行するのに必要な権限。必要な権限の一覧は、「ATTACH_SIMPLE_TABLESPACEプロシージャ」を参照してください。

MAINTAIN_SIMPLE_TTSプロシージャから除外されたパラメータのデフォルト値

このプロシージャは、MAINTAIN_SIMPLE_TTSプロシージャに存在しない、MAINTAIN_TTSプロシージャのパラメータのデフォルト値を使用します。たとえば、このプロシージャは、取得プロセス名を自動的に生成しますが、これは、MAINTAIN_TTSプロシージャのcapture_nameパラメータのデフォルト値がNULLであるためです(MAINTAIN_TTSプロシージャは、capture_nameNULLに指定されている場合、取得プロセス名を自動的に生成します)。

162.6.23 MAINTAIN_TABLESプロシージャ

このプロシージャは、指定された表への変更を2つのデータベース間でレプリケートするOracle Streams環境を構成します。

このプロシージャは、環境を直接構成するか、または環境を構成するスクリプトを生成できます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

このプロシージャはオーバーロードされています。1つのtable_namesパラメータは、VARCHAR2タイプで、もう1つのtable_namesパラメータは、DBMS_UTILITY.UNCL_ARRAYタイプです。これらのパラメータによって、スキーマのリストを異なる方法で入力できますが、これらのパラメータを同時に使用することはできません。

ノート:

bi_directionalパラメータをTRUEに設定した場合、MAINTAIN_TABLESプロシージャまたはプロシージャによって生成されたスクリプトの実行中に、接続先データベースの共有データベース・オブジェクトに対するデータ操作言語(DML)変更またはデータ定義言語(DDL)変更を許可しないでください。この制限は、ソース・データベースには適用されません。

参照:

このプロシージャの詳細は、「Oracle Streams環境を構成するプロシージャ」を参照してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_TABLES(
   table_names                  IN VARCHAR2,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT NULL,
   capture_queue_table          IN VARCHAR2  DEFAULT NULL,
   capture_queue_name           IN VARCHAR2  DEFAULT NULL,
   capture_queue_user           IN VARCHAR2  DEFAULT NULL,
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   apply_queue_table            IN VARCHAR2  DEFAULT NULL,
   apply_queue_name             IN VARCHAR2  DEFAULT NULL,
   apply_queue_user             IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE,
   instantiation                IN INTEGER   DEFAULT 
                                           DBMS_STREAMS_ADM.INSTANTIATION_TABLE);

DBMS_STREAMS_ADM.MAINTAIN_TABLES(
   table_names                  IN DBMS_UTILITY.UNCL_ARRAY,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT NULL,
   capture_queue_table          IN VARCHAR2  DEFAULT NULL,
   capture_queue_name           IN VARCHAR2  DEFAULT NULL,
   capture_queue_user           IN VARCHAR2  DEFAULT NULL,
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   apply_queue_table            IN VARCHAR2  DEFAULT NULL,
   apply_queue_name             IN VARCHAR2  DEFAULT NULL,
   apply_queue_user             IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE,
   instantiation                IN INTEGER   DEFAULT 
                                           DBMS_STREAMS_ADM.INSTANTIATION_TABLE);

パラメータ

参照:

表162-23にない共通のプロシージャのパラメータについては、「Oracle Streams環境を構成するプロシージャ」を参照してください。

表162-23 MAINTAIN_TABLESプロシージャのパラメータ

パラメータ 説明

table_names

レプリケーションを行うように構成し、構成後はOracle Streamsによって保守される表。表は、次の方法で指定できます。

  • VARCHAR2タイプのカンマ区切りリスト。

  • DBMS_UTILITY.UNCL_ARRAYタイプのPL/SQL連想配列で、表の名前が各要素になります。最初の表の位置は1です。最後の位置はNULLになります。

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

このプロシージャでは、次のいずれかの場合にエラーが発生します。

  • 指定した表がソース・データベースに存在しない場合

  • table_namesパラメータをNULLに設定した場合

source_directory_object

生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルの格納先となる、ソース・データベースを実行するコンピュータ・システム上にあるディレクトリのディレクトリ・オブジェクト。このファイルは、プロシージャの実行後も指定のディレクトリ内に残ります。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。この場合、source_directory_objectパラメータにはNULLを指定します。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLEの場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

destination_directory_object

生成されたデータ・ポンプ・エクスポート・ダンプ・ファイルの転送先となる、宛先データベースを実行するコンピュータ・システム上にあるディレクトリのディレクトリ・オブジェクト。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。この場合は、destination_directory_objectパラメータをNULLに設定してください。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLEの場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

dump_file_name

データ・ポンプ・エクスポート・ダンプ・ファイルの名前。指定したファイル名のファイルが、source_directory_objectまたはdestination_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、エラーが発生します。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLEの場合は、エクスポート・ダンプ・ファイルの名前が自動的に生成されます。この場合、エクスポート・ダンプ・ファイル名はexpatnn.dmp(nnは順序番号)になります。ソース・ディレクトリ内で生成されるエクスポート・ダンプ・ファイル名が一意になるように、順序番号はファイルごとに増分されます。

capture_queue_user

ソース・データベース内のキューに対するENQUEUE権限とDEQUEUE権限を必要とするユーザーの名前。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

log_file

データ・ポンプ・エクスポート・ログ・ファイルの名前。このログ・ファイルは、データ・ポンプ・エクスポート・ダンプ・ファイルと同じディレクトリに保存されます。

instantiationの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORKまたはDBMS_STREAMS_ADM.INSTANTIATION_NONEの場合、このパラメータは無視されます。

このパラメータがNULLで、instantiationパラメータの設定がDBMS_STREAMS_ADM.INSTANTIATION_TABLEの場合、ログ・ファイル名は、エクスポート・ダンプ・ファイルの拡張子を.clgにした名前になります。

instantiation

インスタンス化を実行するかどうか、および実行する場合はインスタンス化のタイプを次のように指定します。

DBMS_STREAMS_ADM.INSTANTIATION_TABLEを指定すると、ソース・データベースで完全なデータ・ポンプ・エクスポートが実行され、接続先データベースでそのエクスポート・ダンプ・ファイルのデータ・ポンプ・インポートが実行されます。instantiationパラメータにこの値を設定する場合は、このプロシージャを実行するユーザーにDBMS_FILE_TRANSFERパッケージのEXECUTE権限が必要です。

DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORKを指定すると、完全なネットワーク・データ・ポンプ・インポートが実行されます。ネットワーク・インポートとは、エクスポート・ダンプ・ファイルを使用せずにデータ・ポンプでインポートを実行することを意味します。instantiationパラメータをこの値に設定している場合、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

DBMS_STREAMS_ADM.INSTANTIATION_NONEを指定すると、インスタンス化は実行されません。この設定は、perform_actionsパラメータがFALSEに設定されており、プロシージャで構成スクリプトを生成する場合にのみ有効です。この場合、構成スクリプトによって、インスタンス化、および各共有データベース・オブジェクトのインスタンス化SCNの設定は実行されません。かわりに、ユーザーがインスタンス化を実行し、インスタンス化SCNの値を適切に設定する必要があります。

このパラメータをDBMS_STREAMS_ADM.INSTANTIATION_TABLEまたはDBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORKに設定する場合は、インスタンス化する表がソース・データベースに存在する必要があります。また、表の格納されている表領域が接続先データベースに存在する必要もあります。

接続先データベースにインスタンス化されたデータベース・オブジェクトがない場合は、ソース・データベースからのサプリメンタル・ロギング指定および索引やトリガーなどのサポート・データベース・オブジェクトとともにインポートされます。ただし、インスタンス化の実行前に接続先データベースにデータベース・オブジェクトがある場合は、インポートされません。このため、ソース・データベースからのサプリメンタル・ロギング指定は宛先データベースのデータベース・オブジェクトに指定されず、サポート・データベース・オブジェクトはインポートされません。

また、インスタンス化する表が接続先データベースに存在しない場合、このプロシージャは表のインスタンス化SCNを設定します。ただし、インスタンス化する表がインスタンス化の前に接続先データベースに存在する場合は、このプロシージャは表のインスタンス化SCNを設定しません。この場合は、プロシージャの完了後に表に対するインスタンス化SCNを手動で設定する必要があります。

162.6.24 MAINTAIN_TABLESPACESプロシージャ

このプロシージャは、ソース・データベース内の表領域セットのクローンを接続先データベース内に作成し、Oracle Streamsを使用してこの2つのデータベース内の表領域セットを保守します。

このプロシージャは、これらの処理を直接実行するか、またはこれらの処理を実行するスクリプトを生成できます。このプロシージャは、ソース・データベースで実行します。

ノート:

このプロシージャの使用は推奨されていません。かわりにMAINTAIN_TTSプロシージャを使用してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_TABLESPACES(
   tablespace_names             IN DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   destination_database         IN VARCHAR2,
   setup_streams                IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   source_queue_table           IN VARCHAR2  DEFAULT 'streams_queue_table',
   source_queue_name            IN VARCHAR2  DEFAULT 'streams_queue',
   source_queue_user            IN VARCHAR2  DEFAULT NULL,
   destination_queue_table      IN VARCHAR2  DEFAULT 'streams_queue_table',
   destination_queue_name       IN VARCHAR2  DEFAULT 'streams_queue',
   destination_queue_user       IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT 'capture',
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE);

パラメータ

表162-24 MAINTAIN_TABLESPACESプロシージャのパラメータ

パラメータ 説明

tablespace_names

Oracle Streamsによって接続先データベースにクローンが作成され保守される、ローカル表領域セット。

表領域セット内の表領域は、ソース・データベースに存在している必要がありますが、接続先データベースに存在しないようにする必要があります。

この表領域セットのデータファイルを格納するディレクトリごとに、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、それらのディレクトリ・オブジェクトに対するREAD権限が必要です。ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

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

関連項目: 「TABLESPACE_SET表タイプ」

source_directory_object

ソース・データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクトで、このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域セットで構成されるデータファイルが保存されます。プロシージャの実行後も、これらのファイルはこのディレクトリ内に残ります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

destination_directory_object

接続先データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域セットで構成されるデータファイルが転送されます。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

destination_database

宛先データベースのグローバル名。接続先データベースのグローバル名と同じ名前を持つ、ソース・データベースから接続先データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

setup_streams

TRUEに設定すると、表領域を直接保守するために必要な処理が実行されます。

FALSEに設定すると、表領域を直接保守するために必要な処理は実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

script_name

このパラメータがNULL以外の値で、setup_streamsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、指定された表領域セットを保守するために必要なすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、setup_streamsパラメータがTRUEの場合は、指定のスクリプトが生成され、指定の表領域を直接保守する処理が実行されます。

このパラメータがNULLで、setup_streamsパラメータがTRUEの場合は、スクリプトは生成されず、指定の表領域セットを直接保守する処理が実行されます。

このパラメータがNULLで、setup_streamsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

dump_file_name

指定した表領域セットが保存されるデータ・ポンプ・エクスポート・ダンプ・ファイルの名前。指定したファイル名のファイルが、source_directory_objectまたはdestination_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、エラーが発生します。

NULLに設定すると、エクスポート・ダンプ・ファイル名が自動的に生成されます。この場合、エクスポート・ダンプ・ファイル名はexpatnn.dmp(nnは順序番号)になります。ソース・ディレクトリ内で生成されるエクスポート・ダンプ・ファイル名が一意になるように、順序番号はファイルごとに増分されます。

source_queue_table

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

source_queue_name

ソース・データベースでANYDATAキューとして機能するキューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者名がデフォルトで使用されます。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

source_queue_user

ソース・データベース内のキューに対するENQUEUE権限とDEQUEUE権限を必要とするユーザーの名前。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

destination_queue_table

接続先データベースにあるキューのキュー表の名前で、[schema_name.]queue_table_nameという形式で指定します。たとえば、strmadmin.streams_queue_tableのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

destination_queue_name

接続先データベースでANYDATAキューとして機能するキューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者名がデフォルトで使用されます。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

destination_queue_user

接続先データベース内のキューに対するENQUEUE権限とDEQUEUE権限を必要とするユーザーの名前。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

capture_name

表領域セット内のデータベース・オブジェクトへの変更を取得するように構成する各取得プロセスの名前。所有者を指定しないでください。

指定した名前が既存の取得プロセスの名前と一致した場合は、その既存の取得プロセスが使用され、データベース・セット内のデータベース・オブジェクトへの変更を取得するためのルールが取得プロセスのポジティブ・ルール・セットに追加されます。

ノート: 取得プロセスは、作成した後で名前を変更することはできません。

propagation_name

表領域セット内のデータベース・オブジェクトへの変更を転送するように構成する各伝播の名前。所有者を指定しないでください。

指定した名前が既存の伝播の名前と一致した場合は、その既存の伝播が使用され、表領域セット内のデータベース・オブジェクトに対する変更を転送するためのルールが、伝播のポジティブ・ルール・セットに追加されます。

NULLに設定すると、作成される個々の伝播の名前が自動的に生成されます。

ノート: 伝播は、作成した後で名前を変更することは変更できません。

apply_name

表領域セット内のデータベース・オブジェクトへの変更を適用するように構成する各適用プロセスの名前。所有者を指定しないでください。

指定した名前が既存の適用プロセスの名前と一致した場合は、その既存の適用プロセスが使用され、データベース・セット内のデータベース・オブジェクトへの変更を適用するためのルールが適用プロセスのポジティブ・ルール・セットに追加されます。

指定する適用プロセス名が、接続先データベースにある既存のメッセージ・クライアントの名前と同じにならないように注意してください。

NULLに設定すると、作成される個々の適用プロセスの名前が自動的に生成されます。

ノート: 適用プロセスは、作成した後で名前を変更することはできません。

log_file

データ・ポンプ・エクスポート・ログ・ファイルの名前。このログ・ファイルは、データ・ポンプ・エクスポート・ダンプ・ファイルと同じディレクトリに保存されます。

このパラメータにNULLを指定すると、エクスポート・ダンプ・ファイルの名前の拡張子を .clgで置き換えた名前が、エクスポート・ログ・ファイルの名前として使用されます。

bi_directional

現行のデータベースと、destination_databaseで指定されるデータベースとの間で、双方向のレプリケーションを構成する場合は、TRUEを指定します。両方のデータベースがソース・データベースおよび接続先データベースとして構成され、両方のデータベースで取得プロセスおよび適用プロセスが構成されて、データベース間でメッセージを転送する伝播が構成されます。

現行のデータベースと、destination_databaseで指定されるデータベースとの間で、一方向のレプリケーションを構成する場合は、FALSEを指定します。現行のデータベースで取得プロセスが構成され、現行のデータベースから接続先データベースにメッセージを転送する伝播が構成され、接続先データベースで適用プロセスが構成されます。

include_ddl

DMLとDDLの両方の変更を管理するOracle Streamsレプリケーション環境を構成する場合は、TRUEに設定します。

DML変更のみを管理するOracle Streamsレプリケーション環境を構成する場合は、FALSEに設定します。このパラメータをFALSEに設定すると、ALTER TABLEなどのDDL変更はレプリケートされません。

使用上のノート

指定する表領域セットは自己完結型である必要があります。ここでの自己完結型とは、表領域セットの内部から表領域セットの外部を指す参照が存在しないことを意味します。たとえば、表領域セットにパーティション表が部分的に含まれている場合、その表領域セットは自己完結型ではありません。

参照:

自己完結型の表領域セットの詳細は、『Oracle Database管理者ガイド』を参照してください。

このプロシージャの関連項目

MAINTAIN_TABLESPACESプロシージャについては、次の説明を参照してください。

このプロシージャの実行要件

MAINTAIN_TABLESPACESプロシージャを実行するには、次の要件を満たしている必要があります。

  • このプロシージャは、ソース・データベースで実行します。

  • 構成時に、両方のデータベースがオープンしている必要があります。プロシージャでスクリプトの生成のみを行う場合は、プロシージャの実行時に、destination_databaseパラメータで指定されるデータベースが開いている必要はありませんが、生成されたスクリプトを実行するときは、両方のデータベースをオープンしておく必要があります。

  • このプロシージャを実行するユーザーには、DBAロールが付与されている必要があります。また、次の処理を実行するための権限も必要です。

    • ANYDATAキュー、取得プロセス、伝播および適用プロセスを作成する権限。

    • サプリメンタル・ロギングを指定する権限。

    • DBMS_STREAMS_ADMおよびDBMS_AQADMパッケージのサブプログラムを実行する権限。

    • destination_databaseパラメータで指定されたデータベースにデータベース・リンクを通じてアクセスする権限。このデータベース・リンクの名前は、接続先データベースのグローバル名と同じである必要があります。

    • DBMS_STREAMS_TABLESPACES_ADMパッケージのサブプログラムを実行する権限。

    • DBMS_STREAMS_TABLESPACES_ADMパッケージのCLONE_TABLESPACESプロシージャをソース・データベースで実行するのに必要な権限。必要な権限の一覧は、「CLONE_TABLESPACESプロシージャ」を参照してください。

    • DBMS_STREAMS_TABLESPACES_ADMパッケージのATTACH_TABLESPACESプロシージャを接続先データベースで実行するのに必要な権限。必要な権限の一覧は、「ATTACH_TABLESPACESプロシージャ」を参照してください。

    このプロシージャを実行するユーザーが、必要な権限を所有するには、各データベースにOracle Streams管理者を構成し、そのOracle Streams管理者のスキーマ内に各データベース・リンクを作成する必要があります。

  • bi_directionalパラメータをTRUEに設定した場合は、接続先データベース上の対応するユーザーが、データベース・リンクを通じてソース・データベースにアクセスできるようにする必要があります。このデータベース・リンクの名前は、ソース・データベースのグローバル名と同じである必要があります。

  • 指定する各ディレクトリ・オブジェクトは、SQL文のCREATE DIRECTORYを使用して作成する必要があります。このプロシージャを起動するユーザーには、それぞれのディレクトリ・オブジェクトに対するREAD権限およびWRITE権限が必要です。

  • このプロシージャを次の条件で実行する場合、このプロシージャで構成するデータベースはOracle Database 10g リリース2以上のデータベースである必要があります。

    • このプロシージャをOracle Database 10g リリース2以上のデータベースで実行する場合。

    • Oracle Streamsレプリケーション環境を直接構成するためにsetup_streamsパラメータがTRUEに設定されている場合。

  • このプロシージャを次の条件で実行する場合、このプロシージャで構成するデータベースはOracle Database 10g リリース1以上のデータベースである必要があります。

    • このプロシージャをOracle Database 10g リリース2以上のデータベースで実行する場合。

    • このプロシージャのsetup_streamsパラメータがFALSEに設定され、生成されたスクリプトでレプリケーション環境が構成されている場合。

    スクリプトを使用してOracle Database 10g リリース1のデータベースを構成する場合は、Oracle Database 10g リリース2以上のみで使用可能な機能(キューからキューへの伝播など)が構成されないように、スクリプトを変更する必要があります。

  • このプロシージャをOracle Database 10g リリース1のデータベースで実行する場合、このプロシージャで構成するデータベースは、Oracle Database 10g リリース1以上のデータベースである必要があります。

参照:

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

構成の進行状況およびリカバリ機能

setup_streamsパラメータをTRUEに設定して、このプロシージャを実行すると、その構成処理に関するメタデータがデータ・ディクショナリ・ビューのDBA_RECOVERABLE_SCRIPTDBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSに記録されます。エラーが発生したためプロシージャが停止した場合は、エラーの原因となった状況を解消してからRECOVER_OPERATIONプロシージャを使用すると、構成を完了できます。

ノート:

setup_streamsパラメータをFALSEに設定して、このプロシージャを実行した場合は、前述のビューにデータが格納されません。また、このプロシージャで生成されたスクリプトを実行した場合も、データはビューに格納されません。

162.6.25 MAINTAIN_TTSプロシージャ

このプロシージャは、ソース・データベース内の表領域セットのクローンを接続先データベース内に作成し、Oracle Streamsを使用してこの2つのデータベース内の表領域セットを保守します。

このプロシージャは、これらの処理を直接実行するか、またはこれらの処理を実行するスクリプトを生成できます。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

ノート:

  • このプロシージャは、各取得プロセスおよび適用プロセスのネガティブ・ルール・セットにルールを追加して、Oracle Streamsでサポートされていない、表領域内のデータベース・オブジェクトをレプリケーション環境から自動的に除外します。Oracle Streamsによってサポートされていないデータベース・オブジェクトを判別するには、DBA_STREAMS_UNSUPPORTEDデータ・ディクショナリ・ビューを問い合せます。サポートされないデータベース・オブジェクトが除外されていない場合は、取得エラーが発生します。

  • このプロシージャは、推奨されないMAINTAIN_TABLESPACESプロシージャのかわりに使用します。

参照:

このプロシージャの詳細は、「Oracle Streams環境を構成するプロシージャ」を参照してください。

構文

DBMS_STREAMS_ADM.MAINTAIN_TTS(
   tablespace_names             IN DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,
   source_directory_object      IN VARCHAR2,
   destination_directory_object IN VARCHAR2,
   source_database              IN VARCHAR2,
   destination_database         IN VARCHAR2,
   perform_actions              IN BOOLEAN   DEFAULT TRUE,
   script_name                  IN VARCHAR2  DEFAULT NULL,
   script_directory_object      IN VARCHAR2  DEFAULT NULL,
   dump_file_name               IN VARCHAR2  DEFAULT NULL,
   capture_name                 IN VARCHAR2  DEFAULT NULL,
   capture_queue_table          IN VARCHAR2  DEFAULT NULL,
   capture_queue_name           IN VARCHAR2  DEFAULT NULL,
   capture_queue_user           IN VARCHAR2  DEFAULT NULL,
   propagation_name             IN VARCHAR2  DEFAULT NULL,
   apply_name                   IN VARCHAR2  DEFAULT NULL,
   apply_queue_table            IN VARCHAR2  DEFAULT NULL,
   apply_queue_name             IN VARCHAR2  DEFAULT NULL,
   apply_queue_user             IN VARCHAR2  DEFAULT NULL,
   log_file                     IN VARCHAR2  DEFAULT NULL,
   bi_directional               IN BOOLEAN   DEFAULT FALSE,
   include_ddl                  IN BOOLEAN   DEFAULT FALSE);

パラメータ

参照:

表162-25にない共通のプロシージャのパラメータについては、「Oracle Streams環境を構成するプロシージャ」を参照してください。

表162-25 MAINTAIN_TTSプロシージャのパラメータ

パラメータ 説明

tablespace_names

Oracle Streamsによって接続先データベースにクローンが作成され保守される、ローカル表領域セット。

表領域セット内の表領域は、ソース・データベースに存在している必要がありますが、接続先データベースに存在しないようにする必要があります。

この表領域セットのデータファイルを格納するディレクトリごとに、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、それらのディレクトリ・オブジェクトに対するREAD権限が必要です。ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

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

関連項目: 「TABLESPACE_SET表タイプ」

source_directory_object

ソース・データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクトで、このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域セットで構成されるデータファイルが保存されます。プロシージャの実行後も、これらのファイルはこのディレクトリ内に残ります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

destination_directory_object

接続先データベースを実行するコンピュータ・システムのディレクトリのディレクトリ・オブジェクト。このディレクトリには、生成されたデータ・ポンプ・エクスポート・ダンプ・ファイル、およびクローンされた表領域セットで構成されるデータファイルが転送されます。

ソース・データベースと接続先データベースが同じコンピュータ・システム上で実行されている場合、ソース・ディレクトリと宛先ディレクトリは別々にする必要があります。

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

ノート: ディレクトリ・オブジェクトにOracle ASMディスク・グループを指定することはできません。

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

dump_file_name

指定した表領域セットが保存されるデータ・ポンプ・エクスポート・ダンプ・ファイルの名前。指定したファイル名のファイルが、source_directory_objectまたはdestination_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、エラーが発生します。

NULLに設定すると、エクスポート・ダンプ・ファイル名が自動的に生成されます。この場合、エクスポート・ダンプ・ファイル名はexpatnn.dmp(nnは順序番号)になります。ソース・ディレクトリ内で生成されるエクスポート・ダンプ・ファイル名が一意になるように、順序番号はファイルごとに増分されます。

log_file

データ・ポンプ・エクスポート・ログ・ファイルの名前。このログ・ファイルは、データ・ポンプ・エクスポート・ダンプ・ファイルと同じディレクトリに保存されます。

このパラメータにNULLを指定すると、エクスポート・ダンプ・ファイルの名前の拡張子を .clgで置き換えた名前が、エクスポート・ログ・ファイルの名前として使用されます。

使用上のノート

指定する表領域セットは自己完結型である必要があります。ここでの自己完結型とは、表領域セットの内部から表領域セットの外部を指す参照が存在しないことを意味します。たとえば、表領域セットにパーティション表が部分的に含まれている場合、その表領域セットは自己完結型ではありません。

参照:

自己完結型の表領域セットの詳細は、『Oracle Database管理者ガイド』を参照してください。

MAINTAIN_TTSプロシージャで必要なその他の権限

MAINTAIN_TTSプロシージャを実行するユーザーには、「* Oracle Streams環境を構成するプロシージャ」で説明した権限の他に、次の処理を実行するための権限も必要です。

  • DBMS_STREAMS_TABLESPACES_ADMパッケージのサブプログラムを実行する権限。

  • DBMS_STREAMS_TABLESPACES_ADMパッケージのCLONE_TABLESPACESプロシージャをソース・データベースで実行するのに必要な権限。必要な権限の一覧は、「CLONE_TABLESPACESプロシージャ」を参照してください。

  • DBMS_STREAMS_TABLESPACES_ADMパッケージのATTACH_TABLESPACESプロシージャを接続先データベースで実行するのに必要な権限。必要な権限の一覧は、「ATTACH_TABLESPACESプロシージャ」を参照してください。

162.6.26 MERGE_STREAMSプロシージャ

このプロシージャは、1つの取得プロセスからのストリームを別の取得プロセスからのストリームとマージします。

このプロシージャは、通常、このパッケージのSPLIT_STREAMSプロシージャを使用して分割された2つのストリームのマージに使用します。SPLIT_STREAMSプロシージャは、ストリームの分割時に元のストリームのコンポーネントをクローニングします。このため、この項では次の用語が使用されています。

  • 分割前のストリームには、元のキュー、元の取得プロセスおよび元の伝播があります。

  • SPLIT_STREAMSプロシージャによって分割されたストリームには、クローニングされたキュー、クローニングされた取得プロセスおよびクローニングされた伝播があります。

このプロシージャは、MERGE_STREAMS_JOBプロシージャによってコールされます。MERGE_STREAMS_JOBプロシージャは、安全にマージできるようにストリームがユーザー指定のマージしきい値内にあるかどうかを判別します。ストリームがマージしきい値の範囲外の場合、MERGE_STREAMS_JOBプロシージャは何も実行しません。通常、MERGE_STREAMSプロシージャを直接実行するのではなく、MERGE_STREAMS_JOBプロシージャを実行することをお薦めします。

ただし、次の条件を満たす場合は、MERGE_STREAMSプロシージャを直接実行することを選択できます。

  • 分割ストリームの宛先での問題が修正されており、宛先キューが変更を受け入れることができる。

  • 分割ストリームによって使用されるクローニングされた取得プロセスが開始され、変更を取得している。

  • 接続先データベースにある適用プロセスが、クローニングされた取得プロセスによって取得された変更を適用している。

  • クローニングされた取得プロセスのGV$STREAMS_CAPTUREビューのCAPTURE_MESSAGE_CREATE_TIMEが、元の取得プロセスのCAPTURE_MESSAGE_CREATE_TIMEに追いついているか、ほとんど追いついている。クローニングされた取得プロセスは、元の取得プロセスに完全には追いつかない場合があります。そのため、クローニングされた取得プロセスが元の取得プロセスにほとんど追いついている場合、分割ストリームをマージできます。

MERGE_STREAMSプロシージャを実行すると、次のアクションが実行されます。

  1. クローニングされた取得プロセスが停止されます。

  2. 元の取得プロセスを停止します。

  3. クローニングされた伝播を元の伝播にコピーして戻します。コピーして戻した後の伝播の名前は、元の伝播と同じ名前です。

  4. 次の2つのSCN値の小さいほうのSCN値から元の取得プロセスを開始します。

    • クローニングされた伝播の確認済SCN

    • 元の取得プロセスによって取得された変更を伝播する他の伝播の、一番小さい確認済SCN

    元の取得プロセスを開始すると、すでに取得されている変更が再取得されたり、クローニングされた取得プロセスによってすでに取得されている変更が取得される場合があります。いずれの場合も、関連する適用プロセスによって、重複して受信した変更が破棄されます。

  5. クローニングされた伝播が削除されます。

  6. クローニングされた取得プロセスが削除されます。

  7. クローニングされたキューが削除されます。

構文

DBMS_STREAMS_ADM.MERGE_STREAMS(
   cloned_propagation_name  IN  VARCHAR2,
   propagation_name         IN  VARCHAR2  DEFAULT NULL,
   queue_name               IN  VARCHAR2  DEFAULT NULL,
   perform_actions          IN  BOOLEAN   DEFAULT TRUE,
   script_name              IN  VARCHAR2  DEFAULT NULL,
   script_directory_object  IN  VARCHAR2  DEFAULT NULL);

パラメータ

表162-26 MERGE_STREAMSプロシージャのパラメータ

パラメータ 説明

cloned_propagation_name

SPLIT_STREAMSプロシージャを使用して元のストリームから分割されたストリームによって使用されるクローニングされた伝播の名前。クローニングされた伝播の名前により、クローニングされた伝播によって使用されるクローニングされたキューおよびクローニングされた取得プロセスも識別されます。

既存の伝播名を指定する必要があります。所有者を指定しないでください。

propagation_name

元のストリームにマージされて戻される伝播の名前。

NULLの場合、元のストリーム内の元の伝播の名前が使用されます。SPLIT_STREAMSプロシージャを使用してストリームが分割されている場合にのみ、NULLを指定します。

元の伝播名とは異なる名前を使用する場合、またはSPLIT_STREAMSプロシージャによって分割されなかった2つのストリームをマージする場合は、NULL以外の値を指定します。詳細は、「使用上のノート」を参照してください。

NULL以外の値を指定した場合、次の条件のいずれかに該当するとエラーが発生します。

  • queue_nameパラメータで指定したキューが存在しない。

  • queue_nameパラメータで指定したキューが存在するが、取得プロセスによって使用されていない。

queue_name

マージされて戻される伝播のソース・キューであるキューの名前。

NULLの場合、既存の元のキューが、マージされて戻される伝播のソース・キューとなります。SPLIT_STREAMSプロシージャを使用してストリームが分割されている場合にのみ、NULLを指定します。

SPLIT_STREAMSプロシージャによって分割されなかった2つのストリームをマージする場合、NULL以外の値を指定します。マージされたストリームの変更を取得する取得プロセスによって使用される既存のキューの名前を指定します。詳細は、「使用上のノート」を参照してください。

perform_actions

TRUEに設定すると、ストリームを直接マージするために必要な処理が実行されます。

FALSEに設定すると、ストリームを直接マージするために必要な処理は実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

script_name

このパラメータがNULL以外の値で、perform_actionsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、ストリームをマージするために必要なすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、perform_actionsパラメータがTRUEの場合は、指定のスクリプトが生成され、ストリームを直接分割する処理が実行されます。

このパラメータがNULLで、perform_actionsパラメータがTRUEの場合は、ストリームを直接マージする処理が実行され、スクリプトは生成されません。

このパラメータがNULLで、perform_actionsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

使用上のノート

MERGE_STREAMSプロシージャを使用して、SPLIT_STREAMSプロシージャを使用して分割されなかった2つのストリームをマージできます。この方法でストリームをマージすることによって、1つのデータベースで複数の取得プロセスを実行しているときに、リソースを節約してパフォーマンスを向上させることができます。

DBA_STREAMS_SPLIT_MERGEビューは、分割およびマージ操作に関する情報を示します。

162.6.27 MERGE_STREAMS_JOBプロシージャ

このプロシージャは、元の取得プロセスおよびクローニングされた取得プロセスが、指定されたマージしきい値内にあるかどうかを判別します。マージしきい値内にある場合、このプロシージャはMERGE_STREAMSプロシージャを実行して2つのストリームをマージします。

このプロシージャは、通常、このパッケージのSPLIT_STREAMSプロシージャを使用して分割された2つのストリームのマージに使用します。SPLIT_STREAMSプロシージャは、ストリームの分割時に元のストリームのコンポーネントをクローニングします。このため、この項では次の用語が使用されています。

  • 分割前のストリームには、元のキュー、元の取得プロセスおよび元の伝播があります。

  • SPLIT_STREAMSプロシージャによって分割されたストリームには、クローニングされたキュー、クローニングされた取得プロセスおよびクローニングされた伝播があります。

ストリームを分割するSPLIT_STREAMSプロシージャでauto_merge_thresholdパラメータが正数に設定された場合、マージ・ジョブはスケジュールに従ってMERGE_STREAMS_JOBプロシージャを自動的に実行します。MERGE_STREAMS_JOBプロシージャが自動的に実行される場合、schedule_nameパラメータにスケジュール名を、merge_job_nameパラメータにマージ・ジョブ名を指定します。マージ・ジョブおよびそのスケジュールは、SPLIT_STREAMSプロシージャによって作成されました。

ストリームを分割するSPLIT_STREAMSプロシージャでauto_merge_thresholdパラメータがNULLまたは0(ゼロ)に設定された場合は、MERGE_STREAMS_JOBプロシージャを手動で実行できます。この場合は、自動的には実行されません。

参照:

構文

DBMS_STREAMS_ADM.MERGE_STREAMS_JOB(
   cloned_propagation_name        IN VARCHAR2,
   propagation_name               IN VARCHAR2 DEFAULT NULL,
   queue_name                     IN VARCHAR2 DEFAULT NULL,
   merge_threshold                IN NUMBER,
   schedule_name                  IN VARCHAR2 DEFAULT NULL,
   merge_job_name                 IN VARCHAR2 DEFAULT NULL);

パラメータ

表162-27 MERGE_STREAMS_JOBプロシージャのパラメータ

パラメータ 説明

cloned_propagation_name

SPLIT_STREAMSプロシージャを使用して元のストリームから分割されたストリームによって使用されるクローニングされた伝播の名前。クローニングされた伝播の名前により、クローニングされた伝播によって使用されるクローニングされたキューおよびクローニングされた取得プロセスも識別されます。

既存の伝播名を指定する必要があります。所有者を指定しないでください。

propagation_name

元のストリームにマージされて戻される伝播の名前。

NULLの場合、元のストリーム内の元の伝播の名前が使用されます。SPLIT_STREAMSプロシージャを使用してストリームが分割されている場合にのみ、NULLを指定します。

元の伝播名とは異なる名前を使用する場合、またはSPLIT_STREAMSプロシージャによって分割されなかった2つのストリームをマージする場合は、NULL以外の値を指定します。詳細は、「使用上のノート」を参照してください。

NULL以外の値を指定した場合、次の条件のいずれかに該当するとエラーが発生します。

  • queue_nameパラメータで指定したキューが存在しない。

  • queue_nameパラメータで指定したキューが存在するが、取得プロセスによって使用されていない。

queue_name

マージされて戻される伝播のソース・キューであるキューの名前。

NULLの場合、既存の元のキューが、マージされて戻される伝播のソース・キューとなります。SPLIT_STREAMSプロシージャを使用してストリームが分割されている場合にのみ、NULLを指定します。

SPLIT_STREAMSプロシージャによって分割されなかった2つのストリームをマージする場合、NULL以外の値を指定します。マージされたストリームの変更を取得する取得プロセスによって使用される既存のキューの名前を指定します。詳細は、「使用上のノート」を参照してください。

merge_threshold

マージしきい値(秒単位)。

GV$STREAMS_CAPTURE動的パフォーマンス・ビューの各取得プロセスのCAPTURE_MESSAGE_CREATE_TIME列の値によって、ストリームがマージされるかどうかが判別されます。

具体的には、クローニングされた取得プロセスと元の取得プロセスのCAPTURE_MESSAGE_CREATE_TIMEの差(秒数)がこのパラメータに指定された値以下の場合、このプロシージャはMERGE_STREAMSプロシージャを実行してストリームをマージします。差がこのパラメータで指定された値よりも大きい場合、このプロシージャは何も行いません。

schedule_name

マージ・ジョブのスケジュールの名前。

NULLに設定すると、スケジュール名は指定されません。通常は、ストリームを分割するSPLIT_STREAMSプロシージャでauto_merge_thresholdパラメータがNULLまたは0(ゼロ)に設定されている場合に、このパラメータをNULLに設定します。

このプロシージャを手動で実行する場合は、NULLを指定します。

merge_job_name

ストリームをマージするジョブの名前。

NULLに設定すると、マージ・ジョブ名は指定されません。通常は、ストリームを分割するSPLIT_STREAMSプロシージャでauto_merge_thresholdパラメータがNULLまたは0(ゼロ)に設定されている場合に、このパラメータをNULLに設定します。

このプロシージャを手動で実行する場合は、NULLを指定します。

使用上のノート

MERGE_STREAMS_JOBプロシージャを使用して、SPLIT_STREAMSプロシージャを使用して分割されなかった2つのストリームをマージできます。この方法でストリームをマージすることによって、1つのデータベースで複数の取得プロセスを実行しているときに、リソースを節約してパフォーマンスを向上させることができます。

MERGE_STREAMS_JOBプロシージャの完了後、DBA_CAPTUREビューおよびDBA_PROPAGATIONビューを問い合せて、ストリームがマージされたかどうかを判別できます。ストリームがマージされた場合、クローニングされた取得プロセスおよびクローニングされた伝播はこれらのビューに表示されません。

ストリームがマージされ、schedule_nameパラメータおよびmerge_job_nameパラメータがNULL以外の場合、指定されたスケジュールおよびマージ・ジョブは自動的に削除されます。

DBA_STREAMS_SPLIT_MERGEビューは、分割およびマージ操作に関する情報を示します。

162.6.28 POST_INSTANTIATION_SETUPプロシージャ

このプロシージャはOracle Streamsレプリケーション環境を構成するために、インスタンス化後に必要な処理を実行します。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

Oracle Streamsレプリケーションの構成を完了するには、次のステップを実行します。

  1. ソース・データベースでPRE_INSTANTIATION_SETUPプロシージャを実行します。

  2. 必要なインスタンス化処理を実行します。

  3. ソース・データベースでPOST_INSTANTIATION_SETUPプロシージャを実行します。

通常、このステップで構成したOracle Streamsレプリケーション環境は、次のいずれかの目的に使用されます。

  • 共有データベース・オブジェクトへの変更をレプリケートして、異なるデータベースでデータベース・オブジェクトの同期を維持するため。

  • データベースの保守操作時(別のプラットフォームへのデータベースの移行時など)に、データベース・オブジェクトへの変更をレプリケートするため。この場合は、保守操作の完了後にCLEANUP_INSTANTIATION_SETUPプロシージャを使用してレプリケーション環境を削除します。

ノート:

POST_INSTANTIATION_SETUPプロシージャの実行時、パラメータの値は、対応するPRE_INSTANTIATION_SETUPプロシージャの実行時に指定したパラメータ(perform_actionsscript_name, script_directory_objectおよびstart_processesを除く)の値と一致している必要があります。

ノート:

取得プロセスでは、SYSSYSTEMまたはCTXSYSスキーマ内の変更は取得されません。このプロシージャは、これらのスキーマに対するレプリケーションは構成しません。

参照:

構文

DBMS_STREAMS_ADM.POST_INSTANTIATION_SETUP(
   maintain_mode           IN VARCHAR2,
   tablespace_names        IN DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,
   source_database         IN VARCHAR2,
   destination_database    IN VARCHAR2,
   perform_actions         IN BOOLEAN         DEFAULT TRUE,
   script_name             IN VARCHAR2        DEFAULT NULL,
   script_directory_object IN VARCHAR2        DEFAULT NULL,
   capture_name            IN VARCHAR2        DEFAULT NULL,
   capture_queue_table     IN VARCHAR2        DEFAULT NULL,
   capture_queue_name      IN VARCHAR2        DEFAULT NULL,
   capture_queue_user      IN VARCHAR2        DEFAULT NULL,
   propagation_name        IN VARCHAR2        DEFAULT NULL,
   apply_name              IN VARCHAR2        DEFAULT NULL,
   apply_queue_table       IN VARCHAR2        DEFAULT NULL,
   apply_queue_name        IN VARCHAR2        DEFAULT NULL,
   apply_queue_user        IN VARCHAR2        DEFAULT NULL,
   bi_directional          IN BOOLEAN         DEFAULT FALSE,
   include_ddl             IN BOOLEAN         DEFAULT FALSE,
   start_processes         IN BOOLEAN         DEFAULT FALSE,
   instantiation_scn       IN NUMBER          DEFAULT NULL,
   exclude_schemas         IN VARCHAR2        DEFAULT NULL,
   exclude_flags           IN BINARY_INTEGER  DEFAULT NULL);

パラメータ

参照:

このプロシージャのパラメータで表162-28に記載されていないものについては、「構成プロシージャの共通パラメータ」を参照してください。

表162-28 POST_INSTANTIATION_SETUPプロシージャのパラメータ

パラメータ 説明

maintain_mode

次のいずれかを指定します。

  • ローカル・データベースと、destination_databaseパラメータで指定するデータベースとの間にレプリケーションを構成して、データベース全体を保守する場合は、GLOBALを指定します。

  • ローカル・データベースと、destination_databaseパラメータで指定するデータベースとの間にレプリケーションを構成して、表領域セットを保守する場合は、TRANSPORTABLE TABLESPACESを指定します。

tablespace_names

maintain_modeTRANSPORTABLE TABLESPACESに設定した場合は、Oracle Streamsによって接続先データベースにクローンが作成され保守されるローカル表領域セットを指定します。

表領域セット内の表領域は、ソース・データベースに存在している必要がありますが、接続先データベースに存在しないようにする必要があります。

また、この表領域セットのデータファイルを格納するディレクトリごとに、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、それらのディレクトリ・オブジェクトに対するREAD権限が必要です。

maintain_modeGLOBALに設定した場合は、空の表領域セットを指定します。

maintain_modeの設定に関係なく、tablespace_namesパラメータが設定されていない場合またはNULLに設定されている場合は、エラーが発生します。

関連項目: 「TABLESPACE_SET表タイプ」

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

start_processes

TRUEに設定すると、各取得プロセスおよび適用プロセスが開始されます。PRE_INSTANTITAION_SETUPプロシージャによって作成され、無効になっている取得プロセスまたは適用プロセスがある場合は、そのプロセスも開始されます。

FALSEに設定すると、取得プロセスも適用プロセスも開始されません。

instantiation_scn

インスタンス化の実行時にインスタンス化SCNが設定されなかった場合は、接続先データベース上のデータベース・オブジェクトのインスタンス化SCNを指定します。RMANを使用したインスタンス化では、インスタンス化SCNは自動的には設定されませんが、適切なインスタンス化SCN値が指定されます。詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

接続先データベース上のデータベース・オブジェクトのインスタンス化SCNがインスタンス化の実行時に設定された場合は、NULLを指定します。インスタンス化SCNは、エクスポート/インポートのインスタンス化の実行時に設定できます。

exclude_schemas

Oracle Streams構成から除外するスキーマのカンマ区切りリスト。これらのスキーマを除外するために、各取得プロセスのネガティブ・ルール・セットにスキーマ・ルールが追加されます。

データベース内のすべてのスキーマを除外する場合は、アスタリスク(*)を指定します。

NULLに設定すると、データベース内のスキーマは除外されません。

このパラメータは、maintain_modeパラメータがGLOBALに設定されている場合にのみ有効です。maintain_modeパラメータがTRANSPORTABLE TABLESPACESに設定されている場合、このパラメータは無視されます。

exclude_flags

exclude_schemasパラメータで指定されたスキーマ内のレプリケーション構成から除外する対象を指定します。このパラメータは、PRE_INSTANTIATION_SETUPプロシージャおよびPOST_INSTANTIATION_SETUPプロシージャと同様に動作します。詳細は、PRE_INSTANTIATION_SETUPプロシージャの「使用上のノート」を参照してください。

使用上のノート

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

自己完結型の表領域セット

maintain_modeパラメータをTRANSPORTABLE TABLESPACESに設定した場合、指定する表領域セットは自己完結型である必要があります。ここでの自己完結型とは、表領域セットの内部から表領域セットの外部を指す参照が存在しないことを意味します。たとえば、表領域セットにパーティション表が部分的に含まれている場合、その表領域セットは自己完結型ではありません。

参照:

自己完結型の表領域セットの詳細は、『Oracle Database管理者ガイド』を参照してください。

RMANによるデータベースのインスタンス化の実行時に名前が変更された接続先データベース

maintain_modeパラメータをGLOBALに設定した場合は、POST_INSTANTIATION_SETUPプロシージャを実行する前に、データベースをインスタンス化する必要があります。RMANのDUPLICATEコマンドまたはCONVERT DATABASEコマンドを使用してデータベースをインスタンス化する場合は、インスタンス化の実行時に、接続先データベースのグローバル名をソース・データベースのグローバル名に変更できます。この場合は、POST_INSTANTIATION_SETUPプロシージャを実行する前に、次のステップを実行します。

  1. 接続先データベースのグローバル名を変更して、destination_databaseパラメータで指定する名前に戻します。

  2. ソースに存在していて、接続先データベースにクローニングされたすべてのループバック・データベース・リンクを、接続先データベースで削除し、再作成します。たとえば、ソース・データベースdbs1.netに、そのソース・データベース自体を参照するデータベース・リンクがあるとします。接続先データベースは、dbs2.netであるとします。接続先データベースで、このデータベース・リンクを削除し、接続先データベース自体(dbs2.net)を参照するループバック・データベース・リンクとして再作成します。

  3. ソース・データベースから接続先データベースにクローニングされた、ソース・データベースから接続先データベースへのすべてのデータベース・リンクを削除します。たとえば、ソース・データベースがdbs1.net、接続先データベースがdbs2.netである場合は、接続先データベース上のdbs1.netからdbs2.netへのすべてのデータベース・リンクを削除します。

  4. 接続先データベースからソース・データベースへのデータベース・リンクを、ソース・データベースのグローバル名と同じ名前で作成します。データベース・リンクは、接続先データベース上のOracle Streams管理者がアクセスできる必要があります。

    このデータベース・リンクは、POST_INSTANTIATION_SETUPプロシージャによって、宛先データベースでDBMS_APPLY_ADMパッケージのSET_GLOBAL_INSTANTIATION_SCNプロシージャが実行されるために必要です。SET_GLOBAL_INSTANTIATION_SCNプロシージャには、データベース・リンクが必要です。インスタンス化SCNは、POST_INSTANTIATION_SETUPプロシージャのinstantiation_scnパラメータで指定する値に設定されます。

ノート:

RMANのDUPLICATEコマンドまたはCONVERT DATABASEコマンドを使用してデータベースをインスタンス化する場合、接続先データベースを取得データベースにすることはできません。

接続先データベースから削除されるOracle Streamsコンポーネント

maintain_modeパラメータをGLOBALに設定した場合は、POST_INSTANTIATION_SETUPプロシージャを実行する前に、データベースをインスタンス化する必要があります。データベースのインスタンス化の実行時に、PRE_INSTANTIATION_SETUPプロシージャによって作成されたOracle Streamsコンポーネント(Oracle Streamsのクライアント、キューなど)がソース・データベースから接続先データベースにコピーされる場合があります。POST_INSTANTIATION_SETUPプロシージャは、PRE_INSTANTIATION_SETUPプロシージャによって作成されたStreamsコンポーネントを接続先データベースから削除します。

PRE_INSTANTIATION_SETUPプロシージャによって作成されたルール・セットおよびルールが接続先データベースから削除されない場合があります。POST_INSTANTIATION_SETUPプロシージャは、これらのルール・セットおよびルールを接続先データベースのStreamsクライアントには関連付けません。これらのルール・セットおよびルールは、POST_INSTANTIATION_SETUPプロシージャまたはこのプロシージャで生成されたスクリプトの実行完了後、ユーザーが接続先データベースから削除できます(オプション)。

ノート:

POST_INSTANTIATION_SETUPプロシージャは、PRE_INSTANTIATION_SETUPプロシージャで作成されたOracle Streamsコンポーネントのみを削除します。他の方法で作成されたOracle Streamsコンポーネントは削除しません。

162.6.29 PRE_INSTANTIATION_SETUPプロシージャ

このプロシージャは、Oracle Streamsレプリケーション環境を構成するために、インスタンス化前に必要な処理を実行します。

このプロシージャは、取得データベースで実行します。取得データベースは、ソース・データベースに加えられた変更を取得するデータベースです。

Oracle Streamsレプリケーションの構成を完了するには、次のステップを実行します。

  1. Streamsレプリケーション環境内のソース・データベースとなるデータベースで、PRE_INSTANTIATION_SETUPプロシージャを実行します。

  2. 必要なインスタンス化処理を実行します。

  3. ソース・データベースでPOST_INSTANTIATION_SETUPプロシージャを実行します。

通常、このステップで構成したOracle Streamsレプリケーション環境は、次のいずれかの目的に使用されます。

  • 共有データベース・オブジェクトへの変更をレプリケートして、異なるデータベースでデータベース・オブジェクトの同期を維持するため。

  • データベースの保守操作時(別のプラットフォームへのデータベースの移行時など)に、データベース・オブジェクトへの変更をレプリケートするため。この場合は、保守操作の完了後にCLEANUP_INSTANTIATION_SETUPプロシージャを使用してレプリケーション環境を削除します。

ノート:

  • 取得プロセスでは、SYSSYSTEMまたはCTXSYSスキーマ内の変更は取得されません。このプロシージャは、これらのスキーマに対するレプリケーションは構成しません。

  • RMANのDUPLICATEコマンドまたはCONVERT DATABASEコマンドを使用してデータベースをインスタンス化する場合、接続先データベースを取得データベースにすることはできません。

参照:

構文

DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP(
   maintain_mode           IN VARCHAR2,
   tablespace_names        IN DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,
   source_database         IN VARCHAR2,
   destination_database    IN VARCHAR2,
   perform_actions         IN BOOLEAN         DEFAULT TRUE,
   script_name             IN VARCHAR2        DEFAULT NULL,
   script_directory_object IN VARCHAR2        DEFAULT NULL,
   capture_name            IN VARCHAR2        DEFAULT NULL,
   capture_queue_table     IN VARCHAR2        DEFAULT NULL,
   capture_queue_name      IN VARCHAR2        DEFAULT NULL,
   capture_queue_user      IN VARCHAR2        DEFAULT NULL,
   propagation_name        IN VARCHAR2        DEFAULT NULL,
   apply_name              IN VARCHAR2        DEFAULT NULL,
   apply_queue_table       IN VARCHAR2        DEFAULT NULL,
   apply_queue_name        IN VARCHAR2        DEFAULT NULL,
   apply_queue_user        IN VARCHAR2        DEFAULT NULL,
   bi_directional          IN BOOLEAN         DEFAULT FALSE,
   include_ddl             IN BOOLEAN         DEFAULT FALSE,
   start_processes         IN BOOLEAN         DEFAULT FALSE,
   exclude_schemas         IN VARCHAR2        DEFAULT NULL,
   exclude_flags           IN BINARY_INTEGER  DEFAULT NULL);

パラメータ

参照:

このプロシージャのパラメータで表162-29に記載されていないものについては、「構成プロシージャの共通パラメータ」を参照してください。

表162-29 PRE_INSTANTIATION_SETUPプロシージャのパラメータ

パラメータ 説明

maintain_mode

次のいずれかを指定します。

  • ローカル・データベースと、destination_databaseパラメータで指定するデータベースとの間にレプリケーションを構成して、データベース全体を保守する場合は、GLOBALを指定します。

  • ローカル・データベースと、destination_databaseパラメータで指定するデータベースとの間にレプリケーションを構成して、表領域セットを保守する場合は、TRANSPORTABLE TABLESPACESを指定します。

tablespace_names

maintain_modeTRANSPORTABLE TABLESPACESに設定した場合は、Oracle Streamsによって接続先データベースにクローンが作成され保守されるローカル表領域セットを指定します。

表領域セット内の表領域は、ソース・データベースに存在している必要がありますが、接続先データベースに存在しないようにする必要があります。

また、この表領域セットのデータファイルを格納するディレクトリごとに、ディレクトリ・オブジェクトが1つ存在する必要があります。このプロシージャを起動するユーザーには、それらのディレクトリ・オブジェクトに対するREAD権限が必要です。

maintain_modeGLOBALに設定した場合は、空の表領域セットを指定します。

maintain_modeの設定に関係なく、tablespace_namesパラメータが設定されていない場合またはNULLに設定されている場合は、エラーが発生します。

関連項目: 「TABLESPACE_SET表タイプ」

source_database

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

ローカル・データベースと同じグローバル名を指定すると、ソース・データベースに対するローカル取得プロセスが構成されます。

ローカル・データベースと異なるグローバル名を指定すると、ローカル・データベースでダウンストリーム取得プロセスが構成されます。この場合は、ソース・データベースのグローバル名と同じ名前を持つ、ローカル・データベースからソース・データベースへのデータベース・リンクが存在する必要があり、また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

NULLの場合は、ローカル・データベースのグローバル名が使用されます。

destination_database

宛先データベースのグローバル名。

接続先データベースがローカル・データベースでない場合は、接続先データベースのグローバル名と同じ名前を持つ、ローカル・データベースから接続先データベースへのデータベース・リンクが存在する必要があります。また、プロシージャを実行するユーザーがそのデータベース・リンクにアクセス可能である必要もあります。

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

capture_queue_table

取得プロセスで使用する各キューのキュー表の名前で、[schema_name.]queue_table_nameという形式で指定します。たとえば、strmadmin.streams_queue_tableのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

NULLに設定すると、取得プロセスで使用する各キューのキュー表の名前が自動的に生成され、現行のユーザーが各キュー表の所有者になります。

start_processes

TRUEに設定すると、各取得プロセスおよび適用プロセスが開始されます。

FALSEに設定すると、取得プロセスも適用プロセスも開始されません。

exclude_schemas

Oracle Streams構成から除外するスキーマのカンマ区切りリスト。これらのスキーマを除外するために、各取得プロセスのネガティブ・ルール・セットにスキーマ・ルールが追加されます。

データベース内のすべてのスキーマを除外する場合は、アスタリスク(*)を指定します。

NULLに設定すると、データベース内のスキーマは除外されません。

このパラメータは、maintain_modeパラメータがGLOBALに設定されている場合にのみ有効です。maintain_modeパラメータがTRANSPORTABLE TABLESPACESに設定されている場合、このパラメータは無視されます。

exclude_flags

exclude_schemasパラメータで指定されたスキーマ内のレプリケーション構成から除外する対象を指定します。詳細は、「使用上のノート」を参照してください。

使用上のノート

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

自己完結型の表領域セット

maintain_modeパラメータをTRANSPORTABLE TABLESPACESに設定した場合、指定する表領域セットは自己完結型である必要があります。ここでの自己完結型とは、表領域セットの内部から表領域セットの外部を指す参照が存在しないことを意味します。たとえば、表領域セットにパーティション表が部分的に含まれている場合、その表領域セットは自己完結型ではありません。

参照:

自己完結型の表領域セットの詳細は、『Oracle Database管理者ガイド』を参照してください。

exclude_flagsパラメータ

次のいずれかの値を指定します。

  • スキーマおよびスキーマ内のすべてのデータベース・オブジェクトへの変更を除外する場合は、DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULLを指定します。

  • スキーマ内のOracle Streamsでサポートされていないデータベース・オブジェクトへの変更を除外する場合は、DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTEDを指定します。

これらの値を両方とも指定すると、エラーが発生します。

DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULLまたはDBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTEDに加えて、次の値のいずれか(または両方)を指定してください。

  • 除外するデータベース・オブジェクトに行ったデータ操作言語(DML)変更を除外する場合は、DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DMLを指定します。

  • 除外するデータベース・オブジェクトに行ったデータ定義言語(DDL)変更を除外する場合は、DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULLを指定します。

これらの値を複数指定するには、プラス記号(+)を使用します。たとえば、exclude_schemasパラメータで指定するスキーマ内の表へのDML変更を保守し、そのスキーマおよびそのスキーマ内のデータベース・オブジェクトへのDDL変更を除外するには、このパラメータを次のように指定します。

DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL + 
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL

exclude_schemasパラメータで指定するスキーマ内のサポートされていないデータベース・オブジェクトへのDML変更およびDDL変更を除外するには、このパラメータを次のように指定します。

DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED + 
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL

除外するデータベース・オブジェクトのルールは、各取得プロセスのネガティブ・ルール・セットに追加されます。したがって、除外するデータベース・オブジェクトへの変更は取得およびレプリケートされません。

このパラメータは、maintain_modeパラメータがGLOBALに設定され、exclude_schemasパラメータがNULL値以外に設定されている場合にのみ有効です。maintain_modeパラメータがGLOBALに設定され、exclude_schemasパラメータがNULLに設定されている場合、このパラメータは無視されます。maintain_modeパラメータがTRANSPORTABLE TABLESPACESに設定されている場合、このパラメータは無視され、指定した表領域セット内のOracle Streamsでサポートされていないすべてのデータベース・オブジェクトがOracle Streams構成から自動的に除外されます。

また、exclude_schemasパラメータでスキーマが指定されていても、exclude_flagsパラメータがNULLに設定されている場合は、取得プロセスのネガティブ・ルール・セットにルールは追加されず、exclude_schemasパラメータで指定されたスキーマはレプリケーション環境に含められます。

162.6.30 PURGE_SOURCE_CATALOGプロシージャ

このプロシージャは、指定されたオブジェクトに属するすべてのOracle Streamsデータ・ディクショナリ情報をローカル・データベースから削除します。

このプロシージャを使用すると、現在および将来にわたり不要なOracle Streamsメタデータを削除できます。

構文

DBMS_STREAMS_ADM.PURGE_SOURCE_CATALOG(
   source_database     IN  VARCHAR2,
   source_object_name  IN  VARCHAR2,
   source_object_type  IN  VARCHAR2);

パラメータ

表162-30 PURGE_SOURCE_CATALOGプロシージャのパラメータ

パラメータ 説明

source_database

オブジェクトが含まれるソース・データベースのグローバル名。

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

source_object_name

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

source_object_type

オブジェクトのタイプ。現在、使用できるオブジェクトのタイプは、TABLEのみです。

使用上のノート

オブジェクトが存在するソース・データベースのグローバル名をsource_databaseパラメータに指定する必要があります。現行のデータベースがオブジェクトのソース・データベースでない場合、そのオブジェクトに関するデータ・ディクショナリ情報は、ソース・データベースではなく現行のデータベースから削除されます。

たとえば、ソース・データベースdbs1.nethr.employees表への変更が、接続先データベースdbs2.nethr.employees表に適用されると仮定します。また、dbs2.nethr.employeesは、ソース・データベースではないとします。この場合、この表にdbs2.netsource_databaseとして指定すると、エラーが発生します。ただし、dbs2.netデータベースでのPURGE_SOURCE_CATALOGプロシージャの実行時に、この表にdbs1.netsource_databaseとして指定すると、dbs2.netにある表に関するデータ・ディクショナリ情報が削除されます。

次の条件のいずれかに当てはまる場合は、データベースでこのプロシージャを実行しないでください。

  • オブジェクトの取得プロセスで取得した論理変更レコード(LCR)が、オブジェクトの再インスタンス化を行わずにローカルで適用される場合(またはその可能性がある場合)。

  • オブジェクトの取得プロセスで取得したLCRが、オブジェクトの再インスタンス化を行わずにデータベースによって転送される場合(またはその可能性がある場合)。

    ノート:

    これらの条件は、取得プロセスで作成されていないLCRには適用されません。つまり、これらの条件は、ユーザーが作成したLCRには適用されません。

162.6.31 RECOVER_OPERATIONプロシージャ

このプロシージャは、エラーの発生により停止した操作に対するオプションを提供します。

これらの操作には、分割およびマージ操作、Oracle Streamsレプリケーション構成操作、Oracle Streamsチェンジ・テーブル構成操作が含まれます。このプロシージャは、操作のロールフォワード、操作のロールバック、操作に関するすべてのメタデータのパージのいずれかの処理を実行します。

このプロシージャは、次の操作に対してのみアクションを実行できます。

操作に関する情報は、操作の処理中に次のデータ・ディクショナリ・ビューに格納されます。

分割およびマージ操作の場合、データ・ディクショナリ・ビューは取得プロセスを含むデータベースに移入されます。構成操作の場合、データ・ディクショナリ・ビューはレプリケーション構成プロシージャが実行されたデータベースに移入されます。

操作が正常に完了すると、操作に関するメタデータはDBA_RECOVERABLE_SCRIPTビューからDBA_RECOVERABLE_SCRIPT_HISTビューに移動されます。その他のビュー(DBA_RECOVERABLE_SCRIPT_PARAMSDBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORS)では、操作に関する情報は30日間保存された後に自動的に削除されます。

これらのいずれかの操作でエラーが発生して操作が停止した場合、操作に関するメタデータはこれらのビューに残ります。この場合、操作に関するメタデータは、RECOVER_OPERATIONプロシージャを使用してロールフォワード、ロールバックまたはパージできます。操作のロールフォワードを選択した場合は、処理を行う前にDBA_RECOVERABLE_SCRIPT_ERRORSに記録されたエラーの原因を解消します。

分割およびマージ操作の場合は、取得プロセスを含むデータベースでRECOVER_OPERATIONプロシージャを実行します。構成操作の場合は、レプリケーション構成プロシージャが実行されたデータベースでRECOVER_OPERATIONを実行します。

ノート:

  • 構成操作の場合、プロシージャは、リカバリ可能なビューに格納される操作情報およびRECOVER_OPERATIONプロシージャにより管理される操作に対して、スクリプトを生成して環境を構成するのではなく、直接環境を構成する必要があります(perform_actions => TRUE)。

  • RECOVER_OPERATIONプロシージャを実行するには、両方のデータベースがOracle Database 10g リリース2以上のデータベースである必要があります。

構文

DBMS_STREAMS_ADM.RECOVER_OPERATION(
   script_id       IN  RAW,
   operation_mode  IN  VARCHAR2  DEFAULT 'FORWARD');

パラメータ

表162-31 RECOVER_OPERATIONプロシージャのパラメータ

パラメータ 説明

script_id

ロールフォワード中、ロールバック中またはパージ中の操作の操作ID。操作IDを確認するには、DBA_RECOVERABLE_SCRIPTデータ・ディクショナリ・ビューのSCRIPT_ID列を問い合せます。

operation_mode

FORWARDを指定すると、操作がロールフォワードされます。FORWARDは、操作の完了を試行する場合に指定します。

ROLLBACKを指定すると、操作で行われたすべての処理がロールバックされます。ロールバックが成功すると、このオプションは操作に関するメタデータをDBA_RECOVERABLE_SCRIPTビューからDBA_RECOVERABLE_SCRIPT_HISTビューに移動します。その他のビューは、操作に関する情報を30日間保持します。

PURGEが設定されている場合、プロシージャは、操作をロールバックすることなく、操作に関するメタデータをDBA_RECOVERABLE_SCRIPTビューからDBA_RECOVERABLE_SCRIPT_HISTビューに移動します。その他のビューは、操作に関する情報を30日間保持します。

162.6.32 REMOVE_QUEUEプロシージャ

このプロシージャは、指定されたANYDATAキューを削除します。

具体的には、このプロシージャは次の操作を実行します。

  1. 現行のエンキュー・トランザクションとデキュー・トランザクションがすべてコミットされるのを待ちます。

  2. キューを停止します。キューを停止すると、それ以降、キューに対するエンキュー操作とキューからのデキュー操作が禁止されます。

  3. キューを削除します。

  4. drop_unused_queue_tableパラメータがTRUEに設定されている場合、キュー表が空で、他のキューによって使用されていなければ、キュー表を削除します。

  5. cascadeパラメータがTRUEに設定されている場合は、キューを使用しているすべてのOracle Streamsクライアントを削除します。

    ノート:

    必ずANYDATAキューを指定してください。

構文

DBMS_STREAMS_ADM.REMOVE_QUEUE(
   queue_name               IN  VARCHAR2,
   cascade                  IN  BOOLEAN  DEFAULT FALSE,
   drop_unused_queue_table  IN  BOOLEAN  DEFAULT TRUE);

パラメータ

表162-32 REMOVE_QUEUEプロシージャのパラメータ

パラメータ 説明

queue_name

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

cascade

TRUEの場合は、キューを使用しているすべてのOracle Streamsクライアントが削除されます。

FALSEの場合は、キューを使用しているOracle Streamsクライアントが存在すると、エラーが発生します。cascadeパラメータをFALSEに設定してこのプロシージャを実行する場合は、キューを使用しているOracle Streamsクライアントが存在しないことを事前に確認してください。

drop_unused_queue_table

キューのキュー表が空の場合にTRUEに設定すると、キュー表が削除されます。キュー表にメッセージが残っている場合、または他のキューによって使用されている場合、キュー表は削除されません。

FALSEに設定すると、キュー表は削除されません。

162.6.33 REMOVE_RULEプロシージャ

このプロシージャは、特定のルールまたはすべてのルールを、指定の取得プロセス、同期取得、適用プロセス、伝播またはメッセージ・クライアントに関連付けられたルール・セットから削除します。

このプロシージャを実行した結果、メッセージ・クライアントのポジティブ・ルール・セットが空になる場合は、そのメッセージ・クライアントは自動的に削除されます。

ノート:

自動的に作成されたルールを削除する場合は、DBMS_RULE_ADM.DROP_RULEプロシージャではなく、このプロシージャを使用してルールを削除してください。DBMS_RULE_ADM.DROP_RULEプロシージャを使用すると、ルールに関するメタデータの一部が残存する可能性があります。

構文

DBMS_STREAMS_ADM.REMOVE_RULE(
   rule_name         IN  VARCHAR2,
   streams_type      IN  VARCHAR2,
   streams_name      IN  VARCHAR2,
   drop_unused_rule  IN  BOOLEAN  DEFAULT TRUE,
   inclusion_rule    IN  BOOLEAN  DEFAULT TRUE);

パラメータ

表162-33 REMOVE_RULEプロシージャのパラメータ

パラメータ 説明

rule_name

削除するルールの名前で、[schema_name.]rule_nameの形式で指定します。NULLの場合は、指定された取得プロセス、同期取得、適用プロセス、伝播またはメッセージ・クライアントのルール・セットからすべてのルールが削除されます。

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

streams_type

Oracle Streamsクライアントのタイプを次のように指定します。

  • 取得プロセスの場合は、capture

  • 同期取得の場合は、sync_capture

  • 伝播の場合は、propagation

  • 適用プロセスの場合は、apply

  • メッセージ・クライアントの場合は、dequeue

streams_name

Oracle Streamsクライアント(取得プロセス、同期取得、伝播、適用プロセスまたはメッセージ・クライアント)の名前。所有者を指定しないでください。

指定されたOracle Streamsクライアントは存在しないが、そのクライアントのルールに関連するメタデータがデータ・ディクショナリに残っている場合は、そのメタデータが削除されます。

指定されたOracle Streamsクライアントが存在せず、そのクライアントのルールに関連するメタデータもデータ・ディクショナリに残っていない場合は、エラーが発生します。

drop_unused_rule

ルールがルール・セットに属していない場合にTRUEに設定すると、そのルールがデータベースから削除されます。

ルールがいずれかのルール・セットに属している場合にTRUEに設定すると、そのルールはデータベースから削除されません。

FALSEに設定すると、ルールはデータベースから削除されません。

inclusion_rule

inclusion_ruleTRUEに設定すると、Oracle Streamsクライアントのポジティブ・ルール・セットからルールが削除されます。

inclusion_ruleFALSEに設定すると、Oracle Streamsクライアントのネガティブ・ルール・セットからルールが削除されます。

162.6.34 REMOVE_STREAMS_CONFIGURATIONプロシージャ

このプロシージャは、ローカル・データベースからOracle Streams構成を削除します。

構文

DBMS_STREAMS_ADM.REMOVE_STREAMS_CONFIGURATION;

使用上のノート

このプロシージャは、ローカル・データベース上で次の処理を実行します。

  • すべての取得プロセスを削除します。

  • インスタンス化のために表が準備されている場合は、DBMS_CAPTURE_ADMパッケージのABORT_TABLE_INSTANTIATIONプロシージャを使用すると、表のインスタンス化の準備が中断されます。

  • インスタンス化のためにスキーマが準備されている場合は、DBMS_CAPTURE_ADMパッケージのABORT_SCHEMA_INSTANTIATIONプロシージャを使用すると、スキーマのインスタンス化の準備が中断されます。

  • インスタンス化のためにデータベースが準備されている場合は、DBMS_CAPTURE_ADMパッケージのABORT_GLOBAL_INSTANTIATIONプロシージャを使用すると、データベースのインスタンス化の準備が中断されます。

  • DBMS_STREAMS_ADMパッケージまたはDBMS_PROPAGATION_ADMパッケージを使用して作成された伝播を削除します。伝播を削除する前に、伝播ジョブを無効にします。DBMS_AQADMパッケージを使用して作成された伝播は削除しません。

  • 伝播で使用されるすべての伝播ジョブを無効にします。

  • すべての適用プロセスを削除します。適用プロセスのエラー・キューに適用エラーがある場合は、すべての適用エラーを削除してから、適用プロセスを削除します。

  • 適用プロセスで使用されるDDLハンドラの定義を削除します。DDLハンドラによって使用されるPL/SQLプロシージャは削除しません。

  • 適用プロセスで使用されるメッセージ・ハンドラの定義を削除します。メッセージ・ハンドラによって使用されるPL/SQLプロシージャは削除しません。

  • 適用プロセスで使用されるプリコミット・ハンドラの定義を削除します。プリコミット・ハンドラによって使用されるPL/SQLプロシージャは削除しません。

  • 個々の適用オブジェクト用、個々のスキーマ用およびデータベース全体用の、初期化SCNと無視SCNを削除します。

  • メッセージ・クライアントを削除します。

  • DBMS_STREAMS_ADMパッケージのSET_MESSAGE_NOTIFICATIONプロシージャを使用して設定されたメッセージ通知定義を解除します。

  • プロシージャDMLハンドラとエラー・ハンドラの定義を削除します。この削除では、これらのハンドラによって使用されるPL/SQLプロシージャは削除されません。

  • 更新競合ハンドラを削除します。

  • 適用表の代替キー列の定義を削除します。

  • DBMS_STREAMS_ADMパッケージを使用して作成されたルール・セットおよびルールを削除します。

  • 取得プロセス、伝播、適用プロセスおよびメッセージ・クライアントによって使用されなかったルール・セットを削除し、それぞれのルール・セット内のルールを削除します。これらのルールとルール・セットは、DBMS_STREAMS_ADMパッケージまたはDBMS_RULE_ADMパッケージのどちらを使用して作成されたかに関係なく削除されます。

このプロシージャは、取得プロセスと適用プロセスを停止してから、それらのプロセスを削除します。

次の両方の条件を満たす場合は、このプロシージャはルール・セットまたはルールを削除しません。

  • ルール・セットまたはルールがDBMS_RULE_ADMパッケージを使用して作成された。

  • ルール・セットまたはルールが、取得プロセス、伝播、適用プロセスまたはメッセージ・クライアントによって使用されていない。

ノート:

このプロシージャの実行には危険が伴います。データベースからOracle Streams構成全体を削除するかどうかを必ず確認してから、このプロシージャを実行してください。

ノート:

  • このプロシージャを繰り返し実行しても、エラーは発生しません。プロシージャが途中で失敗した場合は再実行できます。

  • このプロシージャは複数回コミットされます。

参照:

162.6.35 RENAME_COLUMNプロシージャ

このプロシージャは、指定されたルールを満たす行論理変更レコード(LCR)内の列の名前を変更する宣言ルールベースの変換を追加または削除します。

指定されたルールがTRUEに評価されたときに実行する変換の場合、そのルールはOracle Streamsクライアントのポジティブ・ルール・セットに含まれている必要があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。

ノート:

  • RENAME_COLUMNプロシージャでサポートされているデータ・タイプは、Oracle Streams取得プロセスでサポートされているデータ・タイプと同じです。

  • 宣言的変換では、行LCRのみを変換できます。これらの行LCRは、取得プロセスまたは同期取得で取得されたか、またはアプリケーションで作成され、エンキューされた行LCRです。したがって、このプロシージャを実行する場合は、DMLルールを指定する必要があります。DDLを指定すると、エラーが発生します。

参照:

構文

DBMS_STREAMS_ADM.RENAME_COLUMN(
   rule_name         IN  VARCHAR2,
   table_name        IN  VARCHAR2,
   from_column_name  IN  VARCHAR2,
   to_column_name    IN  VARCHAR2,
   value_type        IN  VARCHAR2  DEFAULT '*',
   step_number       IN  NUMBER    DEFAULT 0,
   operation         IN  VARCHAR2  DEFAULT 'ADD');

パラメータ

表162-34 RENAME_COLUMNプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。NULLの場合は、エラーが発生します。

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

table_name

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

from_column_name

ルールを満たす各行LCR内の名前を変更する列の名前。

to_column_name

ルールを満たす各行LCR内の列の新しい名前。

value_type

行LCRの新しい値の列の名前を変更する場合は、'NEW'を指定します。

行LCRの古い値の列の名前を変更する場合は、'OLD'を指定します。

行LCRの新しい値と古い値の両方の列の名前を変更する場合は、'*'を指定します。

step_number

変換の実行順序。

関連項目: 変換順序の詳細は、『Oracle Streams概要および管理』を参照してください。

operation

変換をルールに追加する場合は、'ADD'を指定します。

変換をルールから削除する場合は、'REMOVE'を指定します。

使用上のノート

operationパラメータに'REMOVE'を指定すると、指定したルールに対する列名変更の宣言ルールベースの変換のうち、指定したパラメータ(table_namecolumn_nameおよびstep_number)に一致するすべての変換が削除されます。これらのパラメータにNULLを指定すると、ワイルドカードとして動作します。次の表に、これらのパラメータの1つ以上がNULLの場合の、RENAME_COLUMNプロシージャの動作を示します。

table_name from_column_name to_column_name step_number 結果

NULL

NULL

NULL

NULL

指定したルールに対するすべての列名変更変換が削除されます。

NULL

NULL

NULL

NULL以外

指定したルールに対して指定されたstep_numberの値を持つすべての列名変更変換が削除されます。

NULL

NULL

NULL以外

NULL以外

指定したルールに対して指定されたto_column_nameおよびstep_numberの値を持つすべての列名変更変換が削除されます。

NULL

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されたtable_nameおよびstep_numberの値を持つすべての列名変更変換が削除されます。

NULL

NULL

NULL以外

NULL

指定したルールに対して指定されたcolumn_nameの値を持つすべての列名変更変換が削除されます。

NULL以外

NULL

NULL以外

NULL

指定したルールに対して指定されたtable_nameおよびcolumn_nameの値を持つすべての列名変更変換が削除されます。

NULL

NULL以外

NULL

NULL

指定したルールに対して指定されているtable_nameの値を持つすべての列名変更変換が削除されます。

NULL

NULL以外

NULL以外

NULL

指定したルールに対して指定されたtable_name、column_nameおよびstep_numberの値を持つすべての列名変更変換が削除されます。

NULL以外

NULL

NULL以外

NULL

指定したルールに対して指定されたtable_name、column_nameおよびstep_numberの値を持つすべての列名変更変換が削除されます。

NULL以外

NULL以外

NULL以外

NULL

指定したルールに対して指定されたtable_name、column_nameおよびstep_numberの値を持つすべての列名変更変換が削除されます。

NULL以外

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されたtable_name、column_nameおよびstep_numberの値を持つすべての列名変更変換が削除されます。

162.6.36 RENAME_SCHEMAプロシージャ

このプロシージャは、指定されたルールを満たす行論理変更レコード(LCR)内のスキーマの名前を変更する宣言ルールベースの変換を追加または削除します。

指定されたルールがTRUEに評価されたときに実行する変換の場合、そのルールはOracle Streamsクライアントのポジティブ・ルール・セットに含まれている必要があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。

ノート:

宣言的変換では、行LCRのみを変換できます。これらの行LCRは、取得プロセスまたは同期取得で取得されたか、またはアプリケーションで作成され、エンキューされた行LCRです。したがって、このプロシージャを実行する場合は、DMLルールを指定する必要があります。DDLを指定すると、エラーが発生します。

参照:

宣言ルールベースの変換の詳細は、『Oracle Streams概要および管理』を参照してください。

構文

DBMS_STREAMS_ADM.RENAME_SCHEMA(
   rule_name         IN  VARCHAR2,
   from_schema_name  IN  VARCHAR2,
   to_schema_name    IN  VARCHAR2,
   step_number       IN  NUMBER    DEFAULT 0,
   operation         IN  VARCHAR2  DEFAULT 'ADD');

パラメータ

表162-35 RENAME_SCHEMAプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。NULLの場合は、エラーが発生します。

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

from_schema_name

ルールを満たす各行LCR内の名前を変更するスキーマの名前。

to_schema_name

ルールを満たす各行LCR内のスキーマの新しい名前。

step_number

変換の実行順序。

関連項目: 変換順序の詳細は、『Oracle Streams概要および管理』を参照してください。

operation

変換をルールに追加する場合は、'ADD'を指定します。

変換をルールから削除する場合は、'REMOVE'を指定します。

使用上のノート

operationパラメータに'REMOVE'を指定すると、指定したルールに対するスキーマ名変更の宣言ルールベースの変換のうち、指定したパラメータ(from_schema_nameto_schema_nameおよびstep_number)に一致する変換がすべて削除されます。これらのパラメータにNULLを指定すると、ワイルドカードとして動作します。次の表に、これらのパラメータの1つ以上がNULLの場合の、RENAME_SCHEMAプロシージャの動作を示します。

from_schema_name to_schema_name step_number 結果

NULL

NULL

NULL

指定したルールに対するすべてのスキーマ名変更変換が削除されます。

NULL

NULL

NULL以外

指定したルールに対して指定されたstep_numberの値を持つすべてのスキーマ名変更変換が削除されます。

NULL

NULL以外

NULL以外

指定したルールに対して指定されたto_schema_nameおよびstep_numberの値を持つすべてのスキーマ名変更変換が削除されます。

NULL以外

NULL

NULL以外

指定したルールに対して指定されたfrom_schema_nameおよびstep_numberの値を持つすべてのスキーマ名変更変換が削除されます。

NULL

NULL以外

NULL

指定したルールに対して指定されたto_schema_nameの値を持つすべてのスキーマ名変更変換が削除されます。

NULL以外

NULL以外

NULL

指定したルールに対して指定されたfrom_schema_nameおよびto_schema_nameの値を持つすべてのスキーマ名変更変換が削除されます。

NULL以外

NULL

NULL

指定したルールに対して指定されたfrom_schema_nameの値を持つすべてのスキーマ名変更変換が削除されます。

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されたfrom_schema_nameto_schema_nameおよびstep_numberの値を持つすべてのスキーマ名変更変換が削除されます。

162.6.37 RENAME_TABLEプロシージャ

このプロシージャは、指定されたルールを満たす行論理変更レコード(行LCR)内の表の名前を変更する宣言ルールベースの変換を追加または削除します。

指定されたルールがTRUEに評価されたときに実行する変換の場合、そのルールはOracle Streamsクライアントのポジティブ・ルール・セットに含まれている必要があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。

ノート:

宣言的変換では、行LCRのみを変換できます。これらの行LCRは、取得プロセスまたは同期取得で取得されたか、またはアプリケーションで作成され、エンキューされた行LCRです。したがって、このプロシージャを実行する場合は、DMLルールを指定する必要があります。DDLを指定すると、エラーが発生します。

参照:

宣言ルールベースの変換の詳細は、『Oracle Streams概要および管理』を参照してください。

構文

DBMS_STREAMS_ADM.RENAME_TABLE(
   rule_name        IN  VARCHAR2,
   from_table_name  IN  VARCHAR2,
   to_table_name    IN  VARCHAR2,
   step_number      IN  NUMBER    DEFAULT 0,
   operation        IN  VARCHAR2  DEFAULT 'ADD');

パラメータ

表162-36 RENAME_TABLEプロシージャのパラメータ

パラメータ 説明

rule_name

[schema_name.]rule_nameの形式で指定したルールの名前。NULLの場合は、エラーが発生します。

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

from_table_name

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

to_table_name

ルールを満たす各行LCR内の表の新しい名前で、[schema_name.]object_nameという形式で指定します。たとえば、humres.staffのように指定します。

この変換では、表のみ、スキーマのみ、または両方の名前を変更できます。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

step_number

変換の実行順序。

関連項目: 変換順序の詳細は、『Oracle Streams概要および管理』を参照してください。

operation

変換をルールに追加する場合は、'ADD'を指定します。

変換をルールから削除する場合は、'REMOVE'を指定します。

使用上のノート

operationパラメータに'REMOVE'を指定すると、指定したルールに対する表名変更の宣言ルールベースの変換のうち、指定したパラメータ(from_table_nameto_table_nameおよびstep_number)に一致する変換がすべて削除されます。これらのパラメータにNULLを指定すると、ワイルドカードとして動作します。次の表に、これらのパラメータの1つ以上がNULLの場合の、RENAME_TABLEプロシージャの動作を示します。

from_table_name to_table_name step_number 結果

NULL

NULL

NULL

指定したルールに対するすべての表名変更変換が削除されます。

NULL

NULL

NULL以外

指定したルールに対して指定されたstep_numberの値を持つすべての表名変更変換が削除されます。

NULL

NULL以外

NULL以外

指定したルールに対して指定されているto_table_nameおよびstep_numberのすべての表名変更変換が削除されます。

NULL以外

NULL

NULL以外

指定したルールに対して指定されているfrom_table_nameおよびstep_numberのすべての表名変更変換が削除されます。

NULL

NULL以外

NULL

指定したルールに対して指定されているto_table_nameのすべての表名変更変換が削除されます。

NULL以外

NULL以外

NULL

指定したルールに対して指定されているfrom_table_nameおよびto_table_nameのすべての表名変更変換が削除されます。

NULL以外

NULL

NULL

指定したルールに対して指定されているfrom_table_nameのすべての表名変更変換が削除されます。

NULL以外

NULL以外

NULL以外

指定したルールに対して指定されているfrom_table_nameto_table_nameおよびstep_numberのすべての表名変更変換が削除されます。

162.6.38 SET_MESSAGE_NOTIFICATIONプロシージャ

このプロシージャは、指定されたOracle Streamsメッセージ・クライアントによって特定のキューからデキュー可能なメッセージに関する通知を設定します。

指定されたキューにメッセージがエンキューされ、このメッセージがルール・セットを満たすため、特定のメッセージ・クライアントによってキューからデキュー可能である場合に、通知が送信されます。

ノート:

  • 現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。

  • DBMS_AQパッケージは通知を構成することもできます。DBMS_AQパッケージでは、バッファに入れたメッセージの通知や時間による通知のグループ化など、DBMS_STREAMS_ADMパッケージでは使用できない一部の通知機能を提供しています。

構文

DBMS_STREAMS_ADM.SET_MESSAGE_NOTIFICATION(
   streams_name          IN  VARCHAR2,
   notification_action   IN  VARCHAR2,
   notification_type     IN  VARCHAR2     DEFAULT 'PROCEDURE',
   notification_context  IN  ANYDATA      DEFAULT NULL,
   include_notification  IN  BOOLEAN      DEFAULT TRUE,
   queue_name            IN  VARCHAR2     DEFAULT 'streams_queue');

パラメータ

表162-37 SET_MESSAGE_NOTIFICATIONプロシージャのパラメータ

パラメータ 説明

streams_name

Oracle Streamsメッセージ・クライアントの名前。所有者を指定しないでください。

たとえば、ユーザーstrmadminがメッセージ・クライアントの場合は、strmadminと指定します。

notification_action

メッセージの通知を送信する方法を指定します。次のいずれかを指定します。

  • URLによる通知の場合は、接頭辞http://なしのURLを指定します。

    たとえば、http://www.company.com:8080というURLを指定する場合は、次のように入力します。

    www.company.com:8080
  • 電子メールによる通知の場合は、電子メール・アドレスを指定します。

    たとえば、xyz@company.comという電子メール・アドレスを指定する場合は、次のように入力します。

    xyz@company.com
  • PL/SQLプロシージャによる通知の場合は、既存のユーザー定義PL/SQLプロシージャの名前を[schema_name.]procedure_nameという形式で指定します。schema_nameを指定しない場合は、SET_MESSAGE_NOTIFICATIONプロシージャを起動するユーザーの名前がデフォルトで使用されます。このプロシージャは、PLSQLCALLBACKデータ構造である必要があります。

    たとえば、oeスキーマ内のnotify_ordersという名前のプロシージャを指定するには、次のように入力します。

    oe.notify_orders
    

関連項目: メッセージ通知プロシージャの詳細は、「例」を参照してください。

notification_type

通知のタイプ。次のいずれかを指定します。

  • HTTP - notification_actionパラメータにURLを指定した場合

  • MAIL - notification_actionパラメータに電子メール・アドレスを指定した場合

  • PROCEDURE - notification_actionパラメータにユーザー定義プロシージャを指定した場合

通知のタイプは、notification_actionパラメータの指定と一致する必要があります。

notification_context

通知のコンテキスト。コンテキストはRAWデータ・タイプの情報で指定する必要があります。たとえば、16進数'FF'に相当する値を指定するには、次のように入力します。

ANYDATA.ConvertRaw(HEXTORAW('FF'))

通知コンテキストはプロシージャによる通知でPL/SQLプロシージャに渡され、HTTPおよび電子メールによる通知では使用されません。

include_notification

TRUEに設定すると、指定されたstreams_nameおよびqueue_nameに対するこの通知が追加されます。つまり、TRUEに設定すると、streams_nameおよびqueue_nameに対して通知がオンになります。

FALSEに設定すると、指定されたstreams_nameおよびqueue_nameに対するこの通知が削除されます。つまり、FALSEに設定すると、streams_nameおよびqueue_nameに対して通知がオフになります。FALSEに設定した場合、notification_actionパラメータまたはnotification_contextパラメータに指定された値は無視されます。

queue_name

ローカルANYDATAキューの名前で、[schema_name.]queue_nameの形式で指定します。現行のデータベースにキューが含まれている必要があります。必ずANYDATAキューを指定してください。

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

使用上のノート

次のいずれかのタイプの通知を指定できます。

  • メッセージ通知が送信される電子メール・アドレス。適切なメッセージがキューにエンキューされると、電子メールがメッセージ・プロパティとともに指定の電子メール・アドレスに送信されます。

  • メッセージを通知するために起動されるPL/SQLプロシージャ。適切なメッセージがキューにエンキューされると、指定したPL/SQLプロシージャがメッセージ・プロパティによって起動されます。このPL/SQLプロシージャによって、メッセージをデキューできます。

  • メッセージ通知が転送されるHTTP URL。適切なメッセージがキューにエンキューされると、通知がメッセージ・プロパティとともに指定のURLに転送されます。

クライアントはデータベースに接続していなくても、通知を受信できます。

電子メールによる通知を登録する場合は、DBMS_AQELMパッケージを使用し、データベースで電子メール通知の送信に使用されるSMTPサーバーのホスト名およびポート名を設定する必要があります。必要な場合は、データベースのsent fromフィールドを使用して、発信元の電子メール・アドレスを設定します。この機能を使用するには、Java対応のデータベースが必要です。

HTTPによる通知を登録する場合は、DBMS_AQELMパッケージを使用し、データベースでHTTP通知の転送に使用されるプロキシ・サーバーのホスト名とポート番号、および非プロキシ・ドメインのリストを設定する必要があります。

各通知は次の構造を持つAQXmlNotificationです。

メッセージ通知プロシージャを使用する場合は、次のシグネチャを持つPL/SQLプロシージャを定義する必要があります。

PROCEDURE procedure_name(
  context  IN  ANYDATA,
  reginfo  IN  SYS.AQ$_REG_INFO,
  descr    IN  SYS.AQ$_DESCRIPTOR);

procedure_nameはプロシージャの名前を表します。このプロシージャは、メッセージ通知について起動されるユーザー定義PL/SQLプロシージャを指定するPLSQLCALLBACKデータ構造です。

次の簡単な例では、通知で送信されるメッセージ識別子とコンシューマ名に基づいて、oe.user_msgタイプのメッセージをデキューする通知プロシージャを示します。この例を実行するには、まずタイプを作成します。

CREATE TYPE oe.user_msg AS OBJECT(
  object_name    VARCHAR2(30),
  object_owner   VARCHAR2(30),
  message        VARCHAR2(50));
/

次に、プロシージャを作成します。

CREATE OR REPLACE PROCEDURE oe.notification_dequeue(
  context  ANYDATA, 
  reginfo  SYS.AQ$_REG_INFO, 
  descr    SYS.AQ$_DESCRIPTOR)
AS 
  dequeue_options     DBMS_AQ.DEQUEUE_OPTIONS_T; 
  message_properties  DBMS_AQ.MESSAGE_PROPERTIES_T; 
  message_handle      RAW(16); 
  message             ANYDATA; 
  oe_message          oe.user_msg; 
  rc                  PLS_INTEGER; 
BEGIN 
  -- Get the message identifier and consumer name from the descriptor 
  dequeue_options.msgid := descr.msg_id; 
  dequeue_options.consumer_name := descr.consumer_name; 
  -- Dequeue the message 
  DBMS_AQ.DEQUEUE( 
    queue_name         => descr.queue_name, 
    dequeue_options    => dequeue_options, 
    message_properties => message_properties, 
    payload            => message, 
    msgid              => message_handle);
  rc := message.getobject(oe_message); 
  COMMIT; 
END; 
/

参照:

PLSQLCALLBACKデータ構造の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

162.6.39 SET_MESSAGE_TRACKINGプロシージャ

このプロシージャは、現在のセッションで生成された論理変更レコード(LCR)の追跡ラベルを設定します。

このプロシージャの影響があるのは、現行のセッションのみです。取得されたLCRや永続LCRなど、現在のセッションで生成されたLCRが追跡されます。

ノート:

このプロシージャで設定される追跡ラベルは、非LCRメッセージを追跡しません。

構文

DBMS_STREAMS_ADM.SET_MESSAGE_TRACKING(
   tracking_label IN VARCHAR2  DEFAULT 'Streams_tracking',
   actions        IN NUMBER    DEFAULT DBMS_STREAMS_ADM.ACTION_MEMORY);

パラメータ

表162-38 SET_MESSAGE_TRACKINGプロシージャのパラメータ

パラメータ 説明

tracking_label

セッションで生成されたLCRを追跡するために使用されるラベル。

現在のセッションでメッセージ追跡を停止するには、このパラメータをNULLに設定します。

ラベルのサイズ制限は、4,000バイトです。

actions

DBMS_STREAMS_ADM.ACTION_MEMORYを指定すると、LCRがメモリー内で追跡され、V$STREAMS_MESSAGE_TRACKING動的パフォーマンス・ビューにLCRに関する情報が格納されます。

現在、このパラメータで有効な設定は、DBMS_STREAMS_ADM.ACTION_MEMORYのみです。

このパラメータに指定する値は、列挙定数です。列挙定数にはパッケージ名を接頭辞として付加する必要があります。

162.6.40 SET_RULE_TRANSFORM_FUNCTIONプロシージャ

このプロシージャは、カスタム・ルールベースの変換に関する変換ファンクション名を設定または削除します。

構文

DBMS_STREAMS_ADM.SET_RULE_TRANSFORM_FUNCTION(
   rule_name           IN  VARCHAR2,
   transform_function  IN  VARCHAR2);

パラメータ

表162-39 SET_RULE_TRANSFORM_FUNCTIONプロシージャのパラメータ

パラメータ 説明

rule_name

設定または削除するルールベース変換ファンクションを持つルールの名前で、[schema_name.]rule_nameという形式で指定します。

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

transform_function

ルールのルールベース変換で使用される変換ファンクションの名前を入力するか、NULLを指定します。

変換ファンクションの名前を指定する場合は、次のいずれかの形式で既存の変換ファンクションを指定します。

  • [schema_name.]function_name

  • [schema_name.]package_name.function_name

ファンクションがパッケージ内にある場合は、package_nameを指定する必要があります。たとえば、hrスキーマ内のtransform_pkgパッケージにあるexecutive_to_managementという名前のファンクションを指定するには、hr.transform_pkg.executive_to_managementと入力します。指定したプロシージャが存在しない場合はエラーが戻されます。

schema_nameが指定されない場合は、ルールベースの変換ファンクションを起動するユーザー名がデフォルトで使用されます。

NULLを指定すると、SET_RULE_TRANSFORM_FUNCTIONプロシージャは、現行のカスタム・ルールベースの変換をルールから削除します。

使用上のノート

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

変換ファンクションのシグネチャ

カスタム・ルールベースの変換ファンクションは、常に1つのメッセージに対して動作しますが、1つ以上のメッセージを戻すことができます。メッセージを1つ戻すカスタム・ルールベースの変換ファンクションは、1対1の変換ファンクションです。1対1の変換ファンクションには、次のシグネチャが含まれている必要があります。

FUNCTION user_function (
   parameter_name   IN  ANYDATA)
RETURN ANYDATA;

user_functionはファンクション名で、parameter_nameはファンクションに渡されるパラメータの名前です。ファンクションに渡されるパラメータはメッセージをANYDATAにカプセル化したもので、ファンクションではANYDATAにカプセル化したメッセージを戻す必要があります。

複数のメッセージを戻すカスタム・ルールベースの変換ファンクションは、1対多の変換ファンクションです。1対多の変換ファンクションには、次のシグネチャが含まれている必要があります。

FUNCTION user_function (
   parameter_name  IN  ANYDATA)
RETURN STREAMS$_ANYDATA_ARRAY;

user_functionはファンクション名で、parameter_nameはファンクションに渡されるパラメータの名前です。ファンクションに渡されるパラメータはメッセージをANYDATAにカプセル化したもので、ファンクションはカプセル化したANYDATAメッセージを0個以上含む配列を戻す必要があります。配列に含まれるカプセル化したANYDATAメッセージが0個の場合、元のメッセージは廃棄されます。

STREAMS$_ANYDATA_ARRAYタイプは、オラクル社が提供するタイプで、次のように定義されています。

CREATE OR REPLACE TYPE SYS.STREAMS$_ANYDATA_ARRAY
   AS VARRAY(2147483647) of ANYDATA
/

1対多ファンクションを使用するカスタム・ルールベースの変換には、次の制限があります。

  • 1対多ファンクションに関連付けられているルールは、Oracle Streams取得プロセスのみでサポートされます。これらのルールは、他のOracle Streamsクライアント(伝播、適用プロセス、メッセージ・クライアントなど)で使用されるルール・セットに追加しないでください。

  • 1対多ファンクションは、行論理変更レコード(行LCR)のみを操作できます。DDL LCRは操作できません。

  • 1対多ファンクションが戻す行LCRに、ピース単位のLOB、LONGまたはLONG RAWの操作を含めることはできません。

  • 1対多ファンクションは、正しい順序で行LCRを戻す必要があります。行LCRは、配列(索引1から開始)内の行LCRの順序に従って、トランザクション内で実行されます。

1対多ファンクションによる変換結果である行LCRを適用プロセスでデキューする場合は、すべての行LCRに対する1対多ファンクションに渡されたLCRのインスタンス化SCNが使用されます。

ノート:

  • 1対1または1対多変換ファンクションがNULLを戻すと、エラーが発生します。

  • 1つのルールに対しては、1つのみのカスタム・ルールベースの変換を指定できます。同じルールに対して、1対1と1対多の両方の変換ファンクションを指定することはできません。

  • カスタム・ルールベースの変換によって作成され戻されるLCRでは、source_database_nametransaction_idscnの各パラメータの値が元のLCRと一致している必要があります。これらのパラメータでは、他の値でLCRを作成しようとした場合でも、元のLCRの値が自動的に指定されます。

ルール・アクション・コンテキスト

このプロシージャは、変換を指定するため、指定されたルールのアクション・コンテキストを修正します。ルールのアクション・コンテキストは、ルールがメッセージに対してTRUEに評価された後、ルール・エンジンのクライアントが解析するルールに関連付けられているオプションの情報です。ルール・エンジンのクライアントには、ユーザーが作成するアプリケーションや、Oracle StreamsなどのOracleの内部機能があります。Oracle Streamsクライアントには、取得プロセス、同期取得、伝播、適用プロセス、メッセージ・クライアントがあります。アクション・コンテキスト内の情報はSYS.RE$NV_LISTタイプのオブジェクトであり、名前/値ペアで構成されています。

Oracle Streamsのカスタム・ルールベースの変換は、常にアクション・コンテキスト内の次の名前/値ペアで構成されます。

  • ファンクションが1対1の変換ファンクションの場合、その名前はSTREAMS$_TRANSFORM_FUNCTIONです。ファンクションが1対多の変換ファンクションの場合、その名前はSTREAMS$_ARRAY_TRANS_FUNCTIONです。

  • 値は、VARCHAR2として指定されたPL/SQLファンクション名を含むANYDATAインスタンスです。このファンクションによって変換が実行されます。

変換ファンクションをコールするユーザー

変換ファンクションをコールするユーザーには、そのファンクションに対するEXECUTE権限が必要です。次のリストに、変換ファンクションをコールするユーザーのタイプを示します。

  • 取得プロセスで使用されるルールに対して変換を指定する場合に変換ファンクションをコールするユーザーは、取得プロセスの取得ユーザーです。

  • 同期取得で使用されるルールに対して変換を指定する場合に変換ファンクションをコールするユーザーは、同期取得の取得ユーザーです。

  • 伝播で使用されるルールに対して変換を指定する場合に変換ファンクションをコールするユーザーは、伝播のソース・キューの所有者です。

  • 適用プロセスで使用されるルールに対して変換を指定する場合に変換ファンクションをコールするユーザーは、適用プロセスの適用ユーザーです。

  • メッセージ・クライアントで使用されるルールに対して変換を指定する場合に変換ファンクションをコールするユーザーは、メッセージ・クライアントを起動するユーザーです。

ファンクションの検証

このプロシージャでは、指定された変換ファンクションが存在するかどうかは確認されません。変換ファンクションが存在しない場合は、Oracle Streamsクライアントが変換ファンクションを起動しようとしたときにエラーが発生します。

162.6.41 SET_TAGプロシージャ

このプロシージャは、現行のセッションで継続して生成されるREDOエントリすべてに対してバイナリ・タグを設定します。

現行セッションのDML文またはDDL文によって生成される各REDOエントリには、このタグが含まれます。このプロシージャの影響があるのは、現行のセッションのみです。

参照:

構文

DBMS_STREAMS_ADM.SET_TAG(
   tag  IN RAW  DEFAULT NULL);

パラメータ

表162-40 SET_TAGプロシージャのパラメータ

パラメータ 説明

tag

現行のセッションで継続して生成されるREDOエントリすべてに対するバイナリ・タグ。RAW値は一連のバイトで、バイトは一連のビットです。

デフォルトでは、セッションのタグはNULLです。

タグ値のサイズ制限は、2000バイトです。

使用上のノート

現行のセッションでタグを16進数値の'17'に設定するには、次のプロシージャを実行します。

EXEC DBMS_STREAMS_ADM.SET_TAG(tag => HEXTORAW('17'));

SET_TAGプロシージャでは、次の点に注意してください。

  • このプロシージャはトランザクション型ではありません。つまり、SET_TAGの結果はロールバックできません。

  • データベースでデータ・ディクショナリの構築を実行する前に、SET_TAGプロシージャを実行してNULL以外のセッション・タグを設定した場合、ディクショナリの構築前に開始したトランザクションのREDOエントリに、セッションに指定したタグ値が含まれないことがあります。そのため、データ・ディクショナリの構築は、セッションでSET_TAGプロシージャを使用する前に実行します。データ・ディクショナリは、DBMS_CAPTURE_ADM.BUILDプロシージャを実行すると構築されます。BUILDプロシージャは、取得プロセスの作成時に自動的に実行できます。

162.6.42 SET_UP_QUEUEプロシージャ

このプロシージャは、キュー表およびANYDATAキューを作成します。

構文

DBMS_STREAMS_ADM.SET_UP_QUEUE(
   queue_table     IN  VARCHAR2  DEFAULT 'streams_queue_table',
   storage_clause  IN  VARCHAR2  DEFAULT NULL,
   queue_name      IN  VARCHAR2  DEFAULT 'streams_queue',
   queue_user      IN  VARCHAR2  DEFAULT NULL,
   comment         IN  VARCHAR2  DEFAULT NULL);

パラメータ

表162-41 SET_UP_QUEUEプロシージャのパラメータ

パラメータ 説明

queue_table

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

キュー表の所有者を指定しない場合は、このプロシージャを実行するユーザーがキュー表の所有者として自動的に指定されます。

キュー表の名前の最大長は24バイトです。

storage_clause

キュー表に対すSTORAGE句。

記憶域パラメータは、キュー表の作成時に、CREATE TABLE文に組み込まれます。有効な表のSTORAGE句を任意に指定できます。

ここで表領域を指定しない場合は、キュー表およびそのすべての関連オブジェクトが、このプロシージャを実行しているユーザーのデフォルトのユーザー表領域に作成されます。ここで表領域を指定した場合は、キュー表およびそのすべての関連オブジェクトが、STORAGE句で指定された表領域に作成されます。

NULLの場合は、キュー表が作成された表領域の記憶特性が使用されます。

関連項目: STORAGE句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

queue_name

ANYDATAキューとして機能するキューの名前で、[schema_name.]queue_nameという形式で指定します。たとえば、strmadmin.streams_queueのように指定します。

スキーマを指定しない場合は、キュー表の所有者が使用されます。キュー表の所有者は、キューの所有者でもある必要があります。キューの所有者には、キューに関するすべてのキュー操作を実行するための権限が自動的に付与されます。

このパラメータにスキーマが指定されず、queue_tableパラメータにキュー表の所有者が指定されていない場合は、現行のユーザーがデフォルトで使用されます。

キューの名前の最大長は24バイトです。

queue_user

キューに対するENQUEUE権限とDEQUEUE権限が必要なユーザー名。このユーザーは、キューの保護キュー・ユーザーとしても構成されます。キュー・ユーザーにはGRANTオプションが付与されていないため、これらの権限を他のユーザーに付与することはできません。

NULLに設定すると、権限は付与されません。DBMS_AQADMパッケージを使用して、キューの権限を適切なユーザーに付与することもできます。

comment

キューに対するコメント。

使用上のノート

設定には、次のアクションが含まれます。

  • 指定のキュー表が存在していない場合、このプロシージャは、DBMS_AQADMパッケージのCREATE_QUEUE_TABLEプロシージャを実行し、指定のSTORAGE句でキュー表を作成します。このプロシージャでキュー表が作成される場合は、保護キューでありトランザクション・キューでもある、ANYDATAのマルチ・コンシューマ・キューが作成されます。

    また、データベースがOracle Database 10g リリース 2以上の場合、CREATE_QUEUE_TABLEsort_list設定はcommit_timeに設定されます。データベースがOracle Database 10g リリース2より前の場合、CREATE_QUEUE_TABLEsort_list値はenq_timeに設定されます。

  • 指定したキュー表が存在する場合は、そのキュー表のプロパティがキューで使用されます。

  • 指定したキューの名前が存在していない場合、このプロシージャは、DBMS_AQADMパッケージのCREATE_QUEUEプロシージャを実行して、キューを作成します。

  • このプロシージャは、キューを開始します。

  • キュー・ユーザーが指定されている場合、このプロシージャは、このユーザーをキューの保護キュー・ユーザーとして構成し、キューに対するENQUEUE権限とDEQUEUE権限を指定のキュー・ユーザーに付与します。

    キュー・ユーザーを保護キュー・ユーザーとして構成するために、このプロシージャは、ユーザー名と同名のアドバンスト・キューイング・エージェントを作成します(エージェントが存在していない場合)。この名前のエージェントが存在し、キュー・ユーザーのみに関連付けられている場合は、そのエージェントが使用されます。SET_UP_QUEUEプロシージャは、次に、DBMS_AQADMパッケージのENABLE_DB_ACCESSプロシージャを実行して、エージェントとユーザーを指定します。

ノート:

  • キューに対するメッセージのエンキューおよびデキューを実行するには、DBMS_STREAMS_MESSAGINGパッケージまたはDBMS_AQパッケージに対するEXECUTE権限がキュー・ユーザーに必要です。この権限は、SET_UP_QUEUEプロシージャでは付与されません。

  • SET_UP_QUEUEで作成を試みたエージェントが存在し、そのエージェントがqueue_userで指定されているユーザー以外のユーザーに関連付けられている場合は、エラーが発生します。この場合は、既存のエージェントを変更または削除してから、SET_UP_QUEUEを再試行してください。

参照:

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

162.6.43 SPLIT_STREAMSプロシージャ

このプロシージャは、取得プロセスからの1つのストリームをその取得プロセスからの他のすべてのストリームから分割します。

このプロシージャの対象は、複数の接続先データベースに伝播された変更を取得プロセスが取得するOracle Streamsレプリケーション環境です。伝播の接続先の1つが取得された変更の受入れを停止した場合、変更は取得プロセス・キューに残ります。キューが大きくなってメッセージのハード・ディスクへの書込みが開始されると、Oracle Streams環境のパフォーマンスが低下する可能性があります。接続先はいくつかの理由で変更の受入れを停止する場合があります。たとえば、接続先データベースが停止する場合などです。

具体的には、このプロシージャは次の操作を実行します。

  1. 取得プロセスを実行しているデータベースで新しいキューを作成します。新しいキューは元のストリームで使用されているキューのクローンであるため、クローニングされたキューと呼ばれます。新しいキューはクローニングされた新しい取得プロセスによって使用され、クローニングされた新しい伝播のソース・キューとなります。

  2. ステップ1で作成したソース・キューから既存の宛先キューにメッセージを伝播する新しい伝播を作成します。新しい伝播は元のストリームで使用されている伝播のクローンであるため、クローニングされた伝播と呼ばれます。クローニングされた伝播は、元の伝播と同じルール・セットを使用します。

  3. 取得プロセスを停止します。

  4. 元の伝播の確認済SCNを問い合せます。確認済SCNとは、伝播によって送信された変更を適用する適用プロセスによって最後に確認されたSCNです。

  5. 新しい取得プロセスを作成します。新しい取得プロセスは元のストリームで使用されている取得プロセスのクローンであるため、クローニングされた取得プロセスと呼ばれます。プロシージャによって、クローニングされた取得プロセスの開始SCNが、ステップ4で問い合せた確認済SCNの値に設定されます。クローニングされた取得プロセスは、元の取得プロセスと同じルール・セットを使用します。

  6. 元の伝播を削除します。

  7. ステップ4で問い合せた確認済SCNに設定された開始SCNで元の取得プロセスを開始します。

  8. auto_merge_thresholdパラメータが正数に設定されている場合、スケジュールに従って設定された間隔でMERGE_STREAMS_JOBプロシージャを実行するOracle Schedulerジョブを作成します。2つのストリームが指定されたマージしきい値内にある場合、MERGE_STREAMS_JOBプロシージャはMERGE_STREAMSを実行して、ストリームを自動的にマージします。

SPLIT_STREAMSプロシージャの実行が終了すると、クローニングされた取得プロセスは無効化されます。接続先データベースで問題が解決され、宛先キューで変更を受け入れることができる場合は、DBMS_CAPTURE_ADMパッケージのSTART_CAPTUREプロシージャを使用して、クローニングされた取得プロセスを開始する必要があります。

DBA_STREAMS_SPLIT_MERGEビューは、各クローン・コンポーネントの名前と、分割およびマージ操作に関する情報を示します。

ノート:

元の取得プロセスがダウンストリーム取得プロセスである場合は、クローニングされた取得プロセスを開始する前に、ソース・データベースからREDOログを読み取るようにクローニングされた取得プロセスを構成する必要があります。

参照:

構文

DBMS_STREAMS_ADM.SPLIT_STREAMS(
   propagation_name         IN      VARCHAR2,
   cloned_propagation_name  IN      VARCHAR2  DEFAULT NULL,
   cloned_queue_name        IN      VARCHAR2  DEFAULT NULL,
   cloned_capture_name      IN      VARCHAR2  DEFAULT NULL,
   perform_actions          IN      BOOLEAN   DEFAULT TRUE,
   script_name              IN      VARCHAR2  DEFAULT NULL,
   script_directory_object  IN      VARCHAR2  DEFAULT NULL,
   auto_merge_threshold     IN      NUMBER    DEFAULT NULL,
   schedule_name            IN OUT  VARCHAR2,
   merge_job_name           IN OUT  VARCHAR2);

パラメータ

表162-42 SPLIT_STREAMSプロシージャのパラメータ

パラメータ 説明

propagation_name

宛先キューにメッセージを送信できない伝播の名前。指定する伝播は、他のストリームから分割されるストリームの伝播です。既存の伝播名を指定する必要があります。所有者を指定しないでください。

cloned_propagation_name

分割されるストリームに対して、このプロシージャで作成される新しい伝播の名前。NULLの場合、システムによって伝播名が生成されます。

cloned_queue_name

分割されるストリームに対して、このプロシージャで作成される新しいキューの名前。NULLの場合、システムによってキュー名が生成されます。

cloned_capture_name

分割されるストリームに対して、このプロシージャで作成される新しい取得プロセスの名前。NULLの場合、システムによって取得プロセス名が生成されます。

perform_actions

TRUEに設定すると、ストリームを直接分割するために必要な処理が実行されます。

FALSEに設定すると、ストリームを直接分割するために必要な処理は実行されません。

このプロシージャでスクリプトを生成し、そのスクリプトを編集して実行できるようにする場合は、FALSEに設定します。次のいずれかのパラメータがNULLの場合にFALSEに設定すると、エラーが発生します。

  • script_name

  • script_directory_object

script_name

このパラメータがNULL以外の値で、perform_actionsパラメータがFALSEの場合は、指定された名前のスクリプトが生成されます。このスクリプトには、ストリームを分割するために必要なすべての文が記述されています。指定したスクリプト名のファイルが、script_directory_objectパラメータで指定されるディレクトリにすでに存在する場合は、その既存ファイルの末尾に文が追加されます。

このパラメータがNULL以外の値で、perform_actionsパラメータがTRUEの場合は、指定のスクリプトが生成され、ストリームを直接分割する処理が実行されます。

このパラメータがNULLで、perform_actionsパラメータがTRUEの場合は、ストリームを直接分割する処理が実行され、スクリプトは生成されません。

このパラメータがNULLで、perform_actionsパラメータがFALSEの場合は、エラーが発生します。

script_directory_object

作成されるスクリプトが保存されるローカル・コンピュータ・システムのディレクトリのディレクトリ・オブジェクト。

script_nameパラメータがNULLの場合、このパラメータは無視され、スクリプトは生成されません。

このパラメータがNULLで、script_nameパラメータがNULL以外の場合は、エラーが発生します。

ノート: ディレクトリ・オブジェクトにOracle Automatic Storage Management (ASM)ディスク・グループを指定することはできません。

auto_merge_threshold

正数を指定した場合、分割されたストリームは、Oracle Schedulerジョブによって、取得プロセスからの他のすべてのストリームに自動的にマージされて戻されます。このジョブによって、スケジュールに従って設定された間隔でMERGE_STREAMS_JOBプロシージャが実行されます。GV$STREAMS_CAPTURE動的パフォーマンス・ビューの各取得プロセスのCAPTURE_MESSAGE_CREATE_TIME列の値によって、ストリームがいつマージされるかが判別されます。具体的には、クローニングされた取得プロセスと元の取得プロセスのCAPTURE_MESSAGE_CREATE_TIMEの差(秒数)がauto_merge_thresholdパラメータに指定された値以下の場合、2つのストリームは自動的にマージされます。分割されたストリームが元のストリームとマージされて戻されるには、クローニングされた取得プロセスが開始されている必要があります。

NULLまたは0(ゼロ)を指定した場合、分割されたストリームは自動的に元のストリームとマージされて戻されません。分割されたストリームを元のストリームとマージするには、クローニングされた取得プロセスのCAPTURE_MESSAGE_CREATE_TIMEが、元の取得プロセスのCAPTURE_MESSAGE_CREATE_TIMEに追いついているか、またはほとんど追いついているときに、MERGE_STREAMプロシージャを手動で実行します。

CAPTURE_MESSAGE_CREATE_TIMEは、取得された変更がREDOログに記録された時間を記録します。

schedule_name

Oracle Schedulerスケジュール名で、[schema_name.]schedule_nameの形式で指定します。たとえば、strmadmin.merge_scheduleのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

auto_merge_thresholdNULL以外の正数の場合、スケジュールは、適切な時間にストリームを自動的にマージするジョブによって使用されます。命名規則に従うか、またはスケジュールの追跡を簡単にするには、スケジュール名を指定します。

NULLの場合で、auto_merge_thresholdNULL以外の正数の場合、システムによってスケジュール名が生成されます。

auto_merge_thresholdNULLまたは0(ゼロ)の場合、このパラメータはNULLに設定する必要があります。

このプロシージャによってスケジュールが作成された場合、スケジュールはプロシージャが完了したときに開始されます。スケジュールを変更して、マージ・ジョブの実行頻度を制御できます。

既存のスケジュール名を指定すると、エラーが発生します。

merge_job_name

Oracle Schedulerジョブ名で、[schema_name.]merge_job_nameの形式で指定します。たとえば、strmadmin.merge_jobのように指定します。スキーマを指定しない場合は、現行のユーザー名がデフォルトで使用されます。

auto_merge_thresholdNULL以外の正数の場合、ジョブは、適切な時間にストリームを自動的にマージします。命名規則に従う場合やジョブの追跡を簡単にする場合には、マージ・ジョブ名を指定します。

NULLの場合で、auto_merge_thresholdNULL以外の正数の場合、システムによってジョブ名が生成されます。

auto_merge_thresholdNULLまたは0(ゼロ)の場合、このパラメータはNULLに設定する必要があります。

既存のジョブ名を指定すると、エラーが発生します。

参照:

Oracle Schedulerの詳細は、『Oracle Database管理者ガイド』を参照してください。