DBMS_PIPE-Package
DBMS_PIPE
können zwei oder mehr Sessions in derselben Instanz kommunizieren.
Oracle Autonomous Database unterstützt die in Oracle Database 19c verfügbare DBMS_PIPE
-Kernfunktionalität sowie Erweiterungen.
Weitere Informationen zur Kernfunktion von DBMS_PIPE
in Oracle Database finden Sie unter DBMS_PIPE.
- DBMS_PIPE Überblick über Singleton-Pipes
Pipe-Funktionen haben mehrere potenzielle Anwendungen: externe Serviceschnittstelle, Debugging, unabhängige Transaktionen und Alerts. - Zusammenfassung der DBMS_PIPE-Unterprogramme für Singleton-Pipes
In dieser Tabelle werden dieDBMS_PIPE
-Unterprogramme aufgeführt und kurz beschrieben. - DBMS_PIPE Überblick über persistente Messaging-Pipes
Pipe-Funktionen haben mehrere potenzielle Anwendungen: externe Service-Schnittstelle, Debugging, unabhängige Transaktionen und Alerts. - Zusammenfassung der DBMS_PIPE-Unterprogramme für persistente Nachrichtenübermittlung
In dieser Tabelle werden dieDBMS_PIPE
-Unterprogramme aufgeführt und kurz beschrieben.
Übergeordnetes Thema: Von Autonomous Database bereitgestellte Paketreferenz
DBMS_PIPE Überblick über Singleton Pipes
Die Pipe-Funktionalität hat mehrere potenzielle Anwendungen: externe Serviceschnittstelle, Debugging, unabhängige Transaktionen und Alerts.
In Autonomous Database verfügt das Package DBMS_PIPE über erweiterte Funktionen zur Unterstützung von Singleton-Pipes.
Singleton-Pipe-Funktionen in DBMS_PIPE
bieten Folgendes:
-
Möglichkeit, eine benutzerdefinierte Nachricht mit bis zu 32.767 Byte im Oracle-Datenbankspeicher zu cachen und abzurufen. Die Nachrichtengröße von maximal 32.767 Byte gilt für alle Pipes, einschließlich Singleton Pipes. Frühere Versionen von
DBMS_PIPE
hatten eine kleinere maximale Nachrichtengröße. -
Teilen Sie die gecachte Nachricht über mehrere Datenbanksessions hinweg mit gleichzeitigen Lesevorgängen.
-
Methoden für die Cache-Invalidierung:
- Explizite Cacheinvalidierung durch Benutzer gesteuert.
- Cacheinvalidierung nach einem vom Benutzer angegebenen Parameter (
shelflife
) Zeitintervall (in Sekunden).
-
Deklarative und benutzerfreundliche PL/SQL-APIs für das Caching.
-
Unterstützt sowohl schreibgeschützte als auch schreibgeschützte Datenbanken.
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. - Public 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.
Übergeordnetes Thema: Paket DBMS_PIPE
Zusammenfassung der DBMS_PIPE-Unterprogramme für Singleton Pipes
In dieser Tabelle werden die DBMS_PIPE
-Unterprogramme aufgeführt und kurz beschrieben.
Tabelle 6-1: Unterprogramme des Packages DBMS_PIPE
Unterprogramm | Beschreibung |
---|---|
Erstellt ein Rohr (für private Rohre erforderlich) |
|
Gibt den Datentyp des nächsten Elements im Puffer zurück |
|
Erstellt Meldung in lokalem Puffer |
|
Löscht den Inhalt der benannten Pipe |
|
Kopiert Nachricht aus benannter Pipe in lokalen Puffer |
|
Löscht den Inhalt des lokalen Puffers |
|
Entfernt die benannte Pipe |
|
Sendet Nachricht an benannte Pipe: Dadurch wird implizit eine öffentliche Pipe erstellt, wenn die benannte Pipe nicht vorhanden ist |
|
Gibt einen eindeutigen Sessionnamen zurück |
|
Greift auf nächstes Element im Puffer zu |
- Funktion CREATE_PIPE
Diese Funktion erstellt explizit eine öffentliche oder private Pipe. Wenn das Flagprivate
TRUE
lautet, wird der Pipe-Ersteller als Eigentümer der privaten Pipe zugewiesen. - Funktion RECEIVE_MESSAGE
Diese Funktion kopiert die Nachricht in den lokalen Nachrichtenpuffer. - Funktion SEND_MESSAGE
Diese Funktion sendet eine Nachricht an die benannte Pipe.
Übergeordnetes Thema: Paket DBMS_PIPE
Funktion CREATE_PIPE
Diese Funktion erstellt explizit eine öffentliche oder private Pipe. Wenn das Flag private
TRUE
lautet, wird der Pipe-Ersteller als Eigentümer der privaten Pipe zugewiesen.
Explizit erstellte Pipes können nur entfernt werden, indem Sie REMOVE_PIPE
aufrufen oder die Instanz herunterfahren.
Um eine Singleton-Pipe zu erstellen, setzen Sie den Parameter singleton
auf TRUE
. Die folgenden Argumente gelten für Singleton Pipes:
-
singleton
: Gibt an, dass die Pipe als Singleton Pipe erstellt werden soll (Standardwert:FALSE
). -
shelflife
: Geben Sie optional einen Shelflife-Ablauf (in Sekunden) der gecachten Nachricht in der Singleton-Pipe an. Sie kann zur impliziten Invalidierung von Nachrichten in Singleton Pipe verwendet werden.Die Meldung
shelflife
in der Singleton-Pipe kann auch angegeben werden, wenn Sie eine Nachrichtennachricht senden (siehe Funktion SEND_MESSAGE).
Syntax
DBMS_PIPE.CREATE_PIPE ( pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 66536, private IN BOOLEAN DEFAULT TRUE, singleton IN BOOLEAN DEFAULT FALSE, shelflife IN INTEGER DEFAULT 0) RETURN INTEGER;
Parameter
Tabelle 6-2: CREATE_PIPE-Funktionsparameter
Parameter | Beschreibung |
---|---|
|
Name der Pipe, die Sie erstellen. Sie müssen diesen Namen verwenden, wenn Sie Achtung: Verwenden Sie keine Pipe-Namen, die mit |
|
Die maximal zulässige Größe für die Pipe in Byte. Die Gesamtgröße aller Nachrichten in der Pipe darf diesen Betrag nicht überschreiten. Die Nachricht wird blockiert, wenn sie diesen Höchstwert überschreitet. Die Standard- Die Der Standardwert |
|
Verwendet den Standardwert Öffentliche Pipes können implizit erstellt werden, wenn Sie |
|
Verwenden Sie Standardwert: |
|
Ablaufzeit in Sekunden einer in Singleton Pipe gecachten Nachricht. Nachdem die angegebene Der Standardwert ist |
Werte zurückgeben
Tabelle 6-3: Rückgabewerte der Funktion CREATE_PIPE
Zurückgehen | Beschreibung |
---|---|
|
erfolgreich. Wenn die Pipe bereits vorhanden ist und der Benutzer, der versucht, sie zu erstellen, zur Verwendung autorisiert ist, gibt Oracle 0 zurück, was auf Erfolg hinweist, und alle Daten, die sich bereits in der Pipe befinden, bleiben erhalten. |
|
Vorhandene Pipe konnte nicht in Singleton-Pipe konvertiert werden.
|
|
Für den Parameter |
|
Fehler aufgrund eines Namenskonflikts. Wenn eine Pipe mit demselben Namen vorhanden ist und von einem anderen Benutzer erstellt wurde, gibt Oracle den Fehler |
Ausnahmen
Tabelle 6-4: CREATE_PIPE Funktionsausnahme
Ausnahme: | Beschreibung |
---|---|
|
Berechtigungsfehler: Pipe mit demselben Namen ist bereits vorhanden, und Sie dürfen sie nicht verwenden. |
Beispiel
Erstellen Sie eine Singleton Pipe mit einem Shelflife von 1 Stunde.
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(pipename => 'MY_PIPE1',
private => TRUE,
singleton => TRUE,
shelflife => 3600);
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für Singleton-Pipes
Funktion RECEIVE_MESSAGE
Diese Funktion kopiert die Nachricht in den lokalen Nachrichtenpuffer.
Syntax
DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait, cache_func IN VARCHAR2 DEFAULT NULL) RETURN INTEGER;
Parameter
Tabelle 6-5: RECEIVE_MESSAGE-Funktionsparameter
Parameter | Beschreibung |
---|---|
|
Name der Pipe, auf der Sie eine Nachricht empfangen möchten. Namen, die mit |
|
Wartezeit für eine Nachricht in Sekunden. Mit einem Timeout von 0 können Sie ohne Blockierung lesen. Der Timeout enthält nicht die Zeit, die in der Ausführungscachefunktion verbracht wurde, die im Parameter Standardwert: Die Konstante |
|
Cachefunktionsname zum automatischen Cachen einer Nachricht in einer Singleton-Pipe. Der Name der Funktion muss mit dem Eigentümerschema vollqualifiziert sein:
Standardwert: |
Werte zurückgeben
Tabelle 6-6: Rückgabewerte der Funktion RECEIVE_MESSAGE
Zurückgehen | Beschreibung |
---|---|
|
Erfolgreich |
|
Timeout. Wenn die Pipe implizit erstellt wurde und leer ist, wird sie entfernt. |
|
Datensatz in der Pipe ist zu groß für den Puffer. |
|
Interrupt aufgetreten. |
8 |
Cachefunktion kann nur bei Verwendung einer Singleton Pipe angegeben werden. |
|
Der Benutzer hat keine ausreichenden Berechtigungen zum Lesen aus der Pipe. |
Hinweise zur Verwendung
Um eine Nachricht von einer Pipe zu empfangen, rufen Sie zuerst RECEIVE_MESSAGE
auf. Wenn Sie eine Nachricht erhalten, wird sie aus der Pipe entfernt. Daher kann eine Nachricht nur einmal empfangen werden. Bei implizit erstellten Rohren wird das Rohr entfernt, nachdem der letzte Datensatz aus dem Rohr entfernt wurde.
Wenn die Pipe, die Sie beim Aufrufen von RECEIVE_MESSAGE
angeben, noch nicht vorhanden ist, erstellt Oracle die Pipe implizit und wartet auf den Empfang der Nachricht. Wenn die Nachricht nicht innerhalb eines bestimmten Timeoutintervalls ankommt, wird der Aufruf zurückgegeben und die Pipe entfernt.
Nachdem Sie die Nachricht erhalten haben, müssen Sie mindestens einen Aufruf an UNPACK_MESSAGE
ausführen, um auf die einzelnen Elemente in der Nachricht zuzugreifen. Die Prozedur UNPACK_MESSAGE
ist überladen, um Elemente vom Typ DATE
, NUMBER
, VARCHAR2
zu entpacken. Es gibt zwei zusätzliche Prozeduren zum Entpacken von RAW
- und ROWID
-Elementen. Wenn Sie den Typ der Daten nicht kennen, die Sie entpacken möchten, rufen Sie NEXT_ITEM_TYPE
auf, um den Typ des nächsten Elements im Puffer zu bestimmen.
Cachefunktionsparameter
Singleton Pipes unterstützen die Cachefunktion, um eine Nachricht in der Pipe automatisch im Falle der folgenden beiden Szenarios zu cachen:
- Singleton Pipe ist leer.
- Nachricht in Singleton-Pipe ist aufgrund der verstrichenen
shelflife
-Zeit ungültig.
Der Name der Funktion muss mit dem Eigentümerschema vollqualifiziert sein:
OWNER.FUNCTION_NAME
OWNER.PACKAGE.FUNCTION_NAME
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.
Cache-Funktionssyntax
CREATE OR REPLACE FUNCTION cache_function_name (
pipename IN VARCHAR2
) RETURN INTEGER;
Parameter | Datentyp | Beschreibung |
---|---|---|
|
VARCHAR2 |
Name der Singleton-Pipe. |
Zurückgehen | Beschreibung |
---|---|
0 | Erfolgreich |
Nicht null | Fehlerwert zurückgegeben von DBMS_PIPE.RECEIVE_MESSAGE |
Definieren Sie eine Cachefunktion, um Verkapselung und Abstraktion der Komplexität aus den Lesersessions von Singleton Pipe bereitzustellen. 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 die Nachricht, die in der Singleton-Pipe gecacht werden soll.
- Nachricht an Singleton-Pipe senden, optional
shelflife
für die implizite Nachricht angeben.
Ausnahmen
Tabelle 6-7: RECEIVE_MESSAGE Funktionsausnahmen
Ausnahme: | Beschreibung |
---|---|
|
Berechtigungsfehler. Unzureichende Berechtigung zum Entfernen des Datensatzes aus der Pipe. Die Pfeife gehört jemand anderem. |
Beispiel
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.receive_message(pipename => 'MY_PIPE1',
timeout => 1,
cache_func => 'MY_USER.MY_CACHE_FUNC');
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für Singleton-Pipes
Funktion SEND_MESSAGE
Diese Funktion sendet eine Nachricht an die benannte Pipe.
Die Nachricht ist im lokalen Nachrichtenpuffer enthalten, der mit Aufrufen an PACK_MESSAGE
gefüllt wurde. Sie können eine Pipe explizit mit CREATE_PIPE
erstellen. Andernfalls wird sie implizit erstellt.
Um eine implizite Singleton-Pipe zu erstellen, setzen Sie den Parameter singleton
auf TRUE
. Die folgenden Argumente gelten für Singleton Pipes:
singleton
: Gibt an, dass die Pipe als Singleton Pipe erstellt werden soll (Standardwert:FALSE
).shelflife
: Optional können Sie einen Shelflife-Ablauf der gecachten Nachricht in der Singleton-Pipe angeben. Sie kann zur impliziten Invalidierung von Nachrichten in Singleton Pipe verwendet werden.Dieses Argument gilt sowohl für implizite als auch explizite Singleton-Pipes. Ein in der Funktion SEND_MESSAGE angegebener
shelflife
-Wert überschreibt den für die explizite Singleton-Pipe in der Funktion CREATE_PIPE angegebenenshelflife
-Wert und ist der Standardwert für alle neuen Nachrichten, die in der Singleton-Pipe gecacht werden.
Syntax
DBMS_PIPE.SEND_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, maxpipesize IN INTEGER DEFAULT 65536, singleton IN BOOLEAN DEFAULT FALSE, shelflife IN INTEGER DEFAULT 0) RETURN INTEGER;
Parameter
Tabelle 6-8: Funktionsparameter SEND_MESSAGE
Parameter | Beschreibung |
---|---|
|
Name der Pipe, auf der Sie die Nachricht platzieren möchten. Wenn Sie eine explizite Pipe verwenden, ist dies der Name, den Sie beim Aufrufen von Achtung: Verwenden Sie keine Pipe-Namen, die mit " |
|
Wartezeit beim Versuch, eine Nachricht in einer Pipe zu platzieren, in Sekunden. Der Standardwert ist die Konstante |
|
Maximal zulässige Größe für die Pipe, in Byte. Die Gesamtgröße aller Nachrichten in der Pipe darf diesen Betrag nicht überschreiten. Die Nachricht wird blockiert, wenn sie diesen Höchstwert überschreitet. Der Standardwert beträgt 65536 Byte. Die Wenn Sie Der Standardwert |
|
Verwenden Sie Standardwert: |
|
Ablaufzeit in Sekunden einer in Singleton Pipe gecachten Nachricht. Nachdem die angegebene Der Standardwert ist |
Werte zurückgeben
Tabelle 6-9: Rückgabewerte der Funktion SEND_MESSAGE
Zurückgehen | Beschreibung |
---|---|
|
Erfolgreich. Wenn die Pipe bereits vorhanden ist und der Benutzer, der versucht, sie zu erstellen, zur Verwendung autorisiert ist, gibt Oracle 0 zurück, was auf Erfolg hinweist, und alle Daten, die sich bereits in der Pipe befinden, bleiben erhalten. Wenn ein als |
|
Timeout. Bei dieser Prozedur kann eine Zeitüberschreitung auftreten, da die Pipe nicht gesperrt werden kann oder weil die Pipe zu voll für die Verwendung bleibt. Wenn die Pipe implizit erstellt wurde und leer ist, wird sie entfernt. |
|
Interrupt aufgetreten. Wenn die Pipe implizit erstellt wurde und leer ist, wird sie entfernt. |
|
Vorhandene Pipe konnte nicht in Singleton-Pipe konvertiert werden.
|
|
Für den Parameter |
|
Berechtigungen reichen nicht aus. Wenn eine Pipe mit demselben Namen vorhanden ist und von einem anderen Benutzer erstellt wurde, gibt Oracle den Fehler |
Ausnahmen
Tabelle 6-10: SEND_MESSAGE Funktionsausnahme
Ausnahme: | Beschreibung |
---|---|
|
Berechtigungsfehler. Unzureichende Berechtigung zum Schreiben in die Pipe. Die Pfeife ist privat und gehört jemand anderem. |
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für Singleton-Pipes
DBMS_PIPE Überblick über persistente Messaging-Pipes
Die Pipe-Funktionalität hat mehrere potenzielle Anwendungen: externe Serviceschnittstelle, Debugging, unabhängige Transaktionen und Alerts.
In Autonomous Database verfügt das Package DBMS_PIPE über erweiterte Funktionen zur Unterstützung persistenter Messaging-Pipes.
Persistente Nachrichten in DBMS_PIPE
:
-
Unterstützen Sie die Möglichkeit, sehr große Nachrichten zu senden und abzurufen.
-
Unterstützt eine große Anzahl von Pipe-Nachrichten.
-
Unterstützen Sie die gemeinsame Nutzung von Nachrichten innerhalb einer einzelnen Datenbank, über mehrere Datenbanken hinweg und über Datenbanken in verschiedenen Regionen hinweg.
-
Unterstützen Sie mehrere Pipes mit derselben Cloud-Objektspeicher-URI.
Mit der persistenten Messagingfunktion können zwei oder mehr Datenbanksessions mit Nachrichten kommunizieren, die im Cloud-Objektspeicher gespeichert sind. Mit dieser Funktionalität können Nachrichten in einer Pipe nur der aktuellen Datenbank oder mehreren Datenbanken in derselben Region oder über verschiedene Regionen hinweg zur Verfügung gestellt werden.
Bei einer persistenten Messaging 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.
- Implizite Pipe: Wird automatisch erstellt, wenn eine Nachricht mit einem unbekannten Pipe-Namen mit der Funktion
Wenn Sie Nachrichten über verschiedene Datenbanken hinweg mit persistenten Nachrichten senden und empfangen, empfiehlt Oracle, dass Sie
DBMS_PIPE.CREATE_PIPE
aufrufen, bevor Sie Nachrichten senden oder empfangen. Durch das Erstellen einer expliziten Pipe mit DBMS_PIPE.CREATE_PIPE
wird sichergestellt, dass eine Pipe mit den gewünschten Zugriffsberechtigungen erstellt wird, entweder öffentlich oder privat (indem der Parameter PRIVATE
auf FALSE
gesetzt oder der Standardwert TRUE
verwendet wird).
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 Zeichensatz für Autonomous Database auswählen.
Übergeordnetes Thema: Paket DBMS_PIPE
Zusammenfassung der DBMS_PIPE-Unterprogramme für Persistent Messaging
In dieser Tabelle werden die DBMS_PIPE
-Unterprogramme aufgeführt und kurz beschrieben.
Tabelle 6-11: Unterprogramme des Packages DBMS_PIPE
Unterprogramm | Beschreibung |
---|---|
Erstellt ein Rohr (für private Rohre erforderlich). |
|
Gibt den globalen Variablenwert |
|
Gibt den globalen Variablenwert |
|
Gibt den Datentyp des nächsten Elements im Puffer zurück. |
|
Erstellt Meldung im lokalen Puffer. |
|
Kopiert die Nachricht aus der benannten Pipe in den lokalen Puffer. |
|
Löscht den Inhalt des lokalen Puffers. |
|
Entfernt die benannte Pipe. |
|
Sendet eine Nachricht an eine benannte Pipe: Dadurch wird implizit eine öffentliche Pipe erstellt, wenn die benannte Pipe nicht vorhanden ist. |
|
Legt die Variable |
|
Legt die globale Variable |
|
Gibt einen eindeutigen Sessionnamen zurück. |
|
Greift im Puffer auf das nächste Element zu. |
- Funktion CREATE_PIPE
Diese Funktion erstellt explizit eine öffentliche oder private Pipe. Wenn das Flagprivate
TRUE
lautet, wird der Pipe-Ersteller als Eigentümer der privaten Pipe zugewiesen. - Funktion GET_CREDENTIAL_NAME
Diese Funktion gibt den globalen Variablenwertcredential_name
zur Verwendung zurück, wenn Nachrichten im Cloud-Objektspeicher gespeichert werden. - Funktion GET_LOCATION_URI
Diese Funktion gibt den globalen Variablenwertlocation_uri
zurück, der als Standardspeicherort-URI verwendet werden kann, wenn Pipe-Nachrichten im Cloud-Objektspeicher gespeichert werden. - Funktion RECEIVE_MESSAGE
Diese Funktion kopiert die Nachricht in den lokalen Nachrichtenpuffer. - Funktion SEND_MESSAGE
Diese Funktion sendet eine Nachricht an die benannte Pipe. - Prozedur SET_CREDENTIAL_NAME
Diese Prozedur legt die Variablecredential_name
fest, die als Standardzugangsdaten verwendet wird, wenn Pipe-Nachrichten im Cloud-Objektspeicher gespeichert werden. - Prozedur SET_LOCATION_URI
Diese Prozedur legt die globale Variablelocation_uri
fest.
Übergeordnetes Thema: Paket DBMS_PIPE
Funktion CREATE_PIPE
Diese Funktion erstellt explizit eine öffentliche oder private Pipe. Wenn das Flag private
TRUE
lautet, wird der Pipe-Ersteller als Eigentümer der privaten Pipe zugewiesen.
Explizit erstellte Pipes können nur entfernt werden, indem Sie REMOVE_PIPE
aufrufen oder die Instanz herunterfahren.
Syntax
DBMS_PIPE.CREATE_PIPE ( pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 66536, private IN BOOLEAN DEFAULT TRUE) RETURN INTEGER;
Parameter
Tabelle 6-12: Funktionsparameter CREATE_PIPE
Parameter | Beschreibung |
---|---|
|
Name der Pipe, die Sie erstellen. Sie müssen diesen Namen verwenden, wenn Sie Achtung: Verwenden Sie keine Pipe-Namen, die mit |
|
Die maximal zulässige Größe für die Pipe in Byte. Die Gesamtgröße aller Nachrichten in der Pipe darf diesen Betrag nicht überschreiten. Die Nachricht wird blockiert, wenn sie diesen Höchstwert überschreitet. Die Standard- Die Der Standardwert |
|
Verwendet den Standardwert Öffentliche Pipes können implizit erstellt werden, wenn Sie |
Werte zurückgeben
Tabelle 6-13: Rückgabewerte der Funktion CREATE_PIPE
Zurückgehen | Beschreibung |
---|---|
|
erfolgreich. Wenn die Pipe bereits vorhanden ist und der Benutzer, der versucht, sie zu erstellen, zur Verwendung autorisiert ist, gibt Oracle 0 zurück, was auf Erfolg hinweist, und alle Daten, die sich bereits in der Pipe befinden, bleiben erhalten. |
|
Fehler aufgrund eines Namenskonflikts. Wenn eine Pipe mit demselben Namen vorhanden ist und von einem anderen Benutzer erstellt wurde, gibt Oracle den Fehler |
Ausnahmen
Tabelle 6-14: CREATE_PIPE Funktionsausnahme
Ausnahme: | Beschreibung |
---|---|
|
Berechtigungsfehler: Pipe mit demselben Namen ist bereits vorhanden, und Sie dürfen sie nicht verwenden. |
Beispiel
Erstellen Sie eine explizite Private namens MY_PIPE1
.
DECLARE
l_status INTEGER;
BEGIN
l_status := DBMS_PIPE.create_pipe(
pipename => 'MY_PIPE1',
private => TRUE);
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging
Funktion GET_CREDENTIAL_NAME
Diese Funktion gibt den globalen Variablenwert credential_name
zur Verwendung zurück, wenn Nachrichten im Cloud-Objektspeicher gespeichert werden.
Syntax
DBMS_PIPE.GET_CREDENTIAL_NAME RETURN VARCHAR2;
Werte zurückgeben
Rückgabewert | Beschreibung |
---|---|
|
Der Name der Zugangsdaten für den Zugriff auf den Cloud-Objektspeicher. |
Beispiel
DECLARE
credential_name VARCHAR2(400)
BEGIN
credential_name := DBMS_PIPE.GET_CREDENTIAL_NAME;
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging
Funktion GET_LOCATION_URI
Diese Funktion gibt den globalen Variablenwert location_uri
zurück, der als Standardspeicherort-URI verwendet werden kann, wenn Pipe-Nachrichten im Cloud-Objektspeicher gespeichert werden.
Syntax
DBMS_PIPE.GET_LOCATION_URI RETURN VARCHAR2;
Rückgabewert
Rückgabewert | Beschreibung |
---|---|
location_uri |
Die Objekt-URI. |
Beispiel
DECLARE
location_uri VARCHAR2(400)
BEGIN
location_uri := DBMS_PIPE.GET_LOCATION_URI;
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging
Funktion RECEIVE_MESSAGE
Diese Funktion kopiert die Nachricht in den lokalen Nachrichtenpuffer.
Syntax
DBMS_PIPE.RECEIVE_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT maxwait, credential_name IN VARCHAR2 DEFAULT null, location_uri IN VARCHAR2) RETURN INTEGER;
Parameter
Tabelle 6-15: Funktionsparameter RECEIVE_MESSAGE
Parameter | Beschreibung |
---|---|
|
Name der Pipe, auf der Sie eine Nachricht empfangen möchten. Namen, die mit |
|
Wartezeit für eine Nachricht in Sekunden. Mit einem Timeout von 0 können Sie ohne Blockierung lesen. Der Timeout enthält nicht die Zeit, die für die Ausführung der Cachefunktion aufgewendet wurde, die mit dem Parameter Standardwert: Die Konstante |
|
Der Zugangsdatenname für den Cloud-Speicher zum Speichern von Nachrichten.
Sie können diesen Wert festlegen, bevor Sie Das Zugangsdatenobjekt muss vom Benutzer, der Der Wert |
|
Die Standort-URI für den Cloud-Speicher zum Speichern von Nachrichten. Die globale Variable Sie können diesen Wert festlegen, bevor Sie |
Werte zurückgeben
Tabelle 6-16: Rückgabewerte der Funktion RECEIVE_MESSAGE
Zurückgehen | Beschreibung |
---|---|
|
Erfolgreich |
|
Timeout. Wenn die Pipe implizit erstellt wurde und leer ist, wird sie entfernt. |
|
Datensatz in der Pipe ist zu groß für den Puffer. |
|
Interrupt aufgetreten. |
|
Der Benutzer hat keine ausreichenden Berechtigungen zum Lesen aus der Pipe. |
Hinweise zur Verwendung
-
Um eine Nachricht von einer Pipe zu empfangen, rufen Sie zuerst
RECEIVE_MESSAGE
auf. Wenn Sie eine Nachricht erhalten, wird sie aus der Pipe entfernt. Daher kann eine Nachricht nur einmal empfangen werden. Bei implizit erstellten Rohren wird das Rohr entfernt, nachdem der letzte Datensatz aus dem Rohr entfernt wurde. -
Wenn die Pipe, die Sie beim Aufrufen von
RECEIVE_MESSAGE
angeben, noch nicht vorhanden ist, erstellt Oracle die Pipe implizit und wartet auf den Empfang der Nachricht. Wenn die Nachricht nicht innerhalb eines bestimmten Timeoutintervalls ankommt, wird der Aufruf zurückgegeben und die Pipe entfernt. -
Nachdem Sie die Nachricht erhalten haben, müssen Sie mindestens einen Aufruf an
UNPACK_MESSAGE
ausführen, um auf die einzelnen Elemente in der Nachricht zuzugreifen. Die ProzedurUNPACK_MESSAGE
ist überladen, um Elemente vom TypDATE
,NUMBER
,VARCHAR2
zu entpacken. Es gibt zwei zusätzliche Prozeduren zum Entpacken vonRAW
- undROWID
-Elementen. Wenn Sie den Typ der Daten nicht kennen, die Sie entpacken möchten, rufen SieNEXT_ITEM_TYPE
auf, um den Typ des nächsten Elements im Puffer zu bestimmen. -
Persistente Nachrichten werden garantiert entweder von genau einem Prozess geschrieben oder gelesen. Dadurch wird eine Inkonsistenz des Nachrichteninhalts durch gleichzeitige Schreib- und Lesevorgänge verhindert. Mit einer persistenten Messaging-Pipe lässt
DBMS_PIPE
nur einen Vorgang zu, bei dem eine Nachricht oder eine empfangende Nachricht zu einem bestimmten Zeitpunkt aktiv sein kann. 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. -
Wenn Sie Nachrichten mit Oracle Cloud Infrastructure Object Storage speichern, können Sie native URIs oder Swift-URIs von Oracle Cloud Infrastructure verwenden. Der Speicherort-URI und die Zugangsdaten müssen jedoch wie folgt mit dem Typ übereinstimmen:
-
Wenn Sie für den Zugriff auf Oracle Cloud Infrastructure Object Storage ein natives URI-Format verwenden, müssen Sie die native Oracle Cloud Infrastructure-Signaturschlüsselauthentifizierung im Zugangsdatenobjekt verwenden.
-
Wenn Sie mit dem Swift-URI-Format auf Oracle Cloud Infrastructure Object Storage zugreifen, müssen Sie eine Authentifizierung des Authentifizierungstokens im Zugangsdatenobjekt verwenden.
-
Ausnahmen
Tabelle 6-17: RECEIVE_MESSAGE Funktionsausnahmen
Ausnahme: | Beschreibung |
---|---|
|
Berechtigungsfehler. Unzureichende Berechtigung zum Entfernen des Datensatzes aus der Pipe. Die Pfeife gehört jemand anderem. |
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging
Funktion SEND_MESSAGE
Diese Funktion sendet eine Nachricht an die benannte Pipe.
Die Nachricht ist im lokalen Nachrichtenpuffer enthalten, der mit Aufrufen an PACK_MESSAGE
gefüllt wurde. Sie können eine Pipe explizit mit CREATE_PIPE
erstellen. Andernfalls wird sie implizit erstellt.
Syntax
DBMS_PIPE.SEND_MESSAGE ( pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, credential_name IN VARCHAR2 DEFAULT null, location_uri IN VARCHAR2 ) RETURN INTEGER;
Parameter
Tabelle 6-18: Funktionsparameter SEND_MESSAGE
Parameter | Beschreibung |
---|---|
credential_name |
Der Zugangsdatenname für den Cloud-Speicher zum Speichern von Nachrichten.
Sie können diesen Wert festlegen, bevor Sie Das Zugangsdatenobjekt muss vom Benutzer, der Der Wert |
location_uri |
Die Standort-URI für den Cloud-Speicher zum Speichern von Nachrichten. Die globale Variable Sie können diesen Wert festlegen, bevor Sie |
|
Maximal zulässige Größe für die Pipe, in Byte. Die Gesamtgröße aller Nachrichten in der Pipe darf diesen Betrag nicht überschreiten. Die Nachricht wird blockiert, wenn sie diesen Höchstwert überschreitet. Der Standardwert beträgt 65536 Byte. Die Wenn Sie Der Standardwert |
|
Name der Pipe, auf der Sie die Nachricht platzieren möchten. Wenn Sie eine explizite Pipe verwenden, ist dies der Name, den Sie beim Aufrufen von Achtung: Verwenden Sie keine Pipe-Namen, die mit " |
|
Wartezeit beim Versuch, eine Nachricht in einer Pipe zu platzieren, in Sekunden. Der Standardwert ist die Konstante |
Werte zurückgeben
Tabelle 6-19: Rückgabewerte der Funktion SEND_MESSAGE
Zurückgehen | Beschreibung |
---|---|
|
Erfolgreich. Wenn die Pipe bereits vorhanden ist und der Benutzer, der versucht, sie zu erstellen, zur Verwendung autorisiert ist, gibt Oracle 0 zurück, was auf Erfolg hinweist, und alle Daten, die sich bereits in der Pipe befinden, bleiben erhalten. Wenn ein als |
|
Timeout. Bei dieser Prozedur kann eine Zeitüberschreitung auftreten, da die Pipe nicht gesperrt werden kann oder weil die Pipe zu voll für die Verwendung bleibt. Wenn die Pipe implizit erstellt wurde und leer ist, wird sie entfernt. |
|
Interrupt aufgetreten. Wenn die Pipe implizit erstellt wurde und leer ist, wird sie entfernt. |
|
Berechtigungen reichen nicht aus. Wenn eine Pipe mit demselben Namen vorhanden ist und von einem anderen Benutzer erstellt wurde, gibt Oracle den Fehler |
Hinweise zur Verwendung
-
Persistente Nachrichten werden garantiert entweder von genau einem Prozess geschrieben oder gelesen. Dadurch wird eine Inkonsistenz des Nachrichteninhalts durch gleichzeitige Schreib- und Lesevorgänge verhindert. Mit einer persistenten Messaging-Pipe lässt
DBMS_PIPE
nur einen Vorgang zu, bei dem eine Nachricht oder eine empfangende Nachricht zu einem bestimmten Zeitpunkt aktiv sein kann. 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. -
Wenn Sie Nachrichten mit Oracle Cloud Infrastructure Object Storage speichern, können Sie native URIs oder Swift-URIs von Oracle Cloud Infrastructure verwenden. Der Speicherort-URI und die Zugangsdaten müssen jedoch wie folgt mit dem Typ übereinstimmen:
-
Wenn Sie für den Zugriff auf Oracle Cloud Infrastructure Object Storage ein natives URI-Format verwenden, müssen Sie die native Oracle Cloud Infrastructure-Signaturschlüsselauthentifizierung im Zugangsdatenobjekt verwenden.
-
Wenn Sie mit dem Swift-URI-Format auf Oracle Cloud Infrastructure Object Storage zugreifen, müssen Sie eine Authentifizierung des Authentifizierungstokens im Zugangsdatenobjekt verwenden.
-
Ausnahmen
Tabelle 6-20: SEND_MESSAGE Funktionsausnahme
Ausnahme: | Beschreibung |
---|---|
|
Berechtigungsfehler. Unzureichende Berechtigung zum Schreiben in die Pipe. Die Pfeife ist privat und gehört jemand anderem. |
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging
Prozedur SET_CREDENTIAL_NAME
Diese Prozedur legt die Variable credential_name
fest, die als Standardzugangsdaten verwendet wird, wenn Pipe-Nachrichten im Cloud-Objektspeicher gespeichert werden.
Syntax
DBMS_PIPE.SET_CREDENTIAL_NAME ( credential_name IN VARCHAR2 );
Parameter
Parameter | Beschreibung |
---|---|
|
Der Name der Zugangsdaten für den Zugriff auf den Cloud-Objektspeicher. Der Wert |
Hinweis zur Verwendung
Wenn Sie Nachrichten mit Oracle Cloud Infrastructure Object Storage speichern, können Sie native URIs oder Swift-URIs von Oracle Cloud Infrastructure verwenden. Der Speicherort-URI und die Zugangsdaten müssen jedoch wie folgt mit dem Typ übereinstimmen:
-
Wenn Sie für den Zugriff auf Oracle Cloud Infrastructure Object Storage ein natives URI-Format verwenden, müssen Sie die native Oracle Cloud Infrastructure-Signaturschlüsselauthentifizierung im Zugangsdatenobjekt verwenden.
-
Wenn Sie mit dem Swift-URI-Format auf Oracle Cloud Infrastructure Object Storage zugreifen, müssen Sie eine Authentifizierung des Authentifizierungstokens im Zugangsdatenobjekt verwenden.
Beispiel
BEGIN
DBMS_PIPE.SET_CREDENTIAL_NAME(
credential_name => 'my_cred1');
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging
Prozedur SET_LOCATION_URI
Diese Prozedur legt die globale Variable location_uri
fest.
Syntax
DBMS_PIPE.SET_LOCATION_URI ( location_uri IN VARCHAR2 );
Parameter
Parameter | Beschreibung |
---|---|
location_uri |
Objekt- oder Datei-URI. Das Format der URI ist vom verwendeten Cloud-Object Storage-Service abhängig. Weitere Informationen finden Sie unter DBMS_CLOUD-URI-Formate. |
Hinweis zur Verwendung
Wenn Sie Nachrichten mit Oracle Cloud Infrastructure Object Storage speichern, können Sie native URIs oder Swift-URIs von Oracle Cloud Infrastructure verwenden. Der Speicherort-URI und die Zugangsdaten müssen jedoch wie folgt mit dem Typ übereinstimmen:
-
Wenn Sie für den Zugriff auf Oracle Cloud Infrastructure Object Storage ein natives URI-Format verwenden, müssen Sie die native Oracle Cloud Infrastructure-Signaturschlüsselauthentifizierung im Zugangsdatenobjekt verwenden.
-
Wenn Sie mit dem Swift-URI-Format auf Oracle Cloud Infrastructure Object Storage zugreifen, müssen Sie eine Authentifizierung des Authentifizierungstokens im Zugangsdatenobjekt verwenden.
Beispiel
BEGIN
DBMS_PIPE.GET_LOCATION_URI(
location_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/');
END;
/
Übergeordnetes Thema: Zusammenfassung der DBMS_PIPE-Unterprogramme für persistentes Messaging