クラウド・オブジェクト・ストアに格納されたメッセージでの永続メッセージングの使用
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を設定した後は、永続メッセージングを使用するために他の変更は必要ありません。パイプの後続のすべての使用は、メッセージをデータベース・メモリーではなくクラウド・オブジェクト・ストアに格納します。これにより、最小限の変更で、インメモリーから永続Cloud Object Storageへのメッセージの格納方法を変更できます。
永続メッセージングの概要と機能
永続メッセージを使用した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インスタンス上の明示的なパイプを使用して、クラウド・オブジェクト・ストアに格納されている永続メッセージを取得するステップについて説明します。