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 :

Fonctionnement simplifié d'une transaction Oracle [Tutoriel]


Sujet :

Oracle

  1. #1
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut Fonctionnement simplifié d'une transaction Oracle
    Bonjour à tous.

    Suite à une discussion datant de mai 2004 (que je ne retrouve plus sur ce forum mais j'avais sauvegardé le texte, voir à la fin ), j'ai essayé de résumer dans un document le fonctionnement d'une transaction Oracle du point de vue des rollback segments, redo logs, fichiers de données et mémoire SGA.

    Je serais très reconnaissant à toute personne avisée de bien vouloir me faire ses remarques / corrections.

    Ce document se trouve ici :

    http://jack554.snoozland.com/oracle/trans_ora.doc

    D'autre part où peut-on trouver le "Concept Guide" cité dans cette discussion ?

    Merci par avance.

    Voici un extrait de la discussion initiale.


    Posté le: Mar Mai 18, 2004 15:44 Sujet du message: Redo logs, Rollbacks segments, Datafiles, SGA, SOS !

    --------------------------------------------------------------------------------

    Bonjour à tous

    DBA débutant, je me pose une question de fond ...

    Malgré toutes mes lectures sur le sujet, je n'ai pas trouvé d'explication schématique simple et claire permettant de comprendre PRECISEMENT, à l'aide d'un EXEMPLE tel que ci-dessous, ce qui se passe en mémoire SGA, dans les fichiers de journalisation, les fichiers de données et les segments d'annulation lors d'une transaction simple avec rollbacks et commits, avec panne ou sans panne.

    Exemple :

    1. UPDATE facture SET ttc = ht * 1.1;
    2. ROLLBACK;
    3. UPDATE facture SET ttc = ht * 1.2;
    4. COMMIT;

    Contenu de la table avant l'étape 1 :

    N° FACTURE HT TTC
    --------------- -- ---
    1 10 -
    2 20 -
    3 30 -

    Que se passe-t-il à chaque étape dans les mémoires / fichiers cités ci-dessus (SGA, redo log, rollback, datafile) ? Quel est leur CONTENU à la fin des étapes 1, 2, 3 et 4 :

    - si aucune panne
    - si panne pendant la transaction 1
    - si panne pendant le rollback 2
    - si panne pendant la transaction 3
    - si panne pendant le commit 4.

    Quelqu'un connaîtrait-il une doc PRECISE sur ce point, un bouquin, un site Web ?

    Merci par avance, je crois que cela éclaircirait beaucoup les principes, car un bon exemple vaut souvent mieux qu'un long discours ...
    _________________
    Jack.

    Revenir en haut


    helyos
    Redacteur (Oracle)



    Inscrit le: 15 Mai 2003
    Messages: 876
    Localisation: Oracle Inside
    Posté le: Mar Mai 18, 2004 15:54 Sujet du message:

    --------------------------------------------------------------------------------

    Oula alors je vais essayer de t'expliquer calmement (je passe ici les explications sur les verrous sinon je t'écris un bouquin)

    Au premier update

    Oracle vérifie la syntaxe de ta commande
    Si oui il enregistre la transaction dans les redo logs
    Ensuite si les blocs sont pas présent en mémoire il les prends sur le disques et les ramenes en mémoire SGA
    La il crée les images avant des blocs (avant modifs quoi qui sera utilisée par les autres user.) qu'il stocke dans les rollbacks segments et créer une image apres de bloc (celle avec laquelle tu vas travailler)

    Ensuite pour ton rollback
    Oracle ecris la fin de transaction dans les redo logs
    Efface les images apres correspondant à la transaction
    Remet les images avant comme étant la bonne version

    2 eme update
    Meme chose que le premier

    Commit
    Oracle utilise un procédé le FAST COMMIT
    C'est à dire que la premiere chose qu'il fait est qu'il ecris le commit dans les redo logs, comme ca si ca plante c'estplus grave car smon sera en mesure de relire les redo logs et de rejouer les données meme si elles sont pas écrites sur le disque.
    Une fois le commit enregistré, Il efface les images avant, et dis que les images apres sont les nouvelles versions des blocs

    Si y a panne pendant 1 bah c'est pas tres grave car smon rejouerea les transactions contenues dans les redo log et comme celle ci ne sera pas validée il rollback la transaction
    Pareil pour le 2
    Pareil pour le 3
    Si ca plante pendant le commit, a cause du fast commit il est pratiquement impossible de plante avant que le commit soit enregistré dans les redo log donc ca plante apres, donc les blocs sont pas ecris sur le disque

    C'est pas grave car notre pote smon se chargera de rejouer la transaction pour nous et de regenerer notre derniere version des donness

    J'espere que j'ai été assez clair...
    --------------------------------------------------------------------------------

    on peut ajouter que tous les x temps (ne rentrons pas ds les détails) , le database writer écrira les données modifiées (commitées ou non) dans les datafiles

    je te suggère de lire le Concepts Guide chapitre 1 ! tu auras un super schéma

    Revenir en haut


    orafrance
    Membre Expert(e)

    --------------------------------------------------------------------------------

    Marc Musette a écrit:
    on peut ajouter que tous les x temps (ne rentrons pas ds les détails) , le database writer écrira les données modifiées (commitées ou non) dans les datafiles

    je te suggère de lire le Concepts Guide chapitre 1 ! tu auras un super schéma


    Tout à fait ceci étant du à l'évolution de l'occupation de l'espace disponible en mémoire, au nombre de Dirty Blocs et aussi aux différents parametre de DBWn

    c'est pour cela que la premiere chose à être enregistrée est la transaction car les fichiers de données peuvent contenir des informations non valides à un instant T dans le temps et que les informations sur la transaction seront nécessaire lors de la synchronisation des données.


    Ps : merci orafrance
    _________________
    Oracle C'est trop fort pour toi
    EN PASSANT OUBLIEZ PAS LE BOUTON [Résolu] et les balises [ code ]
    Mes articles(Les Lobs, Flashback, Logminer)

    Revenir en haut


    jack554
    Invité(e) régulier(ère)



    Inscrit le: 14 Fév 2003
    Messages: 28

    Posté le: Mar Mai 18, 2004 16:36 Sujet du message:

    --------------------------------------------------------------------------------

    Ok c'est vraiment sympa.

    Déjà 3 questions :

    1) L'image après est-elle bien créée aussi dans les RBS, comme l'image avant ?

    2) Dans tout le processus je ne vois pas quand les données modifiées sont écrites réellement dans les datafiles ?

    3) Dans ta phrase

    Citation:

    Ensuite pour ton rollback
    Oracle ecris la fin de transaction dans les redo logs



    qu'entends-tu par "fin de transaction" ?
    _________________
    Jack.



    --------------------------------------------------------------------------------

    Alors question 1

    Non l'image apres est stockée en mémoire pour des questions de tuning (jusqu'a temps que DBWn l'écrive sur le disque si y a besoin de place en mémoire)

    Question 2 voir au dessus
    Question 3 fin de transaction = COMMIT ou ROLLBACK (attention aux ordres DDL (create, alter, grant..) qui sont autocommité)
    _________________
    Jack.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Pourquoi donc ne pas proposer un article à l'équipe de rédaction qui relira et éventuellement publiera cet article ?

  3. #3
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Ah ben c'est génial ça !

    Euh ... comment je fais ?

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    C'est très intéressant, je l'ai lu en diagonale.

    Qq remarques :

    - quand tu dis
    Etape 1 : enregistrement de la commande dans les fichiers de journalisation (Redo logs)
    Pour moi c'est erroné. L'ordre SQL n'est pas inscrit dans les redo, mais à chaque fois qu'un bloc est modifié le "delta" est inscrit dans le redo.

    - Effacement de l’ « image avant transaction » du segment d’annulation : pour moi Oracle indique que les rollback segment utilisés sont désormais libres et ils seront utilisés/écrasés par d'autres transaction. Oracle ne s'amuse pas à venir réeffacer chaque rbs utilisé.

    - quand tu dis
    redémarrage suivant de la base le processus d’arrière-plan SMON réappliquera les transactions contenues dans les fichiers de journalisation.
    Oracle réapplique les modifs sur les datafiles indiqués dans le redolog depuis le dernier checkpoint (roll-forward) et ensuite il rollback les transactions qui n'avait pas été committées.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par jack554
    Ah ben c'est génial ça !

    Euh ... comment je fais ?
    En adressant tes contributions à sheikyerbouti

    Ici, ce sera peut-être plus une contribution dans la FAQ

    http://club.developpez.com/redaction/

  6. #6
    Membre régulier Avatar de jack554
    Inscrit en
    Février 2003
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Laly : Merci pour ton avis favorable et tes précisions. Je voudrais cependant ne pas entrer trop dans les détails afin de conserver l'idée générale.

    Orafrance : J'envoie ça de suite.

  7. #7
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour Jack,


    Pour moi les remarques que j'ai faites ne sont pas du détail :o

    Sinon ton article est très intéressant.



    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    en ce qui me concerne , j'ai peur des articles simplifiés

    dans les sujets techniques, simplifié peut facilement rimer avec erronné

    dans le cas de l'xplication d'un update, je trouverais intéressant d'aller dans les détails pour les nouveaux venus voient la complexité d'une transaction.

    je crois aussi qu'il faut fixer un but à un article, que comptes-tu expliquer ? est-ce vraiment utile de schématiser un update ? les "experts" ne le liront pas puisque simplifié, les nouveaux venus auront une vue qui ne correspond pas à la réalité.

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/01/2011, 13h45
  2. [PDO] Relancer une transaction qui n'a pas fonctionné
    Par Alexdezark dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/03/2010, 21h57
  3. les dernières requêtes d'une transaction ne fonctionne pas
    Par pimos dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/05/2009, 14h24
  4. Réponses: 2
    Dernier message: 09/03/2009, 11h12
  5. Réponses: 14
    Dernier message: 22/02/2008, 19h01

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