Utilisation de la messagerie persistante avec les messages stockés dans la banque d'objets cloud
Le package DBMS_PIPE
dispose de fonctionnalités étendues sur Autonomous Database pour prendre en charge la messagerie persistante, où les messages sont stockés dans la banque d'objets cloud.
- A propos de la messagerie persistante avec DBMS_PIPE
La messagerie persistante avecDBMS_PIPE
permet à des sessions de base de données de communiquer dans la même région ou entre des régions avec des messages stockés dans la banque d'objets cloud. - Création d'un canal persistant explicite et envoi d'un message
Description des étapes de création d'un canal persistant avec un nom de canal spécifié (canal explicite). - Extraction d'un message persistant sur la même base de données
Décrit les étapes permettant d'extraire un message persistant à partir d'un canal explicite sur la même instance Autonomous Database (instance où le message a été envoyé). - Extraction d'un message persistant en créant un canal sur une autre base de données
Décrit les étapes permettant d'extraire un message persistant stocké dans la banque d'objets cloud avec un canal explicite sur une instance Autonomous Database différente de l'instance qui a envoyé le message. - Suppression d'un canal persistant
Décrit les étapes de suppression d'un canal persistant.
A propos de la messagerie persistante avec DBMS_PIPE
DBMS_PIPE
permet à des sessions de base de données de communiquer dans la même région ou entre des régions avec des messages stockés dans la banque d'objets cloud.
Messages persistants dans DBMS_PIPE
:
-
Permet d'envoyer et d'extraire des messages très volumineux.
-
Prise en charge de l'envoi d'un grand nombre de messages de canal.
-
Prise en charge de l'envoi et de la réception de messages au sein d'une seule base de données, dans plusieurs bases de données et entre différentes bases de données dans différentes régions.
-
Prise en charge de plusieurs canaux à l'aide du même URI d'emplacement de banque d'objets cloud.
Les canaux de messagerie persistants peuvent être créés dans n'importe quel type DBMS_PIPE
pris en charge :
- Tuyau implicite : créé automatiquement lorsqu'un message est envoyé avec un nom de tuyau inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE
. - Tuyau explicite : créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPE
avec un nom de tuyau spécifié par l'utilisateur. - Public Pipe : accessible par tout utilisateur disposant du droit d'accès
EXECUTE
sur le packageDBMS_PIPE
. - Tuyau privé : accessible par les sessions avec le même utilisateur que le créateur de pipe.
Oracle recommande de créer un canal explicite avant d'envoyer ou de recevoir des messages avec messagerie persistante. La création d'un canal explicite avec
DBMS_PIPE.CREATE_PIPE
garantit que le canal est créé avec les droits d'accès souhaités, publics ou privés (en définissant le paramètre private
).
L'exemple suivant présente le workflow général pour DBMS_PIPE
avec messagerie persistante :

Description de la figure database-pipe-persistent-messaging.eps
Les applications existantes utilisant DBMS_PIPE
peuvent continuer à fonctionner avec un minimum de modifications. Vous pouvez configurer des applications existantes qui utilisent DBMS_PIPE
avec un objet d'informations d'identification et un URI d'emplacement à l'aide d'un déclencheur de connexion ou d'une autre routine d'initialisation. Après avoir défini les informations d'identification et l'URI d'emplacement DBMS_PIPE
, aucune autre modification n'est nécessaire pour utiliser la messagerie persistante. Toute utilisation ultérieure du canal stocke les messages dans la banque d'objets cloud au lieu de les stocker dans la mémoire de base de données. Vous pouvez ainsi modifier la méthode de stockage des messages du stockage en mémoire vers le stockage d'objets cloud persistant, avec un minimum de modifications.
Présentation et fonctionnalités de la messagerie persistante
Fonctionnalités d'DBMS_PIPE
utilisant la messagerie persistante :
-
Les messages peuvent être envoyés et extraits sur plusieurs instances Autonomous Database dans la même région ou entre les régions.
-
Il est garanti que les messages persistants sont écrits ou lus par un seul processus. Cela évite les incohérences de contenu de message dues à des écritures et des lectures simultanées. A l'aide d'un canal de messagerie persistant,
DBMS_PIPE
permet qu'une seule opération, l'envoi d'un message ou un message de réception, soit active à un moment donné. Toutefois, si une opération n'est pas possible en raison d'une opération en cours, le processus tente de nouveau régulièrement jusqu'à ce que la valeurtimeout
soit atteinte. -
DBMS_PIPE
utiliseDBMS_CLOUD
pour accéder à la banque d'objets cloud. Les messages peuvent être stockés dans n'importe quelle banque d'objets cloud prise en charge. Pour plus d'informations, reportez-vous à la section DBMS_CLOUD URI Formats. DBMS_PIPE
utiliseDBMS_CLOUD
pour accéder à la banque d'objets cloud et tous les types d'informations d'identification pris en charge sont disponibles :DBMS_CLOUD.CREATE_CREDENTIAL
: pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.
DBMS_PIPE Autorisation et sécurité des privilèges
Les procédures DBMS_PIPE
sont exécutées avec les droits de l'appelant. Les canaux privés appartiennent à l'utilisateur en cours et un canal privé créé par un utilisateur ne peut être utilisé que par le même utilisateur. Cela s'applique à la fois aux canaux en mémoire et aux canaux de messagerie persistants dans lesquels les messages sont stockés dans la banque d'objets cloud. L'envoi et la réception de messages s'exécutent dans le schéma de l'appelant.
A l'aide de canaux privés, où les messages sont stockés dans la banque d'objets cloud, un objet d'informations d'identification est requis pour l'authentification auprès de la banque d'objets cloud identifiée par le paramètre location_uri
. L'utilisateur appelant doit disposer du privilège EXECUTE
sur l'objet d'informations d'identification indiqué avec le paramètre credential_name
utilisé pour accéder à la banque d'objets.
Pour utiliser un canal public, l'utilisateur, session de base de données, doit disposer du privilège d'exécution sur DBMS_PIPE
. Pour un canal public utilisant la messagerie persistante et le stockage des messages vers la banque d'objets cloud, l'utilisateur, session de base de données, doit disposer du privilège d'exécution sur DBMS_CLOUD
et du privilège d'exécution sur l'objet d'informations d'identification (ou vous pouvez créer un objet d'informations d'identification autorisé à accéder à l'URI d'emplacement qui contient le message).
DBMS_PIPE Limitation
Le package DBMS_PIPE
ne prend pas en charge l'envoi de messages entre les bases de données qui utilisent des jeux de caractères différents. Par exemple, si vous avez une instance Autonomous Database qui utilise AL32UTF8 et une autre instance qui utilise WE8MSWIN1252, vous ne pouvez pas envoyer de messages avec DBMS_PIPE
entre ces deux bases de données. Dans ce cas, le système génère l'erreur ORA-12704
si vous tentez d'envoyer des messages avec DBMS_PIPE
entre ces deux bases de données.
Pour plus d'informations, reportez-vous à Choix d'un ensemble de caractères pour Autonomous Database.
Création d'un canal persistant explicite et envoi d'un message
Décrit les étapes de création d'un canal persistant avec un nom de canal spécifié (tuyau explicite).
Extraire un message persistant sur la même base de données
Décrit les étapes permettant d'extraire un message persistant à partir d'un canal explicite sur la même instance Autonomous Database (instance où le message a été envoyé).
Sur une instance Autonomous Database, vous pouvez recevoir des messages envoyés à un canal à partir d'une autre session. Les procédures DBMS_PIPE
sont des procédures de droits de l'appelant et s'exécutent en tant qu'utilisateur appelé en cours.
Les canaux privés appartiennent à l'utilisateur en cours qui crée le canal. Les canaux privés sont accessibles uniquement par le même utilisateur qui a créé le canal. Cela s'applique aux canaux utilisant des messages en mémoire et aux canaux utilisant la messagerie persistante avec des messages stockés dans la banque d'objets cloud.
Les canaux publics sont accessibles par toutes les sessions de base de données disposant du privilège d'exécution sur DBMS_PIPE
. Cela s'applique aux canaux utilisant des messages en mémoire et aux canaux utilisant la messagerie persistante avec des messages stockés dans la banque d'objets cloud.
Pour plus d'informations, reportez-vous à Procédure SET_CREDENTIAL_NAME et à Procédure SET_LOCATION_URI.
Pour plus d'informations, reportez-vous à Fonction RECEIVE_MESSAGE.
Extraire un message persistant en créant un canal sur une autre base de données
Décrit les étapes permettant d'extraire un message persistant stocké dans la banque d'objets cloud avec un canal explicite sur une instance Autonomous Database différente de l'instance qui a envoyé le message.