Nachrichten mit Singleton Pipes cachen
Singleton Pipe ist eine Ergänzung zum Package DBMS_PIPE
, mit der Sie eine benutzerdefinierte Nachricht cachen und abrufen und die Nachricht über mehrere Datenbanksessions hinweg mit gleichzeitigen Lesevorgängen teilen können.
- Informationen zum Caching von Nachrichten mit Singleton-Pipes
Das PackageDBMS_PIPE
bietet erweiterte Funktionen in Autonomous Database zur Unterstützung von Singleton-Pipes. - Automatische Aktualisierung gecachter Nachrichten mit einer Cachefunktion
Mit dem PackageDBMS_PIPE
können Sie eine Singleton Pipe-Nachricht automatisch mit einer benutzerdefinierten Cachefunktion auffüllen. - Explizite Singleton-Pipe erstellen
Beschreibt die Schritte zum Erstellen einer Singleton-Pipe mit einem angegebenen Pipe-Namen (einer expliziten Singleton-Pipe). - Explizite Singleton-Pipe mit einer Cachefunktion erstellen
Beschreibt die Schritte zum Erstellen einer Singleton-Pipe mit einem angegebenen Pipe-Namen, einer expliziten Singleton-Pipe und zur Bereitstellung einer Cachefunktion. Mit einer Cache-Funktion können Sie die Nachricht automatisch in einer Singleton-Pipe auffüllen.
Übergeordnetes Thema: Nachrichten mit Singleton-Pipes cachen und Pipes für persistentes Messaging verwenden
Informationen zum Caching von Nachrichten mit Singleton-Pipes
Das Package DBMS_PIPE
verfügt über erweiterte Funktionen in Autonomous Database zur Unterstützung von Singleton Pipes.
Eine Singleton-Pipe in DBMS_PIPE
:
-
Bietet In-Memory-Caching von benutzerdefinierten Daten mit Singleton Pipe-Nachrichten.
-
Unterstützt die Möglichkeit, eine benutzerdefinierte Nachricht mit bis zu 32.767 Byte zu cachen und abzurufen.
-
Unterstützt die gemeinsame Verwendung einer gecachten Nachricht über mehrere Datenbanksessions hinweg mit gleichzeitigen Lesevorgängen. Dies bietet einen hohen Durchsatz und unterstützt gleichzeitige Lesevorgänge von Nachrichten über Datenbanksessions hinweg.
-
Unterstützt schreibgeschützte und schreibgeschützte Datenbanken.
-
Unterstützt verschiedene Methoden zur Cacheinvalidierung:
- Explizite Cacheinvalidierung durch Benutzer gesteuert.
- Cacheinvalidierung nach einem vom Benutzer angegebenen Zeitintervall (in Sekunden). Diese Invalidierungsmethode wird vom Nachrichtensender gesteuert, der den Parameter
shelflife
anstelle von Nachrichtenlesern verwendet. Dies vermeidet die häufigen Fallstricke aufgrund der falschen Verwendung von Cache durch Leser.
Über Standardrohre und Singleton Pipes
Mit dem DBMS_PIPE-Package können zwei oder mehr Datenbanksessions über In-Memory-Nachrichten kommunizieren. Die Pipe-Funktionalität umfasst mehrere Anwendungen wie externe Service-Schnittstelle, Debugging, unabhängige Transaktionen und Alerts.

Beschreibung der Abbildung database-pipe-messages-singleton-pipes.eps
Bei einer Singleton-Pipe kann es sich um einen der unterstützten DBMS_PIPE
-Typen handeln:
- 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 vom Benutzer angegebenen Pipe-Namen erstellt. - Öffentliche Pipe: Jeder Benutzer mit der Berechtigung
EXECUTE
für das PackageDBMS_PIPE
kann darauf zugreifen. - Private Pipe: Zugriff durch Sessions mit demselben Benutzer wie der Pipe-Ersteller möglich.
Singleton Pipes bieten die Möglichkeit, eine einzelne Nachricht im Speicher der Autonomous Database-Instanz zu cachen.
Im Folgenden wird der allgemeine Workflow für die Verwendung von Singleton-Pipes dargestellt.

Beschreibung der Abbildung singleton-pipe-workflow.eps
Singleton Pipe - Überblick und Funktionen
-
Singleton-Nachrichten
- Eine Singleton-Pipe kann eine Nachricht in der Pipe cachen, daher der Name "singleton".
- Die Nachricht in einer Singleton-Pipe kann aus mehreren Feldern mit einer Gesamtnachrichtengröße von 32.767 Byte bestehen.
DBMS_PIPE
unterstützt die Möglichkeit, mehrere Attribute mit der ProzedurDBMS_PIPE.PACK_MESSAGE
in einer Nachricht zu packen.- Bei einer öffentlichen Singleton-Pipe kann die Nachricht von jeder Datenbanksession mit Ausführungsberechtigung für das Package
DBMS_PIPE
empfangen werden. - Bei einer privaten Singleton-Pipe kann die Nachricht von Sitzungen mit demselben Benutzer wie der Ersteller der Singleton-Pipe empfangen werden.
- Hoher Nachrichtendurchsatz für Lesezugriffe
- Singleton Pipes cachen die Nachricht in der Pipe, bis sie invalidiert oder gelöscht wird. Datenbanksessions können gleichzeitig eine Nachricht aus der Singleton Pipe lesen.
- Der Empfang einer Nachricht von einer Singleton Pipe ist ein nicht blockierender Vorgang.
- Nachrichten-Caching
- Eine Nachricht wird in einer Singleton-Pipe mit
DBMS_PIPE.SEND_MESSAGE
gecacht. - Wenn in der Singleton-Pipe eine gecachte Nachricht vorhanden ist, überschreibt
DBMS_PIPE.SEND_MESSAGE
die vorherige Nachricht, um nur eine Nachricht in der Singleton-Pipe zu verwalten.
- Eine Nachricht wird in einer Singleton-Pipe mit
- Nachrichtenvalidierung
- Explizite Invalidierung: Löscht die Pipe mit der Prozedur
DBMS_PIPE.PURGE
oder indem die Nachricht mitDBMS_PIPE.SEND_MESSAGE
überschrieben wird. - Automatische Invalidierung: Eine Nachricht kann nach Ablauf der angegebenen
shelflife
-Zeit automatisch invalidiert werden.
- Explizite Invalidierung: Löscht die Pipe mit der Prozedur
- Kein Entfernen aus Datenbankspeicher
- Singleton Pipes werden nicht aus dem Oracle Database-Speicher entfernt.
- Eine explizite Singleton Pipe bleibt so lange im Datenbankspeicher gespeichert, bis sie mit
DBMS_PIPE.REMOVE_PIPE
entfernt wird oder bis die Datenbank neu gestartet wird. - Eine implizite Singleton-Pipe bleibt im Datenbankspeicher, bis eine gecachte Nachricht in der Pipe vorhanden ist.
Singleton-Pipe-Vorgänge
Vorgang | DBMS_PIPE Funktion oder Prozedur |
---|---|
Explizite Singleton-Pipe erstellen |
|
Nachricht in Singleton Pipe cachen |
|
Gecachte Nachricht von Singleton Pipe lesen |
|
Nachricht in Singleton Pipe löschen |
|
Explizite Singleton-Pipe entfernen |
Übergeordnetes Thema: Nachrichten mit Singleton-Pipes cachen
Automatische Aktualisierung gecachter Nachrichten mit einer Cache-Funktion
Mit dem Package DBMS_PIPE
können Sie eine Singleton-Pipe-Nachricht automatisch mit einer benutzerdefinierten Cachefunktion auffüllen.
Standardmäßig führt eine nachfolgende DBMS_PIPE.RECEIVE_MESSAGE
dazu, dass keine Nachricht empfangen wird, nachdem eine Nachricht mit einer expliziten oder impliziten Singleton Pipe invalidiert wurde. Um der Pipe eine neue Nachricht hinzuzufügen, muss die Nachricht durch Aufruf von DBMS_PIPE.SEND_MESSAGE
explizit im Cache gespeichert werden. Um diesen Fall zu vermeiden, in dem beim Lesen aus einer Singleton Pipe keine Nachricht verfügbar ist, können Sie eine Cachefunktion definieren. Wenn eine Cache-Funktion definiert ist, wird die Cache-Funktion automatisch aufgerufen, wenn Sie in den folgenden Szenarios eine Meldung erhalten:
- Wenn die Singleton Pipe leer ist.
- Wenn die Nachricht in einer Singleton-Pipe aufgrund der verstrichenen
shelflife
-Zeit ungültig ist.
Um eine Cachefunktion zu verwenden, definieren Sie die Cachefunktion, und nehmen Sie den Parameter cache_func
mit DBMS_PIPE.RECEIVE_MESSAGE
auf. Eine benutzerdefinierte Cachefunktion bietet Folgendes:
- Die Cachefunktion kann beim Lesen einer Nachricht aus einer Singleton-Pipe mit
DBMS_PIPE.RECEIVE_MESSAGE
angegeben werden. - Wenn keine Nachricht in der Singleton-Pipe vorhanden ist, ruft
DBMS_PIPE.RECEIVE_MESSAGE
die Cachefunktion auf. - Wenn die
shelflife
-Zeit der Nachricht abgelaufen ist, füllt die Datenbank automatisch eine neue Nachricht in der Singleton-Pipe auf.
Die Verwendung einer Cache-Funktion vereinfacht die Arbeit mit Singleton Pipes. Sie müssen keine Fehlerfälle verarbeiten, um eine Nachricht von einer leeren Pipe zu empfangen. Darüber hinaus stellt eine Cachefunktion sicher, dass beim Lesen von Nachrichten aus einer Singleton-Pipe kein Cache-Miss vorhanden ist, was eine maximale Verwendung der gecachten Nachricht ermöglicht.

Beschreibung der Abbildung automatisch-cache-refresh-cache-function.eps
Wenn Sie eine Cache-Funktion definieren, muss der Funktionsname mit dem Eigentümerschema vollqualifiziert sein:
OWNER.FUNCTION_NAME
OWNER.PACKAGE.FUNCTION_NAME
Definieren Sie eine Cache-Funktion mit der folgenden Signatur:
CREATE OR REPLACE FUNCTION cache_function_name(
pipename IN VARCHAR2
) RETURN INTEGER;
Typische Vorgänge innerhalb einer Cache-Funktion sind:
- Erstellen Sie mit
DBMS_PIPE.CREATE_PIPE
eine Singleton Pipe für eine explizite Pipe. - Erstellen Sie eine Nachricht, die in der Singleton-Pipe gecacht werden soll.
- Senden Sie die Nachricht an die in der Cachefunktion angegebene Pipe, und geben Sie optional eine
shelflife
für die implizite Nachricht an.
Um eine Cachefunktion zu verwenden, muss der aktuelle Sessionbenutzer, der DBMS_PIPE.RECEIVE_MESSAGE
aufruft, über die erforderlichen Berechtigungen zum Ausführen der Cachefunktion verfügen.
Weitere Informationen zum Definieren einer Cachefunktion finden Sie unter Funktion RECEIVE_MESSAGE.
Übergeordnetes Thema: Nachrichten mit Singleton-Pipes cachen
Explizite Singleton-Pipe erstellen
Beschreibt die Schritte zum Erstellen einer Singleton Pipe mit einem angegebenen Pipe-Namen (ein explizites Singleton Pipe).
Zuerst erstellen Sie in diesem Beispiel die Helper-Funktion receive_message
, um DBMS_PIPE.RECEIVE_MESSAGE
wiederholt aufzurufen. Auf diese Weise können Sie die Singleton-Pipe-Funktionalität testen.
CREATE OR REPLACE FUNCTION msg_types AS
TYPE t_rcv_row IS RECORD (c1 VARCHAR2(32767), c2 NUMBER);
TYPE t_rcv_tab IS TABLE OF t_rcv_row;
END;
CREATE OR REPLACE FUNCTION receive_message(
pipename IN VARCHAR2,
rcv_count IN NUMBER DEFAULT 1,
cache_func IN VARCHAR2 DEFAULT NULL)
RETURN msg_types.t_rcv_tab pipelined
AS
l_msg VARCHAR2(32767);
l_status NUMBER;
BEGIN
FOR i IN 1..rcv_count LOOP
l_status := DBMS_PIPE.RECEIVE_MESSAGE(
pipename => pipename,
cache_func => cache_func,
timeout => 1);
IF l_status != 0 THEN
raise_application_error(-20000,
'Message not received for attempt: ' || to_char(i) || ' status: ' ||
l_status);
END IF;
DBMS_PIPE.UNPACK_MESSAGE(l_msg);
pipe row(msg_types.t_rcv_row(l_msg));
END LOOP;
RETURN;
END;
Übergeordnetes Thema: Nachrichten mit Singleton-Pipes cachen
Explizite Singleton-Pipe mit einer Cachefunktion erstellen
Beschreibt die Schritte zum Erstellen einer Singleton Pipe mit einem angegebenen Pipe-Namen und einer expliziten Singleton Pipe und zum Bereitstellen einer Cachefunktion. Mit einer Cache-Funktion können Sie die Nachricht automatisch in einer Singleton-Pipe auffüllen.
Übergeordnetes Thema: Nachrichten mit Singleton-Pipes cachen