Utiliser la messagerie persistante avec les messages stockés dans un magasin d'objets en nuage
L'ensemble DBMS_PIPE
a une fonctionnalité étendue sur Autonomous Database pour prendre en charge la messagerie persistante, où les messages sont stockés dans le magasin d'objets en nuage.
À propos de la messagerie persistante avec DBMS_PIPE
DBMS_PIPE
permet à une ou plusieurs sessions de base de données de communiquer dans la même région ou entre les régions avec des messages stockés dans le magasin d'objets en nuage.
Messages persistants dans DBMS_PIPE
:
-
Permet d'envoyer et de récupérer des messages très volumineux.
-
Prendre en charge l'envoi d'un grand nombre de messages de canalisation.
-
Prendre en charge l'envoi et la réception de messages au sein d'une seule base de données, entre plusieurs bases de données et entre des bases de données de différentes régions.
-
Prendre en charge plusieurs canaux à l'aide du même URI d'emplacement de magasin d'objets en nuage.
Les canaux de messagerie persistants peuvent être créés dans n'importe quel type DBMS_PIPE
pris en charge :
- Conduit implicite : Créé automatiquement lorsqu'un message est envoyé avec un nom de canal inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE
. - Converbe explicite : Créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPE
avec un nom de canal spécifié par l'utilisateur. - Conseil public : Accessible par tout utilisateur disposant de l'autorisation
EXECUTE
sur l'ensembleDBMS_PIPE
. - Converbe privé : Accessible par les sessions avec le même utilisateur que le créateur du canal.
Note :
Oracle recommande de créer une barre verticale explicite avant d'envoyer ou de recevoir des messages avec une messagerie persistante. La création d'un canal explicite avecDBMS_PIPE.CREATE_PIPE
garantit que le canal est créé avec les autorisations d'accès voulues, publiques ou privées (en définissant le paramètre private
).
Voici le flux de travail général pour DBMS_PIPE
avec messagerie persistante :

Description de l'illustration 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 de données d'identification et un URI d'emplacement à l'aide d'un déclencheur de connexion ou à l'aide d'un autre sous-programme d'initialisation. Après avoir défini les données 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 le magasin d'objets en nuage au lieu de la mémoire de base de données. Vous pouvez ainsi modifier la méthode de stockage des messages du stockage en mémoire au stockage d'objets en nuage persistant, avec des modifications minimes.
Présentation et fonctionnalités de la messagerie persistante
Fonctions de DBMS_PIPE
utilisant la messagerie persistante :
-
Les messages peuvent être envoyés et extraits pour plusieurs instances Autonomous Database dans la même région ou entre les régions.
-
Les messages persistants sont garantis pour être écrits ou lus par un seul processus. Cela évite l'incohérence du contenu des messages en raison de lectures et d'écritures simultanées.
DBMS_PIPE
permet qu'une seule opération, l'envoi d'un message ou la réception d'un message soit active à un moment donné et ces opérations sont protégées par un mécanisme de verrouillage. Toutefois, si une opération n'est pas possible en raison d'une opération en cours, le processus réessaie périodiquement jusqu'à ce que la valeurtimeout
soit atteinte. -
DBMS_PIPE
utiliseDBMS_CLOUD
pour accéder au magasin d'objets en nuage. Les messages peuvent être stockés dans n'importe quel magasin d'objets en nuage pris en charge. Pour plus d'informations, voir Formats d'URI du service de stockage d'objets en nuage. DBMS_PIPE
utiliseDBMS_CLOUD
pour accéder au magasin d'objets en nuage et tous les types de données d'identification pris en charge sont disponibles :DBMS_CLOUD.CREATE_CREDENTIAL
: Pour plus d'informations, voir Procédure CREATE_CREDENTIAL.
DBMS_PIPE Privilèges Autorisation et sécurité
Les procédures DBMS_PIPE
s'exécutent avec les droits de l'appelant. Les tuyaux privés appartiennent à l'utilisateur courant et un tuyau 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 où les messages sont stockés dans le magasin d'objets en nuage. L'envoi et la réception de messages s'exécutent dans le schéma de l'appelant.
À l'aide de canaux privés, où les messages sont stockés dans le magasin d'objets en nuage, un objet de données d'identification est requis pour l'authentification avec le magasin d'objets en nuage identifié par le paramètre location_uri
. L'utilisateur appelant doit disposer du privilège EXECUTE
sur l'objet de données d'identification spécifié avec le paramètre credential_name
utilisé pour accéder au magasin 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 une messagerie persistante et stockant des messages dans le magasin d'objets en nuage, l'utilisateur, la session de base de données, doit disposer du privilège d'exécution sur DBMS_CLOUD
et d'exécution sur l'objet de données d'identification (ou vous pouvez créer un objet de données d'identification autorisé à accéder à l'URI d'emplacement qui contient le message).
DBMS_PIPE Limite
L'ensemble DBMS_PIPE
ne prend pas en charge l'envoi de messages entre des 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 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, voir Sélection de jeux de caractères pour Autonomous Database.
Créer un canal persistant explicite et envoyer un message
Décrit les étapes de création d'un tuyau persistant avec un nom de tuyau spécifié (tuyau explicite).
Extraire un message persistant sur la même base de données
Décrit les étapes d'extraction d'un message persistant à partir d'un canal explicite sur la même instance Autonomous Database (l'instance où le message a été envoyé).
Dans 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 sont exécutées en tant qu'utilisateur appelé courant.
Les tuyaux privés appartiennent à l'utilisateur courant qui crée le tuyau. Les tuyaux privés ne sont accessibles que par le même utilisateur qui a créé le tuyau. Cela s'applique aux canaux utilisant des messages en mémoire et aux canaux utilisant des messages persistants avec des messages stockés dans le magasin d'objets en nuage.
Les canaux publics sont accessibles par toute session de base de données ayant le privilège d'exécution sur DBMS_PIPE
. Cela s'applique aux canaux utilisant des messages en mémoire et aux canaux utilisant des messages persistants avec des messages stockés dans le magasin d'objets en nuage.
Pour plus d'informations, voir Procédure SET_CREDENTIAL_NAME et Fonction GET_LOCATION_URI.
Pour plus d'informations, voir Fonction RECEIVE_MESSAGE.
Extraire un message persistant en créant un canal sur une autre base de données
Décrit les étapes d'extraction d'un message persistant stocké dans le magasin d'objets en nuage avec un canal explicite sur une instance Autonomous Database différente de l'instance qui a envoyé le message.
Supprimer un tuyau persistant
Décrit les étapes de suppression d'une canalisation persistante.
Les canaux persistants envoient et reçoivent des messages en stockant ceux-ci dans le magasin d'objets en nuage. Utilisez DBMS_PIPE.REMOVE_PIPE
pour supprimer un canal persistant sur une instance Autonomous Database.