Persistentes Messaging mit Nachrichten verwenden, die im Cloud-Objektspeicher gespeichert sind
Das Package DBMS_PIPE
verfügt über erweiterte Funktionen in Autonomous Database, um persistentes Messaging zu unterstützen, bei dem Nachrichten im Cloud-Objektspeicher gespeichert werden.
Informationen zum persistenten Messaging mit DBMS_PIPE
DBMS_PIPE
können eine oder mehrere Datenbanksessions in derselben Region oder regionsübergreifend mit Nachrichten kommunizieren, die im Cloud-Objektspeicher gespeichert sind.
Persistente Nachrichten in DBMS_PIPE
:
-
Erlauben Sie, sehr große Nachrichten zu senden und abzurufen.
-
Unterstützen Sie das Senden einer großen Anzahl von Pipe-Nachrichten.
-
Unterstützung für das Senden und Empfangen von Nachrichten in einer einzigen Datenbank, über mehrere Datenbanken und über Datenbanken in verschiedenen Regionen hinweg.
-
Unterstützen Sie mehrere Pipes mit derselben Speicherort-URI des Cloud-Objektspeichers.
Persistente Messaging Pipes können in einem der unterstützten DBMS_PIPE
-Typen erstellt werden:
- Implizite Pipe: Wird automatisch erstellt, wenn eine Nachricht mit einem unbekannten Pipe-Namen mit der Funktion
DBMS_PIPE.SEND_MESSAGE
gesendet wird. - Explizite Pipe: Wird mit der Funktion
DBMS_PIPE.CREATE_PIPE
mit einem benutzerdefinierten Pipe-Namen erstellt. - Öffentliche Pipe: Zugriff für alle Benutzer mit der Berechtigung
EXECUTE
für das PackageDBMS_PIPE
. - Private Pipe: Zugriff durch Sessions mit demselben Benutzer wie der Pipe-Ersteller.
Hinweis:
Oracle empfiehlt, eine explizite Pipe zu erstellen, bevor Sie Nachrichten mit persistentem Messaging senden oder empfangen. Durch das Erstellen einer expliziten Pipe mitDBMS_PIPE.CREATE_PIPE
wird sichergestellt, dass die Pipe mit den gewünschten Zugriffsberechtigungen (öffentlich oder privat) erstellt wird (durch Festlegen des Parameters private
).
Im Folgenden wird der allgemeine Workflow für DBMS_PIPE
mit persistentem Messaging dargestellt:

Beschreibung der Abbildung database-pipe-persistent-messaging.eps
Vorhandene Anwendungen, die DBMS_PIPE
verwenden, können weiterhin mit minimalen Änderungen arbeiten. Sie können vorhandene Anwendungen, die DBMS_PIPE
verwenden, mit einem Zugangsdatenobjekt und einer Speicherort-URI konfigurieren, indem Sie einen Anmelde-Trigger oder eine andere Initialisierungsroutine verwenden. Nachdem Sie die Zugangsdaten und die Speicherort-URI DBMS_PIPE
festgelegt haben, sind keine weiteren Änderungen erforderlich, um persistentes Messaging zu verwenden. Bei jeder nachfolgenden Verwendung der Pipe werden die Nachrichten im Cloud-Objektspeicher anstatt im Datenbankspeicher gespeichert. Auf diese Weise können Sie die Speichermethode für Nachrichten von In-Memory in persistenten Cloud-Objektspeicher mit minimalen Änderungen ändern.
Persistent Messaging – Überblick und Features
Features von DBMS_PIPE
mit persistentem Messaging:
-
Nachrichten können über mehrere Autonomous Database-Instanzen in derselben Region oder regionsübergreifend gesendet und abgerufen werden.
-
Persistente Nachrichten werden garantiert entweder von genau einem Prozess geschrieben oder gelesen. Dadurch wird eine Inkonsistenz des Nachrichteninhalts aufgrund gleichzeitiger Lese- und Schreibvorgänge verhindert.
DBMS_PIPE
lässt nur einen Vorgang zu, bei dem das Senden einer Nachricht oder eine empfangende Nachricht zu einem bestimmten Zeitpunkt aktiv ist. Diese Vorgänge werden durch einen Sperrmechanismus geschützt. Wenn ein Vorgang jedoch aufgrund eines laufenden Vorgangs nicht möglich ist, wiederholt sich der Prozess in regelmäßigen Abständen, bis der Werttimeout
erreicht ist. -
DBMS_PIPE
verwendetDBMS_CLOUD
, um auf den Cloud-Objektspeicher zuzugreifen. Nachrichten können in einem der unterstützten Cloud-Objektspeicher gespeichert werden. Weitere Informationen finden Sie unter URI-Formate für Cloud-Objektspeicher. DBMS_PIPE
verwendetDBMS_CLOUD
, um auf den Cloud-Objektspeicher zuzugreifen, und alle unterstützten Zugangsdatentypen sind verfügbar:DBMS_CLOUD.CREATE_CREDENTIAL
: Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.
DBMS_PIPE Berechtigungen - Autorisierung und Sicherheit
Die DBMS_PIPE
-Prozeduren werden mit den Rechten des ausführenden Benutzers ausgeführt. Private Pipes sind Eigentum des aktuellen Benutzers, und eine private Pipe, die von einem Benutzer erstellt wird, kann nur von demselben Benutzer verwendet werden. Dies gilt sowohl für In-Memory-Pipes als auch für persistente Messaging-Pipes, in denen Nachrichten im Cloud-Objektspeicher gespeichert werden. Senden und Empfangen von Nachrichten werden im Schema des ausführenden Benutzers ausgeführt.
Mit privaten Pipes, in denen Nachrichten im Cloud-Objektspeicher gespeichert werden, ist ein Zugangsdatenobjekt für die Authentifizierung mit dem Cloud-Objektspeicher erforderlich, der mit dem Parameter location_uri
identifiziert wird. Der aufrufende Benutzer muss über die Berechtigung EXECUTE
für das Zugangsdatenobjekt verfügen, das mit dem Parameter credential_name
angegeben wird, der für den Zugriff auf den Objektspeicher verwendet wird.
Um eine öffentliche Pipe verwenden zu können, muss der Benutzer, die Datenbanksession, über die Ausführungsberechtigung für DBMS_PIPE
verfügen. Bei einer öffentlichen Pipe, die persistentes Messaging verwendet und Nachrichten im Cloud-Objektspeicher speichert, muss der Benutzer, die Datenbanksession, über die Ausführungsberechtigung für DBMS_CLOUD
und die Ausführungsberechtigung für das Zugangsdatenobjekt verfügen (oder Sie können ein Zugangsdatenobjekt erstellen, das auf die Speicherort-URI zugreifen kann, in der die Nachricht enthalten ist).
DBMS_PIPE Einschränkung
Das Package DBMS_PIPE
unterstützt nicht das Senden von Nachrichten zwischen Datenbanken, die unterschiedliche Zeichensätze verwenden. Beispiel: Wenn Sie eine Autonomous Database-Instanz verwenden, die AL32UTF8 verwendet, und eine andere Instanz, die WE8MSWIN1252 verwendet, können Sie keine Nachrichten mit DBMS_PIPE
zwischen diesen beiden Datenbanken senden. In diesem Fall löst das System den Fehler ORA-12704
aus, wenn Sie versuchen, Nachrichten mit DBMS_PIPE
zwischen diesen beiden Datenbanken zu senden.
Weitere Informationen finden Sie unter Zeichensatzauswahl für Autonomous Database.
Explizite persistente Pipe erstellen und Nachricht senden
Beschreibt die Schritte zum Erstellen einer persistenten Pipe mit einem angegebenen Pipe-Namen (Explicit Pipe).
Persistente Nachricht in derselben Datenbank abrufen
Beschreibt die Schritte zum Abrufen einer persistenten Nachricht aus einer expliziten Pipe in derselben Autonomous Database-Instanz (der Instanz, in der die Nachricht gesendet wurde).
Auf einer Autonomous Database-Instanz können Sie Nachrichten empfangen, die von einer anderen Session an eine Pipe gesendet wurden. Die DBMS_PIPE
-Prozeduren sind Prozeduren für die Rechte des ausführenden Benutzers und werden als der aktuell aufgerufene Benutzer ausgeführt.
Private Pipes gehören dem aktuellen Benutzer, der die Pipe erstellt. Auf private Pipes kann nur derselbe Benutzer zugreifen, der die Pipe erstellt hat. Dies gilt für Pipes, die In-Memory-Nachrichten verwenden, und für Pipes, die persistentes Messaging mit Nachrichten verwenden, die im Cloud-Objektspeicher gespeichert sind.
Auf öffentliche Pipes kann von jeder Datenbanksession zugegriffen werden, die über Ausführungsberechtigungen für DBMS_PIPE
verfügt. Dies gilt für Pipes, die In-Memory-Nachrichten verwenden, und für Pipes, die persistentes Messaging mit Nachrichten verwenden, die im Cloud-Objektspeicher gespeichert sind.
Weitere Informationen finden Sie unter Prozedur SET_CREDENTIAL_NAME und Funktion GET_LOCATION_URI.
Weitere Informationen finden Sie unter Funktion RECEIVE_MESSAGE.
Persistente Nachrichten durch Erstellen einer Pipe in einer anderen Datenbank abrufen
Beschreibt die Schritte zum Abrufen einer persistenten Nachricht, die im Cloud-Objektspeicher mit einer expliziten Pipe in einer Autonomous Database-Instanz gespeichert ist und sich von der Instanz unterscheidet, die die Nachricht gesendet hat.
Persistente Pipe entfernen
Beschreibt die Schritte zum Entfernen einer persistenten Pipe.
Persistente Pipes senden und empfangen Nachrichten, indem sie Nachrichten im Cloud-Objektspeicher speichern. Verwenden Sie DBMS_PIPE.REMOVE_PIPE
, um eine persistente Pipe auf einer Autonomous Database-Instanz zu entfernen.