Uso de mensajes persistentes con mensajes almacenados en el almacén de objetos en la nube
El paquete DBMS_PIPE
tiene una funcionalidad ampliada en Autonomous Database para soportar mensajes persistentes, donde los mensajes se almacenan en el almacén de objetos en la nube.
Acerca de los Mensajes Persistentes con DBMS_PIPE
DBMS_PIPE
permite que una o más sesiones de base de datos se comuniquen en la misma región o entre regiones con mensajes almacenados en el almacén de objetos en la nube.
Mensajes persistentes en DBMS_PIPE
:
-
Permite enviar y recuperar mensajes muy grandes.
-
Soporta el envío de un gran número de mensajes de canal.
-
Admita el envío y la recepción de mensajes en una única base de datos, en varias bases de datos y en distintas regiones.
-
Soporta varios pipes con el mismo URI de ubicación del almacén de objetos en la nube.
Se pueden crear canales de mensajería persistentes en cualquiera de los tipos DBMS_PIPE
soportados:
- Conducta implícita: se crea automáticamente cuando se envía un mensaje con un nombre de conducto desconocido mediante la función
DBMS_PIPE.SEND_MESSAGE
. - Pipa explícita: se crea mediante la función
DBMS_PIPE.CREATE_PIPE
con un nombre de pipa especificado por el usuario. - Conducta pública: accesible para cualquier usuario con permiso
EXECUTE
en el paqueteDBMS_PIPE
. - Dirección privada: accesible para sesiones con el mismo usuario que el creador de la conducción.
Note:
Oracle recomienda crear una conducción explícita antes de enviar o recibir mensajes con mensajes persistentes. La creación de una conducción explícita conDBMS_PIPE.CREATE_PIPE
garantiza que la conducción se cree con los permisos de acceso que desee, ya sean públicos o privados (definiendo el parámetro private
).
A continuación se muestra el flujo de trabajo general para DBMS_PIPE
con mensajes persistentes:

Descripción de la ilustración database-pipe-persistent-messaging.eps
Las aplicaciones existentes que utilizan DBMS_PIPE
pueden seguir funcionando con cambios mínimos. Puede configurar aplicaciones existentes que utilicen DBMS_PIPE
con un objeto de credencial y un URI de ubicación mediante un disparador de conexión o con alguna otra rutina de inicialización. Después de definir la credencial DBMS_PIPE
y el URI de ubicación, no se necesitan otros cambios para utilizar mensajes persistentes. Todo uso posterior de la conducción almacena los mensajes en el almacén de objetos en la nube en lugar de en la memoria de la base de datos. Esto le permite cambiar el método de almacenamiento de mensajes de almacenamiento en memoria a almacenamiento de objetos en la nube persistente, con cambios mínimos.
Visión General y Funciones de Mensajería Persistente
Funciones de DBMS_PIPE
con mensajes persistentes:
-
Los mensajes se pueden enviar y recuperar en varias instancias de Autonomous Database en la misma región o en varias regiones.
-
Se garantiza que los mensajes persistentes se escriban o lean exactamente en un proceso. Esto evita la inconsistencia de contenido del mensaje debido a lecturas y escrituras simultáneas.
DBMS_PIPE
permite que solo una operación, el envío de un mensaje o el envío de un mensaje estén activos en un momento determinado y estas operaciones están protegidas por un mecanismo de bloqueo. Sin embargo, si una operación no es posible debido a una operación en curso, el proceso se reintenta periódicamente hasta que se alcanza el valortimeout
. -
DBMS_PIPE
utilizaDBMS_CLOUD
para acceder al almacén de objetos en la nube. Los mensajes se pueden almacenar en cualquiera de los almacenes de objetos en la nube soportados. Consulte Formatos de URI de almacenamiento de objetos en la nube para obtener más información. DBMS_PIPE
utilizaDBMS_CLOUD
para acceder al almacén de objetos en la nube y todos los tipos de credenciales soportados están disponibles:DBMS_CLOUD.CREATE_CREDENTIAL
: consulte procedimiento CREATE_CREDENTIAL para obtener más información.
DBMS_PIPE Autorización y seguridad de privilegios
Los procedimientos DBMS_PIPE
se ejecutan con derechos del invocador. Los pipes privados son propiedad del usuario actual y los pipes privados creados por un usuario solo pueden ser utilizados por el mismo usuario. Esto se aplica tanto a los canales en memoria como a los canales de mensajería persistentes donde los mensajes se almacenan en el almacén de objetos en la nube. El envío y la recepción de mensajes se ejecutan en el esquema del invocador.
Mediante pipes privados, donde los mensajes se almacenan en el almacén de objetos en la nube, se necesita un objeto de credencial para la autenticación con el almacén de objetos en la nube identificado por el parámetro location_uri
. El usuario que llama debe tener el privilegio EXECUTE
en el objeto de credencial especificado con el parámetro credential_name
que se utiliza para acceder al almacén de objetos.
Para utilizar un conducto público, el usuario, la sesión de base de datos, debe tener el privilegio de ejecución en DBMS_PIPE
. Para una conducción pública que utiliza mensajes persistentes y almacena mensajes en el almacén de objetos en la nube, el usuario, la sesión de base de datos, debe tener el privilegio de ejecución en DBMS_CLOUD
y el privilegio de ejecución en el objeto de credencial (o puede crear un objeto de credencial que tenga permiso para acceder al URI de ubicación que contiene el mensaje).
DBMS_PIPE Limitación
El paquete DBMS_PIPE
no soporta el envío de mensajes entre bases de datos que utilizan diferentes juegos de caracteres. Por ejemplo, si tiene una instancia de Autonomous Database que utiliza AL32UTF8 y otra instancia que utiliza WE8MSWIN1252, no puede enviar mensajes con DBMS_PIPE
entre estas dos bases de datos. En este caso, el sistema emitirá el error ORA-12704
si intenta enviar mensajes con DBMS_PIPE
entre estas dos bases de datos.
Consulte Selección de juego de caracteres para Autonomous Database para obtener más información.
Creación de un Tubo Persistente Explícito y Envío de un Mensaje
Describe los pasos para crear un conducto persistente con un nombre de conducto especificado (tubo explícito).
Recuperación de un Mensaje Persistente en la Misma Base de Datos
Describe los pasos para recuperar un mensaje persistente de una conducción explícita en la misma instancia de Autonomous Database (la instancia en la que se envió el mensaje).
En una instancia de Autonomous Database, puede recibir mensajes enviados a un canal desde una sesión diferente. Los procedimientos DBMS_PIPE
son procedimientos de derechos del invocador y se ejecutan como el usuario invocado actual.
Los tubos privados son propiedad del usuario actual que crea el conducto. Solo el mismo usuario que creó el conducto puede acceder a los conductos privados. Esto se aplica a los pipes que utilizan mensajes en memoria y a los pipes que utilizan mensajes persistentes con mensajes almacenados en el almacén de objetos en la nube.
Cualquier sesión de base de datos con privilegios de ejecución en DBMS_PIPE
puede acceder a los pipes públicos. Esto se aplica a los pipes que utilizan mensajes en memoria y a los pipes que utilizan mensajes persistentes con mensajes almacenados en el almacén de objetos en la nube.
Consulte Procedimiento SET_CREDENTIAL_NAME y Función GET_LOCATION_URI para obtener más información.
Consulte Función RECEIVE_MESSAGE para obtener más información.
Recuperación de un Mensaje Persistente mediante la Creación de una Tubería en una Base de Datos Diferente
Describe los pasos para recuperar un mensaje persistente almacenado en el almacén de objetos en la nube con una conducción explícita en una instancia de Autonomous Database distinta de la instancia que envió el mensaje.
Eliminación de una tubería persistente
Describe los pasos para eliminar un conducto persistente.
Los canales persistentes envían y reciben mensajes mediante el almacenamiento de mensajes en el almacén de objetos en la nube. Utilice DBMS_PIPE.REMOVE_PIPE
para eliminar un conducto persistente en una instancia de Autonomous Database.