クラウド・オブジェクト・ストアに格納されたメッセージで永続メッセージを使用
DBMS_PIPE
パッケージには、メッセージがクラウド・オブジェクト・ストアに格納される永続メッセージをサポートするために、Autonomous Databaseに拡張機能が用意されています。
- DBMS_PIPEを使用した永続メッセージングについて
DBMS_PIPE
を使用した永続メッセージにより、1つ以上のデータベース・セッションが同じリージョンまたはリージョン間で、クラウド・オブジェクト・ストアに格納されているメッセージと通信できます。 - 明示的な永続パイプの作成およびメッセージの送信
指定されたパイプ名(明示的パイプ)で永続的パイプを作成するステップについて説明します。 - 同じデータベースでの永続メッセージの取得
同じAutonomous Databaseインスタンス(メッセージが送信されたインスタンス)の明示的なパイプから永続メッセージを取得するステップについて説明します。 - 別のデータベースでのパイプの作成による永続メッセージの取得
メッセージを送信したインスタンスとは異なるAutonomous Databaseインスタンス上の明示的なパイプを使用して、クラウド・オブジェクト・ストアに格納されている永続メッセージを取得するステップについて説明します。 - 永続パイプの削除
永続パイプを削除するステップについて説明します。
DBMS_PIPEを使用した永続メッセージングについて
DBMS_PIPE
を使用した永続メッセージにより、1つ以上のデータベース・セッションが同じリージョンまたはリージョン間で、クラウド・オブジェクト・ストアに格納されているメッセージと通信できます。
DBMS_PIPE
の永続メッセージ:
-
非常に大きなメッセージを送信および取得できます。
-
多数のパイプ・メッセージの送信をサポートします。
-
単一データベース内、複数のデータベース間、および異なるリージョン内のデータベース間でのメッセージの送受信をサポートします。
-
同じクラウド・オブジェクト・ストアのロケーションURIを使用して、複数のパイプをサポートします。
永続メッセージ・パイプは、サポートされている任意のDBMS_PIPE
タイプで作成できます:
- 暗黙的なパイプ:
DBMS_PIPE.SEND_MESSAGE
関数を使用して不明なパイプ名でメッセージを送信すると、自動的に作成されます。 - 明示的なパイプ: ユーザーが指定したパイプ名で
DBMS_PIPE.CREATE_PIPE
関数を使用して作成されます。 - パブリック・パイプ:
DBMS_PIPE
パッケージに対するEXECUTE
権限を持つすべてのユーザーがアクセスできます。 - プライベート・パイプ: パイプ作成者と同じユーザーを持つセッションからアクセスできます。
ノート:
Oracleでは、永続メッセージングでメッセージを送信または受信する前に、明示的なパイプを作成することをお薦めします。DBMS_PIPE.CREATE_PIPE
を使用して明示的なパイプを作成すると、(private
パラメータを設定して)パブリックまたはプライベートのいずれかのアクセス権限でパイプが作成されるようになります。
次に、永続メッセージングを使用したDBMS_PIPE
の一般的なワークフローを示します:

図database-pipe-persistent-messaging.epsの説明
DBMS_PIPE
を使用する既存のアプリケーションは、最小限の変更で引き続き動作できます。 ログオン・トリガーを使用するか、他の初期化ルーチンを使用して、資格証明オブジェクトおよびロケーションURIでDBMS_PIPE
を使用する既存のアプリケーションを構成できます。 DBMS_PIPE
資格証明およびロケーションURIを設定した後、永続メッセージを使用するために他の変更は必要ありません。 その後のパイプの使用はすべて、データベース・メモリーではなくクラウド・オブジェクト・ストアにメッセージを格納します。 これにより、最小限の変更で、インメモリーから永続的なクラウド・オブジェクト・ストレージにメッセージのストレージ・メソッドを変更できます。
永続メッセージングの概要および機能
永続メッセージを使用するDBMS_PIPE
の機能:
-
メッセージは、同じリージョン内の複数のAutonomous Databaseインスタンス、またはリージョン間で送信および取得できます。
-
永続メッセージは、1つのプロセスによる書込みまたは読取りが保証されます。 これにより、同時書込みおよび同時読取りによるメッセージ・コンテンツの矛盾が回避されます。 永続メッセージ・パイプを使用すると、
DBMS_PIPE
は1つの操作のみを許可し、メッセージまたは受信メッセージを一度にアクティブにすることができます。 ただし、進行中の操作のために操作が不可能な場合、プロセスはtimeout
値に達するまで定期的に再試行します。 -
DBMS_PIPE
は、DBMS_CLOUD
を使用してクラウド・オブジェクト・ストアにアクセスします。 メッセージは、サポートされている任意のクラウド・オブジェクト・ストアに格納できます。 詳細については、「DBMS_CLOUD URIの書式」を参照してください。 DBMS_PIPE
はDBMS_CLOUD
を使用してクラウド・オブジェクト・ストアにアクセスし、サポートされているすべての資格証明タイプを使用できます:DBMS_CLOUD.CREATE_CREDENTIAL
: 詳細については、CREATE_CREDENTIALプロシージャを参照してください。
DBMS_PIPE権限の認可およびセキュリティ
DBMS_PIPE
プロシージャは、実行者権限で実行されます。 プライベート・パイプは現在のユーザーが所有し、ユーザーが作成したプライベート・パイプは同じユーザーのみが使用できます。 これは、メッセージがクラウド・オブジェクト・ストアに格納されるインメモリー・パイプと永続メッセージ・パイプの両方に適用されます。 メッセージの送信および受信は、実行者のスキーマで実行されます。
メッセージがクラウド・オブジェクト・ストアに格納されるプライベート・パイプを使用して、location_uri
パラメータで識別されるクラウド・オブジェクト・ストアでの認証に資格証明オブジェクトが必要です。 起動するユーザーには、オブジェクト・ストアへのアクセスに使用されるcredential_name
パラメータで指定された資格証明オブジェクトに対するEXECUTE
権限が必要です。
パブリック・パイプを使用するには、ユーザー、データベース・セッションにDBMS_PIPE
に対する実行権限が必要です。 永続メッセージを使用してメッセージをクラウド・オブジェクト・ストアに格納するパブリック・パイプの場合、ユーザー、データベース・セッションは、DBMS_CLOUD
に対する実行権限と、資格証明オブジェクトに対する実行権限を持っている必要があります(または、メッセージを含むロケーションURIへのアクセスを許可されている資格証明オブジェクトを作成できます)。
DBMS_PIPEの制限
DBMS_PIPE
パッケージは、異なる文字セットを使用するデータベース間でのメッセージの送信をサポートしていません。 たとえば、AL32UTF8を使用する1つのAutonomous Databaseインスタンスと、WE8MSWIN1252を使用する別のインスタンスがある場合、これら2つのデータベース間でDBMS_PIPE
を含むメッセージを送信することはできません。 この場合、これらの2つのデータベース間でDBMS_PIPE
のメッセージを送信しようとすると、エラーORA-12704
が発生します。
詳細については、「Autonomous Databaseの文字セットの選択」を参照してください。
同じデータベースでの永続メッセージの取得
同じAutonomous Databaseインスタンス(メッセージが送信されたインスタンス)の明示的なパイプから永続メッセージを取得するステップについて説明します。
Autonomous Databaseインスタンスでは、別のセッションからパイプに送信されたメッセージを受信できます。 DBMS_PIPE
プロシージャは、実行者権限プロシージャであり、現在の起動ユーザーとして実行されます。
プライベート・パイプは、パイプを作成する現在のユーザーが所有します。 プライベート・パイプには、パイプを作成したユーザーと同じユーザーのみがアクセスできます。 これは、インメモリー・メッセージを使用するパイプと、クラウド・オブジェクト・ストアに格納されているメッセージがある永続メッセージを使用するパイプに適用されます。
パブリック・パイプには、DBMS_PIPE
に対する実行権限を持つ任意のデータベース・セッションからアクセスできます。 これは、インメモリー・メッセージを使用するパイプと、クラウド・オブジェクト・ストアに格納されているメッセージがある永続メッセージを使用するパイプに適用されます。
詳細については、「SET_CREDENTIAL_NAMEプロシージャ」と「SET_LOCATION_URIプロシージャ」を参照してください。
詳細については、「RECEIVE_MESSAGEファンクション」を参照してください。
別のデータベースでのパイプの作成による永続メッセージの取得
メッセージを送信したインスタンスとは異なるAutonomous Databaseインスタンス上の明示的なパイプを使用して、クラウド・オブジェクト・ストアに格納されている永続メッセージを取得するステップについて説明します。