Gestion des transactions - PowerPoint PPT Presentation

1 / 46
About This Presentation
Title:

Gestion des transactions

Description:

CREATE OR UPDATE PROCEDURE transfert(A number, B number, V float) IS ... Operations(numoper, numcpt, montant, annee, mois, jour, commentaires) ... – PowerPoint PPT presentation

Number of Views:40
Avg rating:3.0/5.0
Slides: 47
Provided by: Mar369
Category:

less

Transcript and Presenter's Notes

Title: Gestion des transactions


1
Gestion des transactions
2
  • Transaction
  • Unité de traitement séquentiel constituée d'une
    suite d'instructions manipulant une BD et
    préservant sa cohérence.

3
Tolérance aux pannes
  • Pérennité des données
  • Maintien de la cohérence
  • Résistance à tous types de panneTransfert de
    fonds
  • CREATE OR UPDATE PROCEDURE transfert(A number, B
    number, V float) IS
  • UPDATE COMPTE SET montant montant V WHERE
  • numcompte
    A
  • UPDATE COMPTE SET montant montant - V WHERE
  • numcompte
    B
  • END transfert

4
Graphe dune transaction
5
Modèle dexécution
6
Exemple de transaction
  • Create or update procedure essai isbegin
    update emp set salairesalaire1.1 savepoint
    pre_insert insert into projets
    values(1000,'BD') savepoint pre_delete
    delete from projets where numproj1000 case
    error is when 0 the commit when 1 then
    rollback to pre_delete when 2 then rollback
    to pre_insert when others then rollback
    end caseend essai

7
Journalisationmémoire sûre
8
Journalisation
  • Éléments journal
  • ltTi, BEGIN_TRANSACTIONgt
  • ltTi, READ, Agt
  • ltTi, WRITE, A, ancval, nouvvalgt
  • ltTi, COMMITgt
  • ltTi, ROLLBACKgt
  • ltTi, END_TRANSACTIONgt

9
Exemple
10
Mémoire sûre
  • T1 beginT1 R A 1000 900 T2 beginT1 W B 2000
    21000T2 W C 800 500 ---gt UNDO automatiqueT1
    COMMIT ---gt REDO automatique panne

11
Implémentation
12
Accès concurrents
13
Problèmes de concurrence perte de mise à jour
  • T1 inc(A,10) T2 inc(A,20)
  • initialement, A100 T1T2 T2T1 ? A130
  • Au final, A120. Exécution erronée et incohérente

14
Incohérences
  • Avant AB100 T1T2 ? A198, B202 T2T1 ?
    A199, B201

15
Lectures non reproductibles
16
Annulation sans remise en état
17
Exécution correcte
  • Une exécution correcte de transaction doit
    délivrer le même résultat que dans le cas d'une
    exécution séquentielle.
  • En général, il est impossible de tester les
    schémas d'exécution (problème NP complet)
  •  
  • Méthode pragmatique ne considérer que les
    opérations d'E/S

18
Théorème de correction
  • L'éxécution concurrente de Ti et de Tj avec
  • Ti lt Tj
  •  
  • est correcte SSI on a, ? x
  •  
  • Wi(x) lt Rj(x)
  • Ri(x) lt Wj(x)

19
Correction / journal
  • R1(x)R2(y)W1(x)W2(y)R2(x)R3(z)W2(x)
  • est correcte et on a la précédence T1 lt T2
  • R1(x)R1(y)R2(x)W3(z)W1(x)R2(z)W2(x)R4(t)
  • est incorrecte. On ne peut établir une règle de
    précédence

20
Verrous mortels
21
Verrous mortels
  • Un tri topologique (possible) serait trop coûteux
  • Deux solutions pragmatiques
  • Le verrouillage (le plus répandu)
  • Lestampillage

22
Verrouillage
  • Granularité la table ou la ligne
  • Mode exclusif ou partagé
  •  
  • lock table ltnomTablegt in share mode
  • lock table ltnomTablegt in exclusive mode
  • lock table ltnomTablegt in row share mode
  • lock table ltnomTablegt in row exclusive mode
  • lock table ltnomTablegt in share row exclusive
    mode
  • unlock ltnomTablegt

23
Compatibilité des verrous
24
Exemple de concurrence
  • UPDATE emp SET salairesalaire1.1
  • WHERE numemp30
  • SELECT FROM emp

25
(No Transcript)
26
(No Transcript)
27
  • Le schéma dexécution précédent est correct car
    les deux transactions sont séquentialisées par le
    verrouillage
  • Le schéma suivant est également correct, mais
    peut poser problème dans des conditions
    légèrement différentes

28
(No Transcript)
29
Interblocage
30
Moralité
  • Si on déverrouille trop tôt lexécution peut
    être incohérente !
  • Si on déverrouille trop tard risque
    dinterblocage !
  • Il faut impérativement un protocole de
    déverrouillage

31
Verouillage en deux phases
32
Modèle de procédure 2PL
  • Create or replace procedure traitement_2PL is
  • Begin
  • lock table comptes in row exclusive mode
  • lock table clients in share mode
  • traitements
  • unlock table clients
  • unlock table comptes
  • End traitement_2PL

33
Conclusion partielle
  • Le 2PL garantit la correction du schéma
    dexécution en séquentialisant (sans doute trop)
    lexécution des transactions concurrentes.
  • Il ne préserve pas des risques de verrous
    mortels.
  • Il nous faut un protocole auxiliaire pour assurer
    des règles de priorité
  • WW et WD Priorité aux  vieilles  transactions

34
Protocole non-préemptif (WD)
35
Règle du WD
  • Ti plus vieille que Tj (Ti lt Tj) ? Ti attend
  • Ti plus jeune que Tj (TigtTj) ? Ti est avortée
  • Une transaction avortée est relancée en gardant
    son estampille!

36
Protocole préemptif (WW)
37
Règle du WW
  • Ti plus jeune que Tj (Ti gt Tj) ? Ti attend
  • Ti plus vieille que Tj (Ti lt Tj) ? Tj avortée
  • Une transaction avortée est relancée avec la
    même estampille

38
Exemple dapplication
  • Clients(numcli, nom, prenom, adresse)
  • Comptes(numcpt, montant, annee, mois)
  • Possede(numcli, cumcpt, date_creation)
  • Operations(numoper, numcpt, montant, annee, mois,
    jour, commentaires)
  • Séquence seq_op
  • On veut enregistrer chaque opération et mettre à
    jour le compte correspondant

39
En Wound-Wait
  • Create procedure gestion_ww (nc number(10),
  • mnt number(10,2), comt
    varchar2(255)) is
  • this_ts timestamp get_new_timestamp
  • concurrent_ts timestamp
  • concurrent_mode char(2)
  • Begin
  • concurrent_ts get_concurrent_ts(operations)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)

40
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then
  • while active(concurrent_ts) loop
  • null
  • end loop
  • else reinit(concurrent_ts)
  • end if
  • end if
  • end if --fin du sil y a une transaction
    concurrente
  • lock table operations in row exclusive mode
  • insert into operations values(seq_op.nextval,
    nc, montant, an(sysdate), mois(sysdate),
    jour(sysdate), comt)

41
  • concurrent_ts get_concurrent_ts(comptes)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then
  • while active(concurrent_ts) loop
  • null
  • end loop
  • else reinit(concurrent_ts)
  • end if
  • end if
  • end if
  • Lock table comptes in row exclusive mode

42
  • Update comptes set montant montantmnt,
    anneean(sysdate), moismois(sysdate)
  • where numcptnc
  • unlock table comptes
  • unlock table operations
  • End gestion_ww

43
En Wait_DIE
  • Create procedure gestion_wd (nc number(10),
  • mnt number(10,2), comt
    varchar2(255)) is
  • this_ts timestamp get_new_timestamp
  • concurrent_ts timestamp
  • concurrent_mode char(2)
  • Begin
  • concurrent_ts get_concurrent_ts(operations)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)

44
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then
  • reinit
  • else
  • while active(concurrent_ts) loop
  • null
  • end loop
  • end if
  • end if
  • end if --fin du sil y a une transaction
    concurrente
  • lock table operations in row exclusive mode
  • insert into operations values(seq_op.nextval,
    nc, montant, an(sysdate), mois(sysdate),
    jour(sysdate), comt)

45
  • concurrent_ts get_concurrent_ts(comptes)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then reinit
  • else
  • while active(concurrent_ts) loop
  • null
  • end loop
  • end if
  • end if
  • end if
  • lock table comptes in row exclusive mode

46
  • Update comptes set montant montantmnt,
    anneean(sysdate), moismois(sysdate)
  • where numcptnc
  • unlock table comptes
  • unlock table operations
  • end gestion_wd
Write a Comment
User Comments (0)
About PowerShow.com