Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Débuter
Débuter Forum d'entraide pour débuter avec Firebird
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 17/05/2005, 19h10   #1
Invité de passage
 
Inscription : mai 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 12
Points : 1
Points : 1
Par défaut Perte de données Firebird

Bonjour,

Je rencontre un problème avec Firebird v1.0 sur un serveur Linux. En fait, cela fait 2 fois que je perds toutes informations que j'ai saisies pendant une journée complète.
Il n'y a pas de plantage sur le serveur ni sur le poste client, le serveur firebird n'a pas redémarré. J'utilise un alias BDE pour me connecter qui est bien configurer sans cache schema database.
Sur ma base j'ai vérifié le paramètre Forced Writes qui est à Enable.
Donc je sèche complètement. Si qq'un a déjà rencontré ce cas ou à une idée, je suis preneur.
Merci
jeanafond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2005, 20h45   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Le disque n'est pas "full" ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2005, 23h26   #3
Membre éprouvé
 
Avatar de JustMe
 
Inscription : juillet 2002
Messages : 432
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 432
Points : 441
Points : 441
Tu le fais avec des transactions?
__________________
<On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**
http://www.mobile-tactile.com/
JustMe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 08h54   #4
Invité de passage
 
Inscription : mai 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 12
Points : 1
Points : 1
Le disque n'est pas full et il n'y a pas de transactions. J'écris directement dans la base de données.
Est-ce qu'il y a des indicateurs qui permettent de revenir comme cela à un état préalable de l'état de la base de données? Si oui, est-ce que vous pouvez m'indiquer quels sont ces marqueurs et s'il est possible de forcer un commit qui écrit les nouvelles données dans la base merci.
jeanafond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 10h01   #5
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Citation:
Envoyé par jeanafond
et il n'y a pas de transactions. J'écris directement dans la base de données.
Quand je lis ca je me dit que vous ne savez pas utilisé les transactions.

Vous êtes comme monsieur Jourdain vous faites de la prose sans le savoir, vous ce sont les transactions que vous faites sans le savoir.

En effet fb ou Ib ouvrent une transaction même pour un simple select.

Par defaut (donc sans paramétrage de votre part) la transaction est de type snapshoot c'est a dire l'isolation la plus forte.

Si vous ne faites jamais de commit les autres utilisateurs ne voient pas les modifications que vous faites et vous ne voyez pas les modifs des autres même ci ceux ci les commits.

De plus en fermeture de votre application vous avez un rollback automatique toutes les données que vous avez pu modifiées ou créées sont annulées...

Je vous suggère d'étudier de plus pres les transactions sans quoi vous risquez d'avoir de drole de surprises.

Ce qui m'étonne tout de même c'est que vous utilisiez BDE pour un nouveau développement alors que celui ci est abandonné par Borland. de plus normalement le BDE fait un commit automatique en fin d'appli il me semble à moins que vous n'ayez touché à quelques paramètres.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 12h02   #6
Invité de passage
 
Inscription : mai 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 12
Points : 1
Points : 1
Merci pour vos explications. Mais mon problème c'est comme je l'ai précisé que je n'ouvre pas de transactions. J'utilise le BDE car ce n'est pas un nouveau développement.
Ce qu'il s'est passé. Les utilisateurs ont travaillé toute la journée sans problèmes, chacun voyant ce que les autres saississent (ce qui me fait dire que les données sont bien dans la base et commité).
D'habitude tout se passe bien, il se trouve que 2 fois on s'est retrouvés à perdre toutes les données de la journée, ce que je n'explique pas.

Merci encore pour votre aide

Monsieur Jourdain qui n'utilise pas de transaction
jeanafond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 15h17   #7
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Citation:
Envoyé par jeanafond
Mais mon problème c'est comme je l'ai précisé que je n'ouvre pas de transactions.
oui BDE le fait pour vous... Quoique vous fassiez sous fb c'est obligatoirement dans une transaction (meme une simple lecture)
Citation:
Envoyé par jeanafond
J'utilise le BDE car ce n'est pas un nouveau développement.
C'est une bonne raison. Mais alors comment fonctionnait cette aplication avant ?? il n'y avait pas ce problème ?

Citation:
Envoyé par jeanafond
Ce qu'il s'est passé. Les utilisateurs ont travaillé toute la journée sans problèmes, chacun voyant ce que les autres saississent (ce qui me fait dire que les données sont bien dans la base et commité).
Oui c'est vrai avec des transactions classiques (read comited ) c'est tout à fait exacte.

Citation:
Envoyé par jeanafond
D'habitude tout se passe bien, il se trouve que 2 fois on s'est retrouvés à perdre toutes les données de la journée, ce que je n'explique pas.
C'est alléatoire ou vous avez réussi à isolé un cas de figure ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2005, 19h18   #8
Invité de passage
 
Inscription : mai 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 12
Points : 1
Points : 1
Le fonctionnement de l'application n'a pas changé.
Le problème est aléatoire, il s'est produit deux fois et je suis incapapble de le reproduire.
C'est pour cela que je viens chercher de l'aide sinon j'aurais sûrement pu touver le cas en debuggage sur mon appli.
En tout cas merci pour votre aide, toute idée est la bienvenue
jeanafond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2005, 10h21   #9
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Avez vous regardé dans firebird.log ?

Sinon vous pouvez aussi créé vos propres logs

Par exemple créé une table EXTERNE avec
une colonne DATE_EVENEMENT char(24)
une colonne TYPE_ACTION char(20)
une colonne TABLE CHAR(40)
une colonne USERNAME varchar(40)
une colonne LIBELLE char(80)

puis vous crééz des triggers after insert, update, delete sur les tables à logger.

Dans lequel vous faites des insert dans la table externe

DATE_EVENEMENT = cast(cast('now' as timestamp) as varchar(24))
TYPE_ACTION = 'INSERT'
TABLE = 'MA_TABLE'
USERNAME = USER;
LIBELLE = NEW.ID || ' ' || ...
Par exemple.

Il faut savoir que les tables externes sont hors transaction. Ce qui veux dire que si vous faite un rollback de votre transaction ce qui a été inséré dans votre table externe n'est pas enlevé.
Et donc vous aurez ainsi une log basique.
Barbibulle 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 11h04.


 
 
 
 
Partenaires

Hébergement Web