Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
738 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Faire un Rollback Globale apres plusieur commit successif

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire un Rollback Globale apres plusieur commit successif

n°1232254
molarisapa
Posté le 27-10-2005 à 11:31:43  profilanswer
 

bonjour, :jap:  
 
je suis en train de créer un processus. C'est une procédure PL/SQL Oracle qui met a jour une volumétrie importante de données. Je suis par consequent obligé de faire des Commit régulièrement pour ne pas exploser les rollbacks segments.
 
Cépendant, je souhaiterais a la fin du processus, etre capable de faire un rollback général si tout ne s'est pas bien déroulé. Est ce possible?
 
merci pour les réponses  :bounce:  :bounce:


Message édité par molarisapa le 27-10-2005 à 12:19:32
mood
Publicité
Posté le 27-10-2005 à 11:31:43  profilanswer
 

n°1232302
olivthill
Posté le 27-10-2005 à 12:17:00  profilanswer
 

Non, ce n'est pas possble. Désolé.
 
Une solution consiste à faire une sauvegarde avant et une restitution après.
 
Une autre solution consiste à effectuer les tests péalables nécessaires pour ne pas s'engager dans un processus qui sera avorté.

n°1232715
cinocks
Posté le 27-10-2005 à 16:48:15  profilanswer
 

impossible de le faire. Un commit n'est pas reversible.


---------------
MZP est de retour
n°1232983
Beegee
Posté le 27-10-2005 à 21:37:20  profilanswer
 

Cependant, tu dois pouvoir revenir à un état précis de la base, en faisant appel à un DBA, mais ce n'est pas du SQL, ce sont des fonctionnalités Oracle, à prévoir.
 
(utile uniquement si ton process est particulier et effectué une seule fois, par exemple)

n°1233302
molarisapa
Posté le 28-10-2005 à 11:16:23  profilanswer
 

mon process sera lancé par un excecutable VB une fois par an. je vais donc faire via le prog VB, un dump de la base avant le process. et une fois le traitement terminé, j'afficherai un message utilisateur pour dire (traitement terminé avec erreur, voulez vous réinitialiser la base à l'état avant le traitement ....) et je ferai un import

n°1234386
Arjuna
Aircraft Ident.: F-MBSD
Posté le 30-10-2005 à 11:05:55  profilanswer
 

Petite précision.
 
Oracle, comme beaucoup de sgbd, support les transactions imbriquées.
 
Donc en réalité, si, c'est tout à fait possible de faire un rollback après une série de commit.
 
Par contre, ça ne résoud pas le problème initial, puisque commiter une sous-transaction ne participe pas à réduire la taille du rollback segment.
 

Code :
  1. declare verif number;
  2. declare verif2 number;
  3. begin transaction permiere;
  4. update toto set truc = 'machin' where test > 0;
  5. begin transaction seconde;
  6. delete toto where truc = 'machin' where test = 1;
  7. select count(*) into verif where truc = 'machin';
  8. if verif > 0
  9. begin
  10.    rollback seconde;
  11. end
  12. else
  13. begin
  14.    commit seconde;
  15. end;
  16. select count(*) into verif2 where truc <> 'machin';
  17. if verif2 > 0
  18. begin
  19.    commit premiere;
  20. end
  21. else
  22. begin
  23.    rollback premiere; -- Ceci va annuler tout le lot, y compris la transaction "seconde" si elle a été commitée.
  24. end;


 
Normalement, à quelques problèmes de syntaxe près, ça doit marcher.
Et on vois bien à quoi sert de faire deux transactions imbriquées.


Message édité par Arjuna le 30-10-2005 à 11:08:06
n°1234397
Beegee
Posté le 30-10-2005 à 11:48:36  profilanswer
 

On peut aussi faire sous Oracle :
 
SAVEPOINT <savepoint name>;
 
(...)
 
ROLLBACK TO <savepoint name>;
 
Assez pratique à l'usage, quand on veut faire des COMMIT tous les 1000 enregistrements, tout en gardant la possibilité d'annuler juste une partie des traitements.

n°1234400
Arjuna
Aircraft Ident.: F-MBSD
Posté le 30-10-2005 à 11:58:15  profilanswer
 

en effet :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Faire un Rollback Globale apres plusieur commit successif

 

Sujets relatifs
Variable globale[C++]Appeler une variable globale de DLL en C++
Merge: plusieur valeurs avec validationVariable globale
Rollover differants sur plusieur images ?? (avec des exemples...)Je recherche un tchat (avec plusieur salon) pour mon site svp
Definir plusieur couleur de liensite flash/php, demande de conseils pour la structure globale
plusieur formulaireInitialisation complexe d'une variable globale ("code static")
Plus de sujets relatifs à : Faire un Rollback Globale apres plusieur commit successif


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR