クラウド・オブジェクト・ストアに格納されたメッセージでの永続メッセージングの使用
DBMS_PIPE
パッケージには、メッセージがクラウド・オブジェクト・ストアに格納される永続メッセージングをサポートするために、Autonomous Databaseの拡張機能があります。
- DBMS_PIPEを使用した永続メッセージングについて
DBMS_PIPE
を使用した永続メッセージングを使用すると、1つ以上のデータベース・セッションが同じリージョン内または複数のリージョン間で、クラウド・オブジェクト・ストアに格納されているメッセージと通信できます。 - 明示的永続パイプの作成およびメッセージの送信
指定したパイプ名(明示的パイプ)の永続パイプを作成するステップについて説明します。 - 同じデータベースでの永続メッセージの取得
同じAutonomous Databaseインスタンス(メッセージが送信されたインスタンス)上の明示的なパイプから永続メッセージを取得するステップについて説明します。 - 別のデータベースでのパイプの作成による永続メッセージの取得
メッセージを送信したインスタンスとは異なるAutonomous Databaseインスタンス上の明示的なパイプを使用して、クラウド・オブジェクト・ストアに格納されている永続メッセージを取得するステップについて説明します。 - 永続パイプの削除
永続パイプを削除するステップについて説明します。
DBMS_PIPEを使用した永続メッセージングについて
DBMS_PIPE
を使用した永続メッセージングでは、1つ以上のデータベース・セッションが同じリージョン内またはリージョン間で、クラウド・オブジェクト・ストアに格納されているメッセージと通信できます。
DBMS_PIPE
の永続メッセージ:
-
非常に大きなメッセージを送信および取得できます。
-
多数のパイプメッセージの送信をサポートします。
-
1つのデータベース内、複数のデータベース間、および異なるリージョンのデータベース間でのメッセージの送受信をサポートします。
-
同じクラウド・オブジェクト・ストアの場所URIを使用して複数のパイプをサポートします。
永続メッセージング・パイプは、サポートされている任意のDBMS_PIPE
タイプで作成できます。
- 暗黙的パイプ:
DBMS_PIPE.SEND_MESSAGE
関数を使用して不明なパイプ名でメッセージを送信すると、自動的に作成されます。 - 明示的パイプ:ユーザー指定のパイプ名で
DBMS_PIPE.CREATE_PIPE
関数を使用して作成されます。 - パブリック・パイプ:
DBMS_PIPE
パッケージに対するEXECUTE
権限を持つすべてのユーザーがアクセスできます。 - プライベート・パイプ:パイプ作成者と同じユーザーを持つセッションからアクセスできます。
Oracleでは、永続メッセージングでメッセージを送信または受信する前に、明示的なパイプを作成することをお薦めします。
DBMS_PIPE.CREATE_PIPE
を使用して明示的なパイプを作成すると、(private
パラメータを設定して)パブリックまたはプライベートのいずれかのアクセス権限でパイプが作成されます。
次に、永続メッセージングを使用するDBMS_PIPE
の一般的なワークフローを示します。
DBMS_PIPE
を使用する既存のアプリケーションは、最小限の変更で操作を続行できます。DBMS_PIPE
を使用する既存のアプリケーションは、ログオン・トリガーを使用するか、他の初期化ルーチンを使用して、資格証明オブジェクトおよび場所URIで構成できます。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を使用するAutonomous Databaseインスタンスと、WE8MSWIN1252を使用する別のインスタンスがある場合、これら2つのデータベース間でDBMS_PIPE
を含むメッセージを送信することはできません。この場合、これらの2つのデータベース間でDBMS_PIPE
のメッセージを送信しようとすると、エラーORA-12704
が発生します。
詳細については、Choose a Character Set for Autonomous Databaseを参照してください。
同じデータベースでの永続メッセージの取得
同じAutonomous Databaseインスタンス(メッセージが送信されたインスタンス)上の明示的なパイプから永続メッセージを取得するステップについて説明します。
Autonomous Databaseインスタンスでは、別のセッションからパイプに送信されたメッセージを受信できます。DBMS_PIPE
プロシージャは、実行者権限プロシージャであり、現在起動されているユーザーとして実行されます。
プライベートパイプは、パイプを作成する現在のユーザーが所有します。プライベートパイプには、パイプを作成したユーザーと同じユーザーしかアクセスできません。これは、インメモリー・メッセージを使用するパイプ、およびクラウド・オブジェクト・ストアに格納されているメッセージを含む永続メッセージを使用するパイプに適用されます。
パブリック・パイプには、DBMS_PIPE
に対する実行権限を持つデータベース・セッションからアクセスできます。これは、インメモリー・メッセージを使用するパイプ、およびクラウド・オブジェクト・ストアに格納されているメッセージを含む永続メッセージを使用するパイプに適用されます。
詳細は、SET_CREDENTIAL_NAMEプロシージャおよびSET_LOCATION_URIプロシージャを参照してください。
詳細は、RECEIVE_MESSAGEファンクションを参照してください。
別のデータベースでのパイプの作成による永続メッセージの取得
メッセージを送信したインスタンスとは異なるAutonomous Databaseインスタンス上の明示的なパイプを使用して、クラウド・オブジェクト・ストアに格納されている永続メッセージを取得するステップについて説明します。