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

Connexion aux bases de données Firebird Discussion :

Trigger et Deadlock


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Points : 20
    Points
    20
    Par défaut Trigger et Deadlock
    Bonjour à tous,

    Je travaille sur une application redondée, avec 2 serveurs. Sur chacun des serveurs se trouve un base de données, et le but est de répliquer la base du serveur actif (qui se rempli régulièrement), sur le serveur passif.

    Pour cela, les bases contiennent deux tables, qu'on appelera A et B. En fait, B contient exactement les mêmes champs que A, avec en plus un champ "A répliquer". Il y a un trigger sur A, qui fait en sorte que dès qu'il y a une entrée, on la copie dans B, avec le champ "A répliquer" à 1.

    Le serveur passif a pour but de régulièrement lire la table B du serveur actif, et de recopier dans sa table A toutes les entrées de la table B qui ont le champ "A répliquer" à 1. Pour cela, une transaction est utilisée ainsi (sur le serveur passif) :
    Debut Transaction
    On recupère les lignes de la table B du serveur actif avec le champ "A répliquer" à 1
    On les écris localement sur la table A
    On met le champ "A répliquer" à 0 des lignes répliquées de la table B du serveur actif
    Fin Transaction

    Cela fonctionne la plupart du temps, mais de temps en temps, je tombe sur un deadlock :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    *** IBPP::Exception inside Statement::Execute ***
     
    IBPP Message : isc_dsql_execute2 failed.
     
    SQL Message : -913
    deadlock
    .
     
    Engine Code    : 335544336
    Engine Message :
    deadlock
    update conflicts with concurrent update
    Donc ma question est la suivante : d'où pourrait venir ce deadlock, étant donné que durant la transaction, seul le trigger du serveur actif va agir sur la table B. Le déclenchement du trigger pendant la transaction du serveur passif peut déclencher ce deadlock ?

    J'espère avoir été assez clair, et merci pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    Petite info supplémentaire : j'observe le deadlock dans les logs du serveur passif, c'est à dire pendant la Transaction qui sert à répliquer.

  3. #3
    Membre régulier Avatar de Moine
    Inscrit en
    Mars 2006
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 210
    Points : 90
    Points
    90
    Par défaut Trigger et Deadlock
    Modifie la transaction comme suit:

    Debut Transaction
    On recupère les lignes de la table B du serveur actif avec le champ "A répliquer" à 1
    On les écris localement sur la table A
    Fin Transaction
    donne uniquement la possibilité à ton trigger de mettre "A Reppliquer" à 1. ok?

    ton trigger et les operations effectuées dans ta transaction sont à l'origine du deadlock. Tiens nous au courant!
    Vive les bug!
    Ils font découvrir beaucoup de choses.

  4. #4
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Par défaut
    il faudrait aussi connaitre quels types de transactions sont utilisées
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  5. #5
    Membre actif Avatar de TMuet
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2003
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 225
    Points : 288
    Points
    288
    Par défaut
    ...et peut-être accroître légèrement le temps de déclenchement du deadlock.

Discussions similaires

  1. Trigger deadlock alter session
    Par tropiko dans le forum Oracle
    Réponses: 9
    Dernier message: 13/12/2012, 10h11
  2. Trigger d'alerte (email ou non) sur deadlock
    Par 2nd Floor dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 31/10/2012, 16h11
  3. Triiger DeadLock Stop trigger
    Par olibara dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 11/03/2011, 17h49
  4. Procédure stockée déclenchant un trigger et Deadlock
    Par elsuket dans le forum Développement
    Réponses: 1
    Dernier message: 16/07/2007, 14h08
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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