IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Kill d'un processus impliquant une requête contenue dans une transaction


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut Kill d'un processus impliquant une requête contenue dans une transaction
    Bonjour,
    Depuis un client lourd, via une connexion ODBC,un client enregistre une facture correspondant, très schématiquement à 3 tables : une table avec un entete, une table avec n lignes et une table avec un pied.
    L'enregistrement dans les 3 tables se fait à l'intérieur d'une transaction.
    Pour une raison encore inconnue, la tentative d'insertion dans la table d'entête entraine est à l'origine de nombreux blocages d'autres requêtes.
    L'administrateur de l'application a tué le processus via le moniteur d'activité du management Studio. L'entête n'a pas été créé, mais les lignes et le pied l'ont été et la transaction commitée car il n'y a pas eu de retour d'erreur.
    Il y a t-il un moyen (simple ?) de détecter qu'un processus a été tué et que donc il ne faut pas commiter la transaction ?
    D'avance, merci pour vos lumières.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 438
    Par défaut
    Bonjour,
    En toute logique, si le process a été "tué" alors que la transaction était toujours en cours, elle devrait être "annulée" automatiquement (rollback), et de fait aucune table ne devrait être impactée ici et aucune ligne insérée dans aucune des 3 tables.
    Si des lignes et un pied sont présents, c'est que la transaction a été validée par l'application. Et s'il manque l'entête, c'est soit que chaque insertion est faite dans sa propre transaction, soit que l'insertion a échoué et que l'application a quand même inséré les lignes et le pied de la commande.

    Ce qui me choque ici est que des lignes soient présentes alors que l'entête est absent.
    Il n'y a aucune contrainte d'intégrité référentielle entre ces tables ?

    Tatayo.

  3. #3
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    En toute logique, si le process a été "tué" alors que la transaction était toujours en cours, elle devrait être "annulée" automatiquement (rollback), et de fait aucune table ne devrait être impactée ici et aucune ligne insérée dans aucune des 3 tables.
    Oui, c'est ce que je pensais aussi.
    Citation Envoyé par tatayo Voir le message
    Si des lignes et un pied sont présents, c'est que la transaction a été validée par l'application. Et s'il manque l'entête, c'est soit que chaque insertion est faite dans sa propre transaction, soit que l'insertion a échoué et que l'application a quand même inséré les lignes et le pied de la commande.
    Pourtant le code de l'application ne semble pas le faire. La réussite de chaque requête est testée et si une erreur est détectée, la transaction est annulée et le traitement abandonné.
    Citation Envoyé par tatayo Voir le message
    Ce qui me choque ici est que des lignes soient présentes alors que l'entête est absent.
    Il n'y a aucune contrainte d'intégrité référentielle entre ces tables ?

    Tatayo.
    Hélas, pas (encore) de gestion de l'intégrité référentielle. L'application n'a pas loin de 30 ans. Le "MCD" a le même âge et je m'emploie à le moderniser, mais je n'en suis pas encore là...

Discussions similaires

  1. [MySQL-5.5] Comment exécuter une requête contenue dans une variable
    Par ticleaders dans le forum Requêtes
    Réponses: 0
    Dernier message: 24/02/2014, 00h41
  2. Exécuter une requête contenue dans une variable
    Par Passepoil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/07/2010, 20h50
  3. Faite une requête avec une variable contenu dans un champ
    Par Space Cowboy dans le forum Débuter
    Réponses: 3
    Dernier message: 18/11/2008, 14h45
  4. Réponses: 2
    Dernier message: 19/03/2008, 23h43
  5. [ADO] Exécuter des requêtes contenues dans un fichier SQL
    Par Lucas Panny dans le forum Visual C++
    Réponses: 1
    Dernier message: 29/01/2008, 06h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo