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

Administration Oracle Discussion :

Gestion des sous-transactions avec trigger? [11gR2]


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Gestion des sous-transactions avec trigger?
    Bonjour,

    Je voudrais savoir si Oracle gère ce qu'on pourrait appeler une sous-transaction dans une transaction quand j'utilise un trigger?

    Test 1 : je fais un Insert (OK), un Delete (OK), un Update de 100 lignes (KO) --> l'Insert et le Delete ne sont pas annulés, seule la totalité de l'Update est annulée par oracle, indépendamment du fait que je ferais ensuite un Commit ou un Rollback.

    Test 2 : je fais un Insert (OK), un Delete (OK), un Update de 100 lignes (OK cette fois) avec un trigger AFTER UPDATE sur la table et dans ce trigger il y a un Insert dans une table des évènements qui échoue : dans ce cas l'Insert du Trigger est annulé MAIS AUSSI l'Update auquel est associé ce trigger (si mes souvenirs sont bons).

    D'après ce que j'avais vu, le trigger est donc relié à l'évènement déclencheur et il forme un tout avec lui.
    Je voudrais alors savoir quel est le terme utilisé par Oracle et les DBA pour désigner cet ensemble formé par un ordre DLM et son trigger : sous-transaction, bloc transactionnel... (c'est pour explorer ce mécanisme avec Google)?

    Dans la doc Oracle il existe un terme pour désigner le rollback des N opérations d'un Update multi-rows : c'est le "statement-level rollback" donc est-ce que c'est "Statement level" le mot que ke recherche même si je doute fortement?

    Par avance merci.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ben c'est une transaction. Le trigger fait partie de la transaction.

    A noter que dans le test 1, si l'insert, le delete et l'update sont dans un bloc begin end le tout est rollbacker, mais si l'exception when others est catchée alors c'est différent...

    Peut être que le terme qui vous intéresse est "atomic".

    Accessoirement, on avait eu une discussion intéressante sur les transactions il y a quelques années, avec de bons exemples, que je vous invite à lire :
    Prévoir un Rollback dans une procédure
    Avec quelques liens vers la doc, dont l'interprétation est potentiellement un peu ambiguë.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    skuatamad,

    J'ai fais les tests en SQL, pas en PL/SQL, sous SQL*Plus.

    OK, le trigger fait partie de la transaction, mais une transaction sous Oracle est elle-même divisée en N opérations qui sont, comme tu le dis, atomiques : un UPDATE sur 100 lignes va être entièrement annulé si l'Update de la dernière ligne plante alors que les 99 premiers sont OK.

    MAIS, dans mon exemple, l'Insert et le Delete ne sont pas annulés par Oracle si l'update plante --> donc les opérations atomiques d'une transaction sont indépendantes les unes des autres. En revanche, dans le cas du trigger, ce trigger fait partie de l'opération atomique Update, il n'est pas considéré par Oracle comme une opération atomique et indépendante, c'est cela qui m'a interpellé. Et donc je me suis dit que puisqu'on parle de transaction, d'opération, d'atomicité, il doit bien y avoir un mot pour désigner cet ensemble lié "trigger-opération".

    Dans la discussion que tu linkes, je suis allé sur la doc Oracle où il est marqué :
    http://docs.oracle.com/cd/B19306_01/...htm#sthref1488

    "How Oracle Does Implicit Rollbacks
    Before executing an INSERT, UPDATE, or DELETE statement, Oracle marks an implicit savepoint (unavailable to you). If the statement fails, Oracle rolls back to the savepoint. Usually, just the failed SQL statement is rolled back, not the whole transaction. If the statement raises an unhandled exception, the host environment determines what is rolled back."

    Dans mon cas, je comprends que Oracle positionne un Implicit Savepoint avant l'Update mais pas avant l'Insert du trigger ou avant l'exécution du trigger donc si l'Insert du trigger plante, le rollback a lieu jusqu'au précédent savepoint donc jusqu'à l'Update inclus.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    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 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    ...il doit bien y avoir un mot pour désigner cet ensemble lié "trigger-opération"...
    Pour ma part je ne connais pas d'appellation particulière pour ça.
    J'ai coutume de dire en formation que le déclencheur ordinaire (qui n'est pas en mode AUTONOMOUS_TRANSACTION) constitue un prolongement de l'instruction déclenchante, dont il est indissociable. C'est une sorte d'instruction augmentée.
    De ce fait, ils ont un destin commun, l'échec de l'un entraînant l'échec de l'autre.

    Tom Kyte en parle très clairement : https://asktom.oracle.com/pls/asktom...D:482821541531
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Gestions des pièces jointes avec RecordSet sous VBA
    Par Oxopor dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/07/2011, 10h59
  2. Réponses: 2
    Dernier message: 05/05/2010, 13h59
  3. Réponses: 3
    Dernier message: 13/08/2004, 18h52
  4. [TP]Gestion des images bmp avec BMP.TPU
    Par Gabi dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 14/05/2004, 23h20

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