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 in più aree con 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 di pipe specificato (Explicit Pipe). - 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). - Recuperare 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 i passi 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 in più aree con messaggi memorizzati nell'area di memorizzazione degli oggetti cloud.
Messaggi persistenti in DBMS_PIPE
:
-
Consente di inviare e recuperare messaggi di grandi dimensioni.
-
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.
I tubi di messaggistica persistenti possono essere creati in uno qualsiasi dei tipi DBMS_PIPE
supportati:
- Tubo implicito: creato automaticamente quando un messaggio viene inviato con un nome pipe sconosciuto utilizzando la funzione
DBMS_PIPE.SEND_MESSAGE
. - Tubo esplicito: creato utilizzando la funzione
DBMS_PIPE.CREATE_PIPE
con un nome di pipe specificato dall'utente. - Public Pipe: accessibile da qualsiasi utente con autorizzazione
EXECUTE
sul pacchettoDBMS_PIPE
- Tubo privato: accessibile da sessioni con lo stesso utente dell'autore della pipe.
Oracle consiglia di creare una pipe esplicita prima di inviare o ricevere messaggi con messaggistica persistente. La creazione di una pipe esplicita con
DBMS_PIPE.CREATE_PIPE
assicura che la pipe venga creata con le autorizzazioni di accesso desiderate, pubbliche o private (impostando il parametro private
).
Di seguito viene illustrato il workflow generale per DBMS_PIPE
con messaggistica persistente.

Descrizione dell'illustrazione 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 credenziale 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 della 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ò consente di modificare il metodo di storage per i messaggi da storage in memoria 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 su più istanze di Autonomous Database nella stessa area o tra più aree.
-
I messaggi persistenti possono essere scritti o letti da un solo processo. Ciò impedisce l'incoerenza del contenuto del messaggio a causa di scritture e letture concorrenti. Utilizzando una pipe di messaggistica persistente,
DBMS_PIPE
consente l'attivazione di una sola operazione, ovvero l'invio di un messaggio o di un messaggio di ricezione alla volta. Tuttavia, se un'operazione non è possibile a causa di un'operazione in corso, il processo esegue un nuovo tentativo 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. Per ulteriori informazioni, vedere DBMS_CLOUD Formati URI. 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 CREATE_CREDENTIAL Procedure.
DBMS_PIPE Autorizzazione e sicurezza dei privilegi
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 pipe in-memory che ai pipe 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 richiedente.
Utilizzando pipe private, in cui i messaggi vengono memorizzati nell'area di memorizzazione degli oggetti cloud, è necessario un oggetto credenziale 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, 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 credenziale (oppure è possibile creare un oggetto credenziale che consenta di 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 solleverà 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 di pipe specificato (Explicit Pipe).
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 di richiamo dei diritti e vengono eseguite come utente richiamato corrente.
I tubi privati sono di proprietà dell'utente corrente che crea la pipe. I tubi privati sono accessibili solo dallo stesso utente che ha creato il tubo. Ciò si applica ai pipe che utilizzano messaggi in memoria e ai pipe che utilizzano messaggi persistenti con messaggi memorizzati nell'area di memorizzazione degli oggetti cloud.
È possibile accedere alle pipe pubbliche da qualsiasi sessione di database con privilegio di esecuzione su DBMS_PIPE
. Ciò si applica ai pipe che utilizzano messaggi in memoria e ai pipe che utilizzano messaggi persistenti con messaggi memorizzati nell'area di memorizzazione degli oggetti cloud.
Per ulteriori informazioni, vedere SET_CREDENTIAL_NAME Procedure e SET_LOCATION_URI Procedure.
Per ulteriori informazioni, vedere RECEIVE_MESSAGE Function.
Recuperare un messaggio persistente creando 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 i passi per rimuovere una pipe persistente.
I tubi 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.