IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sql*Plus Oracle Discussion :

SQL*Plus commit on exit


Sujet :

Sql*Plus Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    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,

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Je crois qu'on peut seulement forcer un ROLLBACK en cas d'erreur avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHENEVER SQLERROR EXIT ROLLBACK;

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    je crains que non... ce n'est pas possible

    pifor -> en effet

  4. #4
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    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.....

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    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
    Par défaut
    Pour info, un petit récapitulatif qui peut être utile :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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]

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    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

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2009, 17h25
  2. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44
  3. Réponses: 2
    Dernier message: 17/11/2004, 10h50
  4. Réponses: 2
    Dernier message: 01/06/2004, 15h08
  5. listage de triggers/sequences avec sql plus
    Par stross dans le forum Oracle
    Réponses: 52
    Dernier message: 20/04/2004, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo