OVH Cloud OVH Cloud

connection db fermée

7 réponses
Avatar
William Dode
slt,

Comment peut-on reconnaitre d'une manière générique qu'une connection a
une base de données est fermée ? Si par exemple le serveur de base de
données a redémarré...


--
William Dodé - http://flibuste.net

7 réponses

Avatar
bruno at modulix
William Dode wrote:
slt,

Comment peut-on reconnaitre d'une manière générique qu'une connection a
une base de données est fermée ? Si par exemple le serveur de base de
données a redémarré...


Que se passe-t'il si on tente de faire une requête dans ce cas ?


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
William Dode
On 24-04-2006, bruno at modulix wrote:
William Dode wrote:
slt,

Comment peut-on reconnaitre d'une manière générique qu'une connection a
une base de données est fermée ? Si par exemple le serveur de base de
données a redémarré...


Que se passe-t'il si on tente de faire une requête dans ce cas ?


Une exception est levée, mais ça ne me dit pas si je dois redemander une
connexion et relancer la requete.


--
William Dodé - http://flibuste.net


Avatar
Méta-MCI
Bonsoir !

Il y a tellement de cas possible, qu'une solution générique semble
difficile.

Par exemple, une fois une connexion établie, débranche la prise réseau,
alors que le serveur continue de fonctionner normalement...

@+

MCI
Avatar
Bruno Desthuilliers
On 24-04-2006, bruno at modulix wrote:

William Dode wrote:

slt,

Comment peut-on reconnaitre d'une manière générique qu'une connection a
une base de données est fermée ? Si par exemple le serveur de base de
données a redémarré...


Que se passe-t'il si on tente de faire une requête dans ce cas ?


Une exception est levée,


Donc, il suffit de tenter d'exécuter une requête, et de regarder si ça
lève une exception, non ?-)

NB: si je jette un coup d'oeil dans le pep 249, je trouve ça:

"""
OperationalError

Exception raised for errors that are related to the
database's operation and not necessarily under the control
of the programmer, e.g. *an unexpected disconnect occurs*,
the data source name is not found, a transaction could not
be processed, a memory allocation error occurred during
processing, etc. It must be a subclass of DatabaseError.

InternalError

Exception raised when the database encounters an internal
error, e.g. *the cursor is not valid anymore*, the
transaction is out of sync, etc. It must be a subclass of
DatabaseError.
"""


mais ça ne me dit pas si je dois redemander une
connexion et relancer la requete.



Bin, ça, c'est à ton programme de gérer le problème.

Plus sérieusement: si je comprend bien, ton problème est de déterminer
si l'exception qui est levée est bien liée à une coupure momentanée de
la connection, ou à un autre problème. Je viens de parcourir le pep 249
sans trouver grand chose à ce propos. Bref, à part retenter une
connection + requête, et regarder si tu a une exception similaire (même
type et même message), je ne vois pas trop...

Désolé.



Avatar
William Dode
On 25-04-2006, Bruno Desthuilliers wrote:
On 24-04-2006, bruno at modulix wrote:

William Dode wrote:

slt,

Comment peut-on reconnaitre d'une manière générique qu'une connection a
une base de données est fermée ? Si par exemple le serveur de base de
données a redémarré...


Que se passe-t'il si on tente de faire une requête dans ce cas ?


Une exception est levée,


Donc, il suffit de tenter d'exécuter une requête, et de regarder si ça
lève une exception, non ?-)

NB: si je jette un coup d'oeil dans le pep 249, je trouve ça:

"""
OperationalError

Exception raised for errors that are related to the
database's operation and not necessarily under the control
of the programmer, e.g. *an unexpected disconnect occurs*,
the data source name is not found, a transaction could not
be processed, a memory allocation error occurred during
processing, etc. It must be a subclass of DatabaseError.

InternalError

Exception raised when the database encounters an internal
error, e.g. *the cursor is not valid anymore*, the
transaction is out of sync, etc. It must be a subclass of
DatabaseError.
"""


mais ça ne me dit pas si je dois redemander une
connexion et relancer la requete.



Bin, ça, c'est à ton programme de gérer le problème.

Plus sérieusement: si je comprend bien, ton problème est de déterminer
si l'exception qui est levée est bien liée à une coupure momentanée de
la connection, ou à un autre problème. Je viens de parcourir le pep 249
sans trouver grand chose à ce propos. Bref, à part retenter une
connection + requête, et regarder si tu a une exception similaire (même
type et même message), je ne vois pas trop...


Ce qui est dommage c'est que quand l'exception est levée, dans pyscopg,
il m'indique bien "la connection est fermée"... Je vais peut-être aller
fouiller dans le source pour voir si je ne peux pas retrouver cette info
quelque part...



Désolé.


Ce que je trouve curieux c'est qu'il ne semble pas que d'autres
personnes se préocupent de ça, alors que ça me parait assez classique
comme problème non ?

--
William Dodé - http://flibuste.net




Avatar
Méta-MCI
Bonjour !

Ce que je trouve curieux c'est qu'il ne semble pas que d'autres
personnes se préoccupent de ça, alors que ça me parait assez classique
comme problème non ?




Effectivement. Mais, il y a tellement de cas différents...

Déjà, tu supposes ignorer le mode "déconnecté". Or cette façon de travailler
est assez à la mode. Dans le mode déconnecté, la connexion est coupée, entre
chaque requête, et rétablie au besoin. Dans ce cas une coupure ponctuelle
peut très bien être sans effets, si elle est restaurée à temps.
A contrario, dans le mode connecté, la connexion est permanente. En cas de
coupure, cela provoque une erreur, même si le système client ne fait rien.

Par exemple, DAO travaille en mode déconnecté. Les connections ODBC peuvent
travailler dans les deux modes, selon le driver. Perso, je travaille souvent
avec un connecteur peu connu, appelé SQL-link. Ce connecteur travaille en
mode connecté, ce qui a pour résultat d'être quatre ou cinq fois plus rapide
qu'ODBC, mais est plus sensible aux ruptures de connexion. Du coup, je gère
par programme les déconnections/reconnections.



Un autre aspect, c'est de savoir si le système SGBD utilisé supporte ou non
le transactionnel (avec persistance des transactions), et/ou la
journalisation.




Cependant, je suis assez d'accord avec le manque d'intérêt manifesté pour ce
domaine, dans les newsgroups et autres forums. Il faut croire qu'il n'y a
pas beaucoup de monde qui travaille dans les projets de gestion en
entreprise...



@-salutations

Michel Claveau



Avatar
William Dode
On 27-04-2006, Méta-MCI wrote:
Bonjour !

Ce que je trouve curieux c'est qu'il ne semble pas que d'autres
personnes se préoccupent de ça, alors que ça me parait assez classique
comme problème non ?




Effectivement. Mais, il y a tellement de cas différents...

Déjà, tu supposes ignorer le mode "déconnecté". Or cette façon de travailler
est assez à la mode. Dans le mode déconnecté, la connexion est coupée, entre
chaque requête, et rétablie au besoin. Dans ce cas une coupure ponctuelle
peut très bien être sans effets, si elle est restaurée à temps.


Je ne l'ignore pas, justement je cherche à le reconaitre ! Mais je ne
veux pas non plus fermer la connexion entre chaque requetes ça serait
beaucoup trop couteux.

A contrario, dans le mode connecté, la connexion est permanente. En cas de
coupure, cela provoque une erreur, même si le système client ne fait rien.

Par exemple, DAO travaille en mode déconnecté. Les connections ODBC peuvent
travailler dans les deux modes, selon le driver. Perso, je travaille souvent
avec un connecteur peu connu, appelé SQL-link. Ce connecteur travaille en
mode connecté, ce qui a pour résultat d'être quatre ou cinq fois plus rapide
qu'ODBC, mais est plus sensible aux ruptures de connexion. Du coup, je gère
par programme les déconnections/reconnections.



Un autre aspect, c'est de savoir si le système SGBD utilisé supporte ou non
le transactionnel (avec persistance des transactions), et/ou la
journalisation.




Cependant, je suis assez d'accord avec le manque d'intérêt manifesté pour ce
domaine, dans les newsgroups et autres forums. Il faut croire qu'il n'y a
pas beaucoup de monde qui travaille dans les projets de gestion en
entreprise...



@-salutations

Michel Claveau






--
William Dodé - http://flibuste.net