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

Oracle Discussion :

COMMIT or not COMMIT ?


Sujet :

Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 38
    Par défaut COMMIT or not COMMIT ?
    Bonsoir à tous,
    Oracle 9.2 Enterprise Edition sous Windows XP en poste local.
    Voilà.. Je m'autoforme sur Oracle. Avec mon bouquin je travaille sur Oracle depuis deux mois dans les interfaces SQL*Plus, SQL*Plus graphique, SQL*Plus worksheet et isqlPlus.
    je te lançe des scripts sql, des LDD, des LMD, etc...
    Je n'ai jamais tapé un COMMIT de ma vie et je ferme les fenêtres sans jamais me déconnecter (la petite croix en X de windows).
    Mes tables sont remplies d'une session à l'autre, tout va bien !
    Depuis hier je travaille sur les transactions et je découvre COMMIT.
    Et maintenant, tenez-vous bien ! Si je sors sans me déconnecter les données ne sont plus mémorisés comme avant !
    Or, dans isqlPlus AUTOCOMMIT est toujours sur OFF.
    Il fallait peut-être sauter la leçon sur les transactions ?
    Qui peut m'éclairer sur ce changement d'attitude de la part d'Oracle ?
    Question subsidiaire : existe-t-il un fichier à documenter pour que toutes les sessions soient en AUTOCOMMIT ON ?
    J'ai regardé dans les fichiers *.ora mais j'ai rien trouvé.
    D'avance, merci.
    Paul

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Je ne sais pas ce qu'en pense la majorité des experts qui passent par ici, mais pour moi, AUTOCOMMIT ON est une hérésie, c'est la négation de la notion de transaction qui est pourtant essentielle pour avoir en permanence une base de données cohérente.

    Le COMMIT, sous ORACLE, ne s'applique pas aux LDD.

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut Re: COMMIT or not COMMIT ?
    Citation Envoyé par PaulBilou
    Depuis hier je travaille sur les transactions et je découvre COMMIT.
    Et maintenant, tenez-vous bien ! Si je sors sans me déconnecter les données ne sont plus mémorisés comme avant !
    Or, dans isqlPlus AUTOCOMMIT est toujours sur OFF.
    Qui peut m'éclairer sur ce changement d'attitude de la part d'Oracle ?
    Sans doute que des esprits facétieux ont pris possession de votre PC !
    Ou bien, ce qui est plus probable, vous ne faites pas la même chose dans les deux cas.
    Pour rappel, une instruction du LDD commence par valider (COMMIT) automatiquement les éventuels ordres du LMD précédents.
    Donc si vous faites par exemple des INSERT, sans COMMIT, puis un CREATE TABLE, vos insertions seront validées automatiquement avant que le CREATE TABLE ne s'exécute.

    Citation Envoyé par PaulBilou
    Question subsidiaire : existe-t-il un fichier à documenter pour que toutes les sessions soient en AUTOCOMMIT ON ?
    Non, un tel comportement ne se définit pas au niveau de la base, mais au niveau de l'outil client, voire au niveau de la couche d'accès.
    C'est par exemple dans SQL*Plus, ou au niveau d'une connexion JDBC que vous pourrez activer une validation automatique.

    Mais systématiser un AUTOCOMMIT dans une application de production a de grandes chances d'être une très grave erreur. Il faut d'une part laisser le choix à l'utilisateur de confirmer ou d'annuler ses manipulations, et d'autre part, garantir, en tant que programmeur, qu'on ne peut pas laisser une opération à moitié terminée, et donc incohérente.
    L'exemple traditionnel étant le virement bancaire : il serait malvenu de ne faire que le débit sur le compte initial sans faire le crédit sur le compte destinataire.
    Gérer les transactions, c'est justement identifier les opérations "qui vont ensemble", et qui provoquent une incohérence si elles ne sont pas exécutées de bout en bout.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 38
    Par défaut
    merci Pomalaix pour cette réponse de qualité.
    Ou bien, ce qui est plus probable, vous ne faites pas la même chose dans les deux cas.
    Je me doute bien que la réponse est dans les nombreux scripts exécutés. Dans l'ensemble, tous mes scripts se terminent par un DESCRIBE et un SELECT des tables concernées plus un SELECT des objets du schéma. J'aurai aimé mettre le doigt sur mon ignorance car cela fait deux mois que j'ignore les COMMIT et les déconnexions propres !
    Non, un tel comportement ne se définit pas au niveau de la base, mais au niveau de l'outil client, voire au niveau de la couche d'accès.
    Mon propos n'est pas d'encourager l'AUTOCOMMIT : je comprends fort bien l'intérêt des transactions. Il est de savoir comment ça fonctionne. Sur un poste client on ferait comment pour vérifier l'état par DEFAUT du COMMIT ? Je précise : pas dans l'interface sqlPlus. Exemple : Quand on arrive dans isqlPlus AUTOCOMMIT est toujours sur OFF. Si on voulait qu'il soit toujours sur ON que faudrait-il faire sur le poste client ?

    Enfin, mon livre me dit que les COMMIT sont AUTO après les LDD, les LCD, une fin normale d'une session avec déconnexion et une fin anormale de session sans déconnexion. Est-ce exact ?

    Merci encore.
    Paul

Discussions similaires

  1. Fonction EXECUTE 'INSERT.. not commit
    Par spiale dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 05/09/2013, 20h09
  2. Réponses: 5
    Dernier message: 02/04/2009, 10h34
  3. Réponses: 0
    Dernier message: 24/06/2008, 23h51
  4. [CVS] Problème de commit (Could not open lock file)
    Par 1tox dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 19/10/2004, 11h22
  5. commit et rollback....?
    Par The_Nail dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/06/2003, 14h36

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