Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2006, 09h23   #1
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
Par défaut FireBird et deadlock

Bonjour,

J'en ai déja parlé dans une autre discussion mais pas dans le détails.

Voici mon problème j'ai une application en reseau (Firebird superserver).

Et de temps en temps j'ai un problème de deadlock dont voici le message d'erreur :
Citation:
05/09/2006 11:08:13 - NUMEROTEUR.INIT_GET_NUM - deadlock - - update conflicts with concurrent update
Je ne comprends pas pourquoi j'ai cette erreure, pour information voici le code de mon application sur l'initialisation de des composants IB :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
*Pour le TIBDataBase
--------------------
     My_DATABASE:=TIBDataBase.CREATE(Nil);
     My_DATABASE.DatabaseName := PTR_WORK_QUERY.REPERTOIRE_BDD;
     My_DATABASE.SQLDialect := 3;
     My_DATABASE.Params.Clear;
     My_DATABASE.Params.ADD('user_name=SYSDBA');
     My_DATABASE.Params.ADD('password=masterkey');
     My_DATABASE.LoginPrompt := false;
     My_DATABASE.Connected := true;
 
*Pour le TIBTransaction
--------------------------
     MY_SESSION_TRANSACTION:=TIBTransaction.CREATE(Nil);
     MY_SESSION_TRANSACTION.DefaultDatabase := My_DATABASE;
 
*Pour le TIBQUERY
--------------------------
     MY_QUERY.DATABASE:=  My_DATABASE ;
     MY_QUERY.Transaction := MY_SESSION_TRANSACTION;
     MY_QUERY.Close;
     MY_QUERY.SQL.Clear;

Merci de votre aide.
Cordialement
QAYS
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 11h39   #2
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
ça ne suffit pas vraiment comme info
et le meilleur endroit pour ça est surement le forum Delphi, il y a même un sous forum spécial base de données
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 11h45   #3
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
Merci je vais voir
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2006, 18h57   #4
Membre du Club
 
Inscription : mai 2002
Messages : 56
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 56
Points : 65
Points : 65
Envoyer un message via ICQ à PierreY
Citation:
Envoyé par QAYS
*Pour le TIBTransaction
--------------------------
MY_SESSION_TRANSACTION:=TIBTransaction.create(Nil);
MY_SESSION_TRANSACTION.DefaultDatabase := My_DATABASE;

*Pour le TIBQUERY
--------------------------
MY_QUERY.Database:= My_DATABASE ;
MY_QUERY.Transaction := MY_SESSION_TRANSACTION;
[/CODE]
Il est là ton problème, on ne fait JAMAIS de transaction globale commun à tous les objets QUERY de l'application. C'est simple : JAMAIS.

S'il faut expliquer pourquoi je peux aussi, mais avant va faire un tour là :

http://firebird-fr.eu.org/article.php3?id_article=39

Ca explique à quoi sert un SGBD (Système de Gestion de Base de Données)... et pourquoi un imbécile à pondu cette idée géniale qu'est le concept de "Transaction".
PierreY est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2006, 23h06   #5
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 62
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 62
Points : 30
Points : 30
pierreY je n'ai pas bien compris ton explication et ton lien est dead
mon application n'est pas en delphi mais j'ai ce pb de deadlock et ton expliication a l'air d'etre "generale" ...

Peux tu en dire plus ? merci
]matmat[ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 09h20   #6
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
Salut.

En gros cela veut dire :
1° Eviter d'utiliser des transactions globales.
2° Il faut utiliser Commit/RollBack à la place de Commitretainning/Rollbackretainning

3 ° La durée d'une transaction doit être très courte
4° Bien configurer les transactions.

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h59.


 
 
 
 
Partenaires

Hébergement Web