Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
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 24/05/2006, 17h10   #1
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
Par défaut SQL*Plus commit on exit

Par défaut, lorsque l'on quitte SQL*Plus par un exit. Il fait un commit implicite. J'ai un lointain souvenir qui me dit qu'il est possible de remplacer ce commit par un rollback (ce qui peu etre sympa pour eviter des erreurs sur une base de prod).

Est ce que quelqu'un a une idée de comment cela se fait ?

Merci,
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 17h25   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Je crois qu'on peut seulement forcer un ROLLBACK en cas d'erreur avec:

Code :
1
2
 
WHENEVER SQLERROR EXIT ROLLBACK;
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 17h25   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
je crains que non... ce n'est pas possible

pifor -> en effet
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 17h31   #4
Membre éclairé
 
Avatar de Wurlitzer
 
Inscription : avril 2006
Messages : 465
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 465
Points : 368
Points : 368
permet de faire volontairement un rollback. Moi, je cherche a éviter de faire involontairement un COMMIT en tapant EXIT par erreur (par un malheureux reflexe trop rapide).

Je suis quasiment sur que c'est possible mais impossible de remettre la main dessus. Je vais rechercher dans mes archives.....
Wurlitzer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 17h41   #5
Membre actif
 
Inscription : avril 2006
Messages : 133
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : avril 2006
Messages : 133
Points : 156
Points : 156
Pour info, un petit récapitulatif qui peut être utile :

Citation:
Oracle part du principe qu'une transaction (update, insert, delete) sera 99% du temps commitée.
Il y a très peu de cas où le rollback se fait automatiquement

Liste des cas où l'on "commit" automatiquement :
Imaginons une table test avec 1 enregistrement :
Code :
1
2
3
 
DELETE FROM test;
1 lignes supprimée
Si vous lancez à la suite de cela , l'uns des ordres suivants, alors vous "commitez" la ou les transaction(s) effectuée(s) précédement :

Code :
1
2
3
4
5
6
7
8
9
10
11
connect XX/XX@BASE
disconnect
exit;
quit;
Alter XXX,
Create XXX
Drop XXX
Rename XXX
Truncate XXX
et évidement : commit;
Cas ou l'on Rollback :

Code :
1
2
3
4
5
6
 
CTRL ALT DEL
Rollback
Fermer la fenêtre par l'intermediaire de la croix
RESET
ON/OFF
NB : Taper "exit" dans une session sqlplus n'a pas le même comportement que "tuer" la session par l'intermédiaire de la croix ...

Exit = commit + fermeture sqlplus
Croix = rollback + fermeture sqlplus


Cas des PL/SQL :

Lorsque vous réalisez des traitements en PL/SQL, faire très attention aux traitements d'erreur :
Cas de commit automatique :

Code :
1
2
3
Whenever sqlerror exit ===> le traitement sort sans erreur, et les transactions sont commitées !!!!!
 
Whenever sqlerror exit failure ===> le traitement sort en erreur mais commit !!!!!
Cas de rollback :

Code :
1
2
Whenever sqlerror rollback ===> le traitement rollback 
Whenever sqlerror exit failure rollback; ===> le traitement rollback et sort en erreur.
Enfin, il est certaines fois utile de vérifier le paramètre : autocommit de sqlplus :
pour cela saisir l'ordre suivant une fois connecté :
Si ce paramètre est positionné à : "ON", alors tout ordre de mise à jour dans la session sera commité unitairement et automatiquement (rollback inéfficace ...)

S'il est à "OFF" (position par défaut), alors cela laisse le choix de saisir "commit;" pour valider ou "rollback;" pour annuler.

En résumé et pour finir :
Le mécanisme de sécurité et d’intégrité basique d’Oracle fait qu’une transaction est automatiquement annulée en cas de défaillance :
soit du poste client,
soit du serveur,
soit du réseau.
(CTRL + ALT + DEL du PC client par exemple).
[/FONT]
jlucch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2010, 10h47   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2010, 11h37   #7
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Citation:
Envoyé par jlucch Voir le message
Oracle part du principe qu'une transaction (update, insert, delete) sera 99% du temps commitée.
Il y a très peu de cas où le rollback se fait automatiquement
Hum... Les concepteurs de SQL*PLUS oui... Pas "Oracle"

Il n'existe aucun commit implicite par défaut au niveau de la base de données lors de la deconnexion.

Si SQL*Plus commit, c'est qu'ils committent volontairement par défaut dans le code de C de SQL*PLUS lors de la déconnexion.
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2010, 13h31   #8
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Citation:
Envoyé par laurentschneider Voir le message
Oui mais seulement à partir de la 11.2:
http://download.oracle.com/docs/cd/E...w.htm#BGGBBGFI

soit seulement depuis un peu plus de 3 mois sur Windows et 10 mois sur Linux.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor 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 12h18.


 
 
 
 
Partenaires

Hébergement Web