Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
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 21/12/2010, 08h34   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 53
Points : 13
Points : 13
Par défaut question de base sur les transactions

Bonjour a tous,
revoilà avec une autre question
d'après ce que j'ai compris sur les transactions , ces derniers ne sont validé ou annulé qu'âpres un commit ou rollback mais dans l'exemple ci-dessous ( traite le probleme de gestion de concurrence) on voit que la modification dans operation1 prend lieu même si on pas encore fait de commit ( ou c'est moi qui a mal compris et on peu faire un commit puis un rollback )



pourriez vous m'éclaircir ce qui se passe vraiment?
merci
nouraty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 10h24   #2
Membre expérimenté
 
François
Inscription : février 2010
Messages : 305
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 305
Points : 535
Points : 535
Bonjour,


Tout depend du niveau d'isolation choisie.
http://download.oracle.com/docs/cd/B...c.htm#g1026777
Dans votre exemple, on ne fonctionne pas en read commited car la transaction numero 2 lit les valeurs de la 1 qui ne sont pas validees (ou annulees)
Mais ce probleme vient du schema en lui meme. L'etat de la base n'est pas bon au temps 3, comme la transaction n'a pas valide on ne peut pas avoir une valeur d'inscrite en dur de 1500. Ou alors c'est l'annulation de transaction au point 8 qui est bizarre, en pensant annule un changement qui a deja ete valide.

De base (avec le mode de transaction classique) ca ne fonctionne pas comme ca.
Code :
1
2
3
4
5
6
7
8
9
Session 1:
FRANCOIS>CREATE TABLE tmp (n number);
TABLE created.
 
FRANCOIS>INSERT INTO tmp VALUES (1000);
1 row created.
 
FRANCOIS>commit;
Commit complete.
Code :
1
2
3
4
5
Session 2:
FRANCOIS>SELECT * FROM tmp;
         N
----------
      1000
Code :
1
2
3
4
5
6
7
8
9
 
Session 1:
FRANCOIS>UPDATE tmp SET n=n +500;
1 row updated.
 
FRANCOIS>SELECT * FROM tmp;
         N
----------
      1500
Code :
1
2
3
4
5
6
Session 2:
FRANCOIS>SELECT * FROM tmp;
         N
----------
      1000
FRANCOIS>UPDATE tmp SET n=n +3000;
La session 2 est bloque car elle veut mettre a jour les memes lignes que la session 1. Tant qu'on ne fait pas un commit ou rollback ca va rester dans cet etat la. De plus, la valeur lue par la session 2 est la derniere valeur consistante de la base (propriete ACID), soit 1000 et non pas 1500.

Code :
1
2
3
4
Session 1:
FRANCOIS>rollback
  2  ;
Rollback complete.
A l'instant ou on fait le rollback, la session 2 se debloque:
Code :
1
2
3
4
5
6
7
8
Session 2:
 
1 row updated.
 
FRANCOIS>SELECT * FROM tmp;
         N
----------
      4000
Edit:
Je me disais aussi...
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 11h21   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Code :
UPDATE tmp SET n=(SELECT n FROM tmp) +500;
Euh.. c'est quoi cette syntaxe ??

=>
Code :
UPDATE tmp SET n= n +500;
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2010, 21h51   #4
Candidat au titre de Membre du Club
 
Inscription : octobre 2008
Messages : 53
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 53
Points : 13
Points : 13
Merci bien je comprends mieux maintenant
nouraty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h23.


 
 
 
 
Partenaires

Hébergement Web