Usa messaggistica persistente con messaggi memorizzati nell'area di memorizzazione degli oggetti cloud
Il package DBMS_PIPE
dispone di funzionalità estese su Autonomous Database per supportare la messaggistica persistente, in cui i messaggi vengono memorizzati nell'area di memorizzazione degli oggetti cloud.
- Informazioni sulla messaggistica persistente con DBMS_PIPE
La messaggistica persistente conDBMS_PIPE
consente a una o più sessioni di database di comunicare nella stessa area o tra più aree con i messaggi memorizzati nell'area di memorizzazione degli oggetti cloud. - Creare una pipe persistente esplicita e inviare un messaggio
Descrive i passi per creare una pipe persistente con un nome pipe specificato (pipe esplicita). - Recupera un messaggio persistente sullo stesso database
Descrive i passi per recuperare un messaggio persistente da una pipe esplicita sulla stessa istanza di Autonomous Database (l'istanza in cui è stato inviato il messaggio). - Recupera un messaggio persistente mediante la creazione di una pipe su un database diverso
Descrive i passi per recuperare un messaggio persistente memorizzato nell'area di memorizzazione degli oggetti cloud con una pipe esplicita su un'istanza di Autonomous Database diversa dall'istanza che ha inviato il messaggio. - Rimuovi una pipe persistente
Descrive la procedura per rimuovere una pipe persistente.
Informazioni sulla messaggistica persistente con DBMS_PIPE
DBMS_PIPE
consente a una o più sessioni di database di comunicare nella stessa area o tra più aree con i messaggi memorizzati nell'area di memorizzazione degli oggetti cloud.
Messaggi persistenti in DBMS_PIPE
:
-
Permetti di inviare e recuperare messaggi molto grandi.
-
Supporta l'invio di un numero elevato di messaggi pipe.
-
Supporta l'invio e la ricezione di messaggi all'interno di un unico database, su più database e tra database in aree diverse.
-
Supporta più pipe utilizzando lo stesso URI di posizione dell'area di memorizzazione degli oggetti cloud.
È possibile creare tubi di messaggistica persistenti in uno qualsiasi dei tipi DBMS_PIPE
supportati:
- Pipe implicita: viene creato automaticamente quando viene inviato un messaggio con un nome pipe sconosciuto utilizzando la funzione
DBMS_PIPE.SEND_MESSAGE
. - Pipe esplicita: viene creato utilizzando la funzione
DBMS_PIPE.CREATE_PIPE
con un nome pipe specificato dall'utente. - Public Pipe: accessibile da qualsiasi utente con autorizzazione
EXECUTE
sul pacchettoDBMS_PIPE
. - Pipe privata: è accessibile dalle sessioni con lo stesso utente dell'autore della pipe.
Oracle consiglia di creare una pipe esplicita prima di inviare o ricevere messaggi con messaggi persistenti. La creazione di una pipe esplicita con
DBMS_PIPE.CREATE_PIPE
garantisce che la pipe venga creata con le autorizzazioni di accesso desiderate, sia pubbliche che private (impostando il parametro private
).
Di seguito è riportato il workflow generale per DBMS_PIPE
con messaggi persistenti.

Descrizione dell'immagine database-pipe-persistent-messaging.eps
Le applicazioni esistenti che utilizzano DBMS_PIPE
possono continuare a funzionare con modifiche minime. È possibile configurare le applicazioni esistenti che utilizzano DBMS_PIPE
con un oggetto credenziali e un URI di posizione utilizzando un trigger di accesso o un'altra routine di inizializzazione. Dopo aver impostato la credenziale DBMS_PIPE
e l'URI di posizione, non sono necessarie altre modifiche per utilizzare la messaggistica persistente. Tutti gli usi successivi della pipe memorizzano i messaggi nell'area di memorizzazione degli oggetti cloud anziché nella memoria del database. Ciò ti consente di modificare il metodo di storage per i messaggi da in-memory a storage degli oggetti cloud persistente, con modifiche minime.
Panoramica e funzioni di messaggistica persistente
Funzioni di DBMS_PIPE
che utilizzano la messaggistica persistente:
-
I messaggi possono essere inviati e recuperati in più istanze di Autonomous Database nella stessa area o tra più aree.
-
I messaggi persistenti sono garantiti per essere scritti o letti da un solo processo. Ciò impedisce l'incongruenza del contenuto del messaggio a causa di scritture e letture concorrenti. Utilizzando una pipe di messaggistica persistente,
DBMS_PIPE
consente di attivare una sola operazione, l'invio di un messaggio o di un messaggio ricevente alla volta. Tuttavia, se un'operazione non è possibile a causa di un'operazione in corso, il processo ripete periodicamente fino al raggiungimento del valoretimeout
. -
DBMS_PIPE
utilizzaDBMS_CLOUD
per accedere all'area di memorizzazione degli oggetti cloud. I messaggi possono essere memorizzati in qualsiasi area di memorizzazione degli oggetti cloud supportata. Vedere DBMS_CLOUD Formati URI per ulteriori informazioni. DBMS_PIPE
utilizzaDBMS_CLOUD
per accedere all'area di memorizzazione degli oggetti cloud e sono disponibili tutti i tipi di credenziali supportati:DBMS_CLOUD.CREATE_CREDENTIAL
: per ulteriori informazioni, vedere Procedura CREATE_CREDENTIAL.
Autorizzazione e sicurezza dei privilegi DBMS_PIPE
Le procedure DBMS_PIPE
vengono eseguite con i diritti del chiamante. I tubi privati sono di proprietà dell'utente corrente e una pipe privata creata da un utente può essere utilizzata solo dallo stesso utente. Ciò si applica sia ai tubi in memoria che ai tubi di messaggistica persistenti in cui i messaggi vengono memorizzati nell'area di memorizzazione degli oggetti cloud. L'invio e la ricezione dei messaggi vengono eseguiti nello schema del chiamante.
Utilizzando pipe private, in cui i messaggi vengono memorizzati nell'area di memorizzazione degli oggetti cloud, è necessario un oggetto credenziali per l'autenticazione con l'area di memorizzazione degli oggetti cloud identificata dal parametro location_uri
. L'utente che richiama deve disporre del privilegio EXECUTE
sull'oggetto credenziale specificato con il parametro credential_name
utilizzato per accedere all'area di memorizzazione degli oggetti.
Per utilizzare una pipe pubblica, l'utente, la sessione del database, deve disporre del privilegio di esecuzione su DBMS_PIPE
. Per una pipe pubblica che utilizza la messaggistica persistente e memorizza i messaggi nell'area di memorizzazione degli oggetti cloud, l'utente, la sessione del database, deve disporre del privilegio di esecuzione su DBMS_CLOUD
ed eseguire il privilegio sull'oggetto credenziali (oppure è possibile creare un oggetto credenziali che sia autorizzato ad accedere all'URI della posizione che contiene il messaggio).
DBMS_PIPE Limitazione
Il pacchetto DBMS_PIPE
non supporta l'invio di messaggi tra database che utilizzano set di caratteri diversi. Ad esempio, se si dispone di un'istanza di Autonomous Database che utilizza AL32UTF8 e un'altra istanza che utilizza WE8MSWIN1252, non è possibile inviare messaggi con DBMS_PIPE
tra questi due database. In questo caso, il sistema genererà l'errore ORA-12704
se si tenta di inviare messaggi con DBMS_PIPE
tra questi due database.
Per ulteriori informazioni, vedere Scegliere un set di caratteri per Autonomous Database.
Creare una pipe persistente esplicita e inviare un messaggio
Descrive i passi per creare una pipe persistente con un nome pipe specificato (Tubo esplicito).
Recupera un messaggio persistente nello stesso database
Descrive i passi per recuperare un messaggio persistente da una pipe esplicita sulla stessa istanza di Autonomous Database (l'istanza in cui è stato inviato il messaggio).
In un'istanza di Autonomous Database è possibile ricevere messaggi inviati a una pipe da una sessione diversa. Le procedure DBMS_PIPE
sono procedure relative ai diritti del chiamante ed vengono eseguite come utente corrente richiamato.
I tubi privati sono di proprietà dell'utente corrente che crea il tubo. I tubi privati sono accessibili solo dallo stesso utente che ha creato il tubo. Ciò si applica alle pipe che utilizzano messaggi in memoria e alle pipe che utilizzano la messaggistica persistente con messaggi memorizzati nell'area di memorizzazione degli oggetti cloud.
È possibile accedere ai pipe pubblici da qualsiasi sessione di database con privilegio di esecuzione su DBMS_PIPE
. Ciò si applica alle pipe che utilizzano messaggi in memoria e alle pipe che utilizzano la messaggistica persistente con messaggi memorizzati nell'area di memorizzazione degli oggetti cloud.
Per ulteriori informazioni, vedere SET_CREDENTIAL_NAME Procedura e Procedura SET_LOCATION_URI.
Per ulteriori informazioni, vedere RECEIVE_MESSAGE Function.
Recuperare un messaggio persistente creando una pipe in un database diverso
Descrive i passi per recuperare un messaggio persistente memorizzato nell'area di memorizzazione degli oggetti cloud con una pipe esplicita su un'istanza di Autonomous Database diversa dall'istanza che ha inviato il messaggio.
Rimuovere una pipe persistente
Descrive i passi per rimuovere una pipe persistente.
Le pipe persistenti inviano e ricevono messaggi memorizzando i messaggi nell'area di memorizzazione degli oggetti cloud. Utilizzare DBMS_PIPE.REMOVE_PIPE
per rimuovere una pipe persistente su un'istanza di Autonomous Database.