クラウド・オブジェクト・ストアに格納されたメッセージで永続メッセージを使用
DBMS_PIPEパッケージには、メッセージがクラウド・オブジェクト・ストアに格納される永続メッセージをサポートするために、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ファンクション」を参照してください。