FirebirdSQL logo

WITH {AUTONOMOUS | COMMON} TRANSACTION

Par défaut, l’instruction est exécutée dans le contexte de la transaction courante. En utilisant la clause WITH AUTONOMOUS TRANSACTION, une nouvelle transaction sera lancée avec les mêmes paramètres que la transaction courante. Elle sera acquittée si l’instruction est exécutée sans erreur et annulée (roll back) sinon.Avec la clause WITH COMMON TRANSACTION , la transaction courante est utilisée dans la mesure du possible.

Si l’instruction doit être exécutée dans une connexion distincte, la transaction déjà en cours d’exécution dans cette connexion est utilisée (le cas échéant). Sinon, une nouvelle transaction est lancée avec les paramètres de la transaction courante. Toute nouvelle transaction lancée en mode COMMON est confirmée ou annulée en même temps que la transaction courante.

WITH CALLER PRIVILEGES

Par défaut, les instructions SQL sont exécutées avec les privilèges de l’utilisateur courant. La spécification WITH CALLER PRIVILILEGES leur ajoute des privilèges pour appeler une procédure stockée ou un déclencheur, tout comme si l’instruction était exécutée directement par un sous-programme. WITH CALLER PRIVILEGES n’a aucun effet si la clause ON EXTERNAL est également présente.

ON EXTERNAL [DATA SOURCE]

Avec la clause ON EXTERNAL DATA SOURCE, l’instruction est exécutée dans une connexion séparée à la même base de données ou à une autre, éventuellement sur un serveur différent. Si la chaîne de connexion est définie à NULL ou '' (chaîne vide), la clause ON EXTERNAL est considérée comme manquante et l’instruction est exécutée pour la base de données actuelle. La chaîne de connexion est détaillée dans l’instruction CREATE DATABASE.Voir. Création d’une base de données sur un serveur distant.

Le pool de connexion et le pool de transaction sont utilisés lors de l’exécution d’une instruction dans une connexion séparée.

Pool de connexion externe(External connection pool)

Pour éviter les retards liés à l’utilisation fréquente de connexions externes, le sous-système de sources de données externes (EDS) utilise un pool de connexions externes.Le pool stocke les connexions externes non utilisées pendant un certain temps, évitant ainsi les coûts de connexion/déconnexion pour les chaînes de connexion fréquemment utilisées.

Comment fonctionne la mise en commun des connexions :

  • chaque connexion externe est associée à un pool lors de sa création ;

  • Le pool de connexion a deux listes : une pour les connexions inutilisées et une pour les connexions actives ;

  • lorsqu’une connexion devient inutilisée (c’est-à-dire qu’elle n’a pas de demandes actives ni de transactions actives), elle est réinitialisée et placée sur la liste en attente (si la réinitialisation réussit) ou fermée (si la réinitialisation échoue). La connexion est réinitialisée à l’aide de l’instruction ALTER SESSION RESET. La réinitialisation est considérée comme réussie si aucune erreur ne s’est produite.

    Note

    Si la source de données externe ne supporte pas l’instruction ALTER SESSION RESET, ceci n’est pas considéré comme une erreur et cette connexion sera placée dans le pool.

  • Si le pool a atteint la taille maximale, la connexion inactive la plus ancienne est fermée ;

  • lorsque Firebird demande une nouvelle connexion externe, le pool recherche d’abord un candidat dans la liste des connexions inactives. La recherche est basée sur 4 paramètres :---

    • chaîne de connexion ;

    • nom d’utilisateur ;

    • mot de passe ;

    • rôle.

    La recherche est sensible à la casse ;

  • si une connexion appropriée est trouvée, on vérifie si elle est vivante ;

  • si la connexion échoue au test, elle est supprimée et la recherche est répétée (aucune erreur n’est renvoyée à l’utilisateur) ;

  • La connexion trouvée (et active) est déplacée de la liste des connexions inactives à la liste des connexions actives et retournée à l’appelant ;

  • s’il existe plusieurs connexions appropriées, celle qui est la plus utilisée sera sélectionnée ;

  • si aucune connexion appropriée n’est disponible, une nouvelle connexion est créée et placée dans la liste des connexions actives ;

  • Lorsque la connexion inactive a expiré, elle est retirée du pool et fermée.

Caractéristiques principales :

  • pas de connexions externes "permanentes" ;

  • un nombre limité de connexions externes inactives (idle) dans le pool ;

  • permet une recherche rapide parmi les connexions (sur la base des 4 paramètres ci-dessus) ;

  • le pool est partagé par toutes les bases de données externes ;

  • le pool est partagé par toutes les connexions locales gérées par ce processus Firebird.

Paramètres du pool de connexion externe :

  • durée de vie de la connexion : intervalle de temps depuis la dernière utilisation de la connexion, après lequel elle sera fermée de force. Le paramètre ExtConnPoolLifeTime dans firebird.conf. La valeur par défaut est de 7200 secondes ;

  • Taille du pool : le nombre maximum autorisé de connexions inactives dans le pool. Le paramètre ExtConnPoolSize dans firebird.conf. La valeur par défaut est 0, c’est-à-dire que la mise en commun des connexions externes est désactivée.

Le pool de connexions externes et ses paramètres peuvent être contrôlés par des Instructions spéciaux.Voir ALTER EXTERNAL CONNECTIONS POOL pour plus de détails.

L’état du pool de connexion externe peut être interrogé à l’aide de variables contextuelles dans l’espace de noms SYSTEM.

Table 1. Variables de l’espace de noms SYSTEM pour contrôler le pool de connexion externe
Variable Description

EXT_CONN_POOL_SIZE

Taille du pool.

EXT_CONN_POOL_LIFETIME

Durée de vie des composés inactifs.

EXT_CONN_POOL_IDLE_COUNT

Le nombre actuel de connexions inactives dans le pool.

EXT_CONN_POOL_ACTIVE_COUNT

Le nombre actuel de connexions actives dans le pool.