Σημεία ελέγχου (Checkpoints)

Σχετικά έγγραφα
Transactions Management. (Διαχείριση Δοσοληψιών)

Τεχνικές Ανάνηψης Περιεχόµενα

Επεξεργασία οσοληψιών

Αποκατάσταση συστήματος Βάσεις Δεδομένων

Βάσεις Δεδομένων ΙΙ. Διάλεξη 3 η Tεχνικές Aνάκαμψης. Ιδιότητες Δοσοληψιών

Βάσεις Δεδομένων ΙΙ Ενότητα 3

Βάσεις Δεδομένων ΙΙ. Διάλεξη 1 η Επεξεργασία Δοσοληψιών. Σύστημα Επεξεργασίας Δοσοληψιών

Προχωρημένα Θέματα Βάσεων Δεδομένων

Τεχνικές Ανάκαµψης. Αtomicity (ατοµικότητα) - είτε όλες οι πράξεις είτε

Τεχνικές Ανάκαµψης. Αtomicity (ατοµικότητα) - είτε όλες οι πράξεις είτε

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Επανάκτηση δεδομένων. (εμπλουτισμένο υλικό)

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙΙ. Επεξεργασία οσοληψιών. το πώς βλέπει το Σ Β τα προγράµµατα των χρηστών. οσοληψία (transaction)

Προχωρημένα Θέματα Βάσεων Δεδομένων

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙΙ. Σχετικά µε το µάθηµα: Αξιολόγηση. Σχετικά µε το µάθηµα:faq ΟΧΙ ΝΑΙ. Λιγότερος! (ας πούµε το 1/3-1/4)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Άσκηση 1 (15 μονάδες) (Επεκτατός Κατακερματισμός)

Δοσοληψίες Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Λειτουργικά Συστήματα (ΗΥ321)

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. Πληροφοριακά Συστήματα και Βάσεις Δεδομένων. Δρ. Κωνσταντίνος Χ.

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών. ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

Υ- 07 Παράλληλα Συστήματα Συνέπεια και συνοχή μνήμης

ΙΑΧΕΙΡΙΣΗ ΟΣΟΛΗΨΙΩΝ Να θυµηθούµε:

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων: ημήτρης Πλεξουσάκης

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Επεξεργασία οσοληψιών

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Διαχείριση Δοσοληψιών

Υ- 07 Παράλληλα Συστήματα Transac9onal memory

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Έλεγχος συγχρονικότητας Μέρος 1 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Έλεγχος Συγχρονικότητας. (Concurrency Control)

Βάσεις Δεδομένων 2. Φροντιστήριο Δοσοληψίες Τεχνικές ελέγχου συνδρομικότητας. Ημερ: 05/5/2009 Ακ.Έτος

PRINCIPLES OF TRANSACTION-ORIENTED DATABASE RECOVERY. Theo Haerder Andreas Reuter. Μαρία Κουτσουλιέρη

ΕΙΣΑΓΩΓΗ ΣΤΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΧΕΙΡΙΣΗΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Λιβανός Γιώργος Εξάμηνο 2017Β

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων: ημήτρης Πλεξουσάκης

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

ΘΕΜΑ Α. Λύση: 1. Σωστό, 2. Λάθος, 3. Σωστό, 4. Λάθος, 5. Λάθος. Ποια η διαφορά μεταξύ διερμηνευτή και μεταγλωττιστή; Απάντηση:

ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ.

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Επεξεργασία οσοληψιών (συνέχεια)

Symantec Backup Exec System Recovery 7.0 Server Edition. Πλήρης Επαναφορά Συστημάτων Windows Μέσα σε Λίγα Λεπτά και όχι σε Ώρες ή Ημέρες

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Ψευδοκώδικας. November 7, 2011

Επεξεργασία Ερωτήσεων

Αντίγραφα ασφαλείας και επαναφορά Οδηγός χρήσης

Ας δούμε λίγο την θεωρία με την οποία ασχοληθήκαμε μέχρι τώρα.

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Επεξεργασία Ερωτήσεων

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

Μάθημα Βάσεις Δεδομένων ΙΙ - Ασκήσεις Επανάληψης. 01 Εκφώνηση

Επεξεργασία οσοληψιών

Επεξεργασία Ερωτήσεων

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Επαναφορά του Συστήματος (Μέρος Α')

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Μάριος Αγγελίδης

Επαναληπτικές ασκήσεις

- Εισαγωγή - Επίπεδα μνήμης - Ολοκληρωμένα κυκλώματα μνήμης - Συσκευασίες μνήμης προσωπικών υπολογιστών

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

Αποθήκευση και Οργάνωση αρχείων. Βάσεις Δεδομένων Μάθημα 2ο Διδάσκων: Μαρία Χαλκίδη

Αντίγραφα ασφαλείας και επαναφορά Οδηγίες χρήσης

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Εξετάσεις Προσομοίωσης 24/04/2019

1. Δεν μπορεί να γίνει κλήση μίας διαδικασίας μέσα από μία συνάρτηση.

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΜΗΜΑ: Γ2

Το εσωτερικό ενός Σ Β

Διαδικασιακός Προγραμματισμός

8 FORTRAN 77/90/95/2003

Επιπλέον διδακτικό υλικό κρυφών μνημών: set-associative caches, πολιτικές αντικατάστασης, χειρισμός εγγραφών

Οδηγίες για την Διαδικασία αποθήκευσης στοιχείων ελέγχου πινάκων για επίλυση θέματος Οριοθέτησης.

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Υ- 01 Αρχιτεκτονική Υπολογιστών Back- end: χρονοπρογραμματισμός, εντολές προσπέλασης μνήμης

Αρχιτεκτονική Eckert-von Neumann. Πως λειτουργεί η ΚΜΕ; Κεντρική μονάδα επεξεργασίας [3] ΕΠΛ 031: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Οδηγίες Χρήσης. Εφαρµογή Ενηµέρωσης Firmware του JetDrive. Έκδοση 1.1

Πληροφοριακό Σύστημα Διαχείριση Προμηθειών Συνοπτικές Οδηγίες Χρήσης για Σχολικές Μονάδες

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (2)

Α2. Να γράψετε στο τετράδιο σας τον αριθμό 1-4 κάθε πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ημιουργία εφεδρικών αντιγράφων ασφαλείας για Lenovo T410-T510

Επεξεργασία ερωτημάτων

Έλεγχος συγχρονικότητας Μέρος 2 Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Κάθε functional unit χρησιμοποιείται μια φορά σε κάθε κύκλο: ανάγκη για πολλαπλό hardware = κόστος υλοποίησης!

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Λειτουργικά Συστήματα (ΗΥ321)

Βρόχοι. Εντολή επανάληψης. Το άθροισμα των αριθμών 1 5 υπολογίζεται με την εντολή. Πρόβλημα. Πώς θα υπολογίσουμε το άθροισμα των ακέραιων ;

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών


Transcript:

Σημεία ελέγχου (Checkpoints) Από την στιγμή που γίνεται ένα <COMMIT > σε ένα Undo Recovery θα μπορούσε κανείς να υποθέσει ότι τα πρακτικά της δοσοληψίας μέχρι το <COMMIT > δεν είναι πλέον απαραίτητα για την αποκατάσταση και μπορούν να διαγραφούν όμως κάποιες φορές αυτό δεν είναι δυνατό γιατί συχνά εκτελούνται πολλές δοσοληψίες ταυτόχρονα και μπορεί να χαθούν και πρακτικά από δοσοληψίες που δεν έχουν ολοκληρωθεί ακόμα Για να το αποφύγουμε αυτό, δημιουργούμε περιοδικά σημεία ελέγχου (check points) ως εξής: 1. Σταματάμε να αποδεχόμαστε νέες δοσοληψίες 2. Περιμένουμε μέχρι οι ενεργές δοσοληψίες να ολοκληρωθούν ή να ματαιωθούν και να γραφτεί το <COMMIT > ή <ABORT > στο log 3. Κάνουμε flush το log στο δίσκο 4. Γράφουμε ένα log record <CKPT> και ξανακάνουμε flush το log 5. Ξαναρχίζουμε να δεχόμαστε δοσοληψίες 38

Σημεία ελέγχου (Checkpoints) Δεν χρειάζεται να αναιρέσουμε τις αλλαγές των δοσοληψιών πριν το σημείο ελέγχου γιατί σύμφωνα με τον κανόνα 2, οι μεταβολές θα έχουν φτάσει στο δίσκο Κατά την αποκατάσταση, σαρώνουμε το log προς τα πίσω για να βρούμε ανολοκλήρωτες δοσοληψίες όταν βρεθεί ένα <CKPT> τότε όλες οι ανολοκλήρωτες δοσοληψίες βρέθηκαν Δεν χρειάζεται να σαρώσουμε πριν το <CKPT> αφού καμία δοσοληψία δεν μπορεί να ξεκινήσει μέχρι να ολοκληρωθεί το checkpoint Το log πριν το <CKPT> μπορεί με ασφάλεια να διαγραφεί ή να υπερεγγραφεί (overwrite) 39

Παράδειγμα: Σημεία ελέγχου (Checkpoints) <START T 1 > <T 1, A, 5> <START T 2 > < T 2, B, 10> Αν βάλουμε ένα checkpoint εδώ, πρέπει να περιμένουμε να ολοκληρωθούν οι T 1 και T 2 πριν γράψουμε το <CKPT> στο log file <COMMIT T 1 > <COMMIT T 2 > <CKPT> <START T 3 > 40

Μη-αδρανή σημεία ελέγχου (Non-quiecent) Για να μην διακοπεί η λειτουργία του συστήματος, συνήθως προτιμάται αυτή η τεχνική που επιτρέπει την εισαγωγή νέων δοσοληψιών κατά την διάρκεια δημιουργίας ενός checkpoint Βήματα: 1. Γράφουμε στο log record <START CKPT(T 1,T 2, T k )> για όλες τις ενεργές μη οριστικοποιημένες δοσοληψίες T 1, T 2,, T k και κάνουμε flush log. 2. Περιμένουμε μέχρι να οριστικοποιηθούν ή να ματαιωθούν όλες οι T 1, T 2,, T k αλλά δεν απαγορεύουμε την εκκίνηση άλλων δοσοληψιών. 3. Όταν ολοκληρωθούν οι T 1, T 2,, T k γράφουμε στο log record <END CKPT> και κάνουμε flush log. 41

Αποκατάσταση με Μη-αδρανή σημεία ελέγχου Όταν χρειαστεί recovery, σαρώνουμε το log file ανάποδα: 1. Αν συναντήσουμε πρώτα ένα <END CKPT>, τότε όλες οι ανολοκλήρωτες δοσοληψίες ξεκίνησαν μετά το προηγούμενο <START CKPT (T 1,, T k )>. Άρα σάρωσε προς τα πίσω μέχρι το <START CKPT>. Ότι παλαιότερο υπάρχει μπορεί να διαγραφεί. 2. Αν συναντήσουμε πρώτα ένα <START CKPT (T 1,, T k )>, τότε το crash έγινε κατά την διάρκεια του checkpoint. Οι μόνες ανολοκλήρωτες δοσοληψίες είναι αυτές που βρήκαμε όσο σαρώναμε προς τα πίσω μέχρι <START CKPT (T 1,, T k )> και όσες από τις T 1, T 2,.. T k δεν ολοκληρώθηκαν πριν το crash. Δεν χρειάζεται να σαρώσουμε προς τα πίσω πέρα από την έναρξης της παλαιότερης από αυτές τις δοσοληψίες 42

Αποκατάσταση με Μη-αδρανή σημεία ελέγχου Παράδειγμα 1: <START T 1 > <T 1, A, 5> <START T 2 > <T 2, B, 10> Βάζουμε ένα non-quiescent checkpoint εδώ <START CKPT(T 1,T 2 )>. Η T 3 αρχίζει ενώ περιμένουμε να ολοκληρωθούν οι T 1 και T 2 <START CKPT(T 1,T 2 )> <T 2, C, 15> <START T 3 > <T 1, D, 20> <COMMIT T 1 > <T 3, E, 25> <COMMIT T 2 > <END CKPT> <T 3, F, 30> 43

Αποκατάσταση με Μη-αδρανή σημεία ελέγχου Παράδειγμα 1 (συνέχεια) <START T 1 > <T 1, A, 5> <START T 2 > <T 2, B, 10> <START CKPT(T 1,T 2 )> <T 2, C, 15> <START T 3 > <T 1, D, 20> <COMMIT T 1 > <T 3, E, 25> <COMMIT T 2 > <END CKPT> <T 3, F, 30> failure Επαναφορά: Η T 3 είναι ανολοκλήρωτη και πρέπει να αναιρεθεί. Πρέπει να γίνει επαναφορά της τιμής του F σε 30 Όταν συναντήσουμε το <END CKPT> ξέρουμε ότι όλες οι ανολοκλήρωτες δοσοληψίες άρχισαν μετά το προηγούμενο <START CKPT> Συνεχίζοντας την σάρωση προς τα πίσω βρίσκουμε ότι η τιμή του Ε πρέπει να αποκατασταθεί σε 25 Δεν υπάρχουν άλλες δοσοληψίες που ξεκίνησαν χωρίς να οριστικοποιηθούν. Δεν χρειάζεται να ψάξουμε άλλο πριν το <START CKPT> 44

Αποκατάσταση με Μη-αδρανή σημεία ελέγχου Παράδειγμα 2: Κατάρρευση του συστήματος κατά την διάρκεια του checkpoint <START T 1 > <T 1, A, 5> <START T 2 > <T 2, B, 10> <START CKPT(T 1,T 2 )> <T 2, C, 15> <START T 3 > <T 1, D, 20> <COMMIT T 1 > <T 3, E, 25> failure Επαναφορά: Οι T 3 and T 2 είναι οι μόνες ανολοκλήρωτες δοσοληψίες και οι αλλαγές που έκαναν πρέπει να αναιρεθούν. Όταν βρούμε το <START CKPT(T 1,T 2 )> οι πιθανές ανολοκλήρωτες δοσοληψίες είναι οι T 1, T 2 Επειδή όμως έχει βρεθεί <COMMIT T 1 >, το μόνο που χρειάζεται είναι να πάμε μέχρι το <START T 2 > και να αποκαταστήσουμε την τιμή του Β σε 10. 45

Redo Logging Πιθανό πρόβλημα με το undo logging: δεν μπορούμε να οριστικοποιήσουμε μια δοσοληψία αν δεν γράψουμε πρώτα στον δίσκο όλα τα δεδομένα που μετέβαλε (σπατάλη I/O). Διαφορές κατά το recovery: Undo Logging ακυρώνει τις ανολοκλήρωτες δοσοληψίες και αγνοεί τις μεταβολές που έκαναν οι οριστικοποιημένες απαιτεί εγγραφεί των μεταβολών στο δίσκο πριν εμφανιστεί το <COMMIT> στο δίσκο για την αποκατάσταση χρειαζόμαστε τις παλιές τιμές των μεταβληθέντων στοιχείων Redo Logging αγνοεί τις ανολοκλήρωτες δοσοληψίες και επαναλαμβάνει τις μεταβολές που έκαναν οι οριστικοποιημένες απαιτεί εγγραφεί των μεταβολών στο δίσκο μετά την εμφάνιση του <COMMIT> στο δίσκο για την αποκατάσταση χρειαζόμαστε τις νέες τιμές των μεταβληθέντων στοιχείων 46

Κανόνες Redo Logging Κάθε φορά που υπάρχει τροποποίηση ενός στοιχείου Χ της ΒΔ, πρέπει να γράφεται στο log ένα δελτίο της μορφής <T, X, v> <T, X, v> σημαίνει: Η δοσοληψία T έγγραψε στο Χ την νέα τιμή v Υπάρχει μόνο ένας κανόνας στο Redo Logging για την σειρά που φτάνουν τα δεδομένα και τα log records στο δίσκο (write-ahead log rule): Πριν τροποποιήσουμε οποιοδήποτε στοιχείο Χ της ΒΔ στο δίσκο, πρέπει να γράφονται όλα τα σχετικά log records στο δίσκο (δηλαδή και τα <T, X, v> και το <COMMIT T>) Η σειρά εγγραφής στο δίσκο είναι: 1. Τα Log records για τα μεταβληθέντα στοιχεία της ΒΔ 2. Το COMMIT log record 3. Τα ίδια τα μεταβληθέντα στοιχεία της ΒΔ 47

T1: Read (A,t); t t*2 Write (A,t); Read (B,t); t t*2 Write (B,t); Output (A); Output (B); A: 5 B: 5 10 10 Redo Logging A:5 B:5 <START T1> <T1, A, 10> 10 <T1, B, 10> <COMMIT T1> 10 memory disk log Παρατήρηση: Στα log records <T1, A, 10> και <T1, B, 10> φαίνονται οι νέες τιμές του Α και Β, όχι οι παλιές. 48

Παράδειγμα Redo Logging Memory Buffer Disk Step Action t A B A B Log Initially 5 5 1 <START T> 2 Read (A,t) 5 5 3 t t*2 10 4 Write (A,t) 10 <T, A, 10> 5 Read (B,t) 5 5 6 t t*2 10 7 Write (B,t) 10 <T, B, 10> 8 <COMMIT T> 9 FLUSH LOG 10 Output (A) 10 11 Output (B) 10 12 FLUSH LOG Διαφορές μεταξύ Redo Logging και Undo Logging 49

Recovery με Redo Logging Κατά την αποκατάσταση αντιμετωπίζουμε τις ανολοκλήρωτες δοσοληψίες σαν να μην εκτελέστηκαν ποτέ αν δεν υπάρχει το <COMMIT T> δεν έχουν γίνει αλλαγές στην ΔΒ Τι γίνεται με τις ολοκληρωμένες δοσοληψίες? δεν γνωρίζουμε ποιες από τις μεταβολές έχουν πραγματικά γραφτεί στο δίσκο αλλά αυτό δεν μας ενοχλεί: έχουμε όλες τις πληροφορίες που χρειαζόμαστε (νέες τιμές) ώστε να τις ξαναγράψουμε στο δίσκο, ακόμα και ήδη βρίσκονται εκεί. Σε περίπτωση αστοχίας κάνουμε τα ακόλουθα: 1. Εντοπίζουμε τις οριστικοποιημένες δοσοληψίες 2. Ξεκινάμε από την αρχή του log και σαρώνουμε τα πρακτικά προς τα εμπρός. Για κάθε <T, X, v> : a. Αν η Τ δεν είναι οριστικοποιημένη, δεν κάνουμε τίποτα b. Αν η Τ είναι οριστικοποιημένη, τότε γράφουμε την τιμή v στο X 3. Για κάθε ανολοκλήρωτη δοσοληψία T, γράφουμε <ABORT T> στο log και κάνουμε flush log ώστε να σταλεί το log στο δίσκο. 50

Recovery με Redo Logging Παράδειγμα: Α=5, Β=5 Log (on disk) failure failure failure Read (A, t); t t*2 Write (A, t); Read (B, t); t t*2 Write (B, t); FLUSH LOG; Output (A); Output (B); <START T> <T, A, 10> <T, B, 10> <COMMIT T> To <COMMIT T> είναι ήδη στο δίσκο και η Τ έχει ολοκληρωθεί. Οι τιμές για τα A και B θα γραφτούν στο δίσκο κατά το recovery (ακόμα και αν δεν χρειάζεται) 51

Recovery με Redo Logging Παράδειγμα: Α=5, Β=5 Log (on disk) Read (A, t); t t*2 Write (A, t); Read (B, t); t t*2 Write (B, t); FLUSH LOG; Output (A); Output (B); <START T> failure 1 <T, A, 10> failure 1 <T, B, 10> failure 1 failure 2 failure 1 : To <COMMIT T> δεν είναι στο δίσκο και η Τ είναι ανολοκλήρωτη. Δεν θα γραφτούν τιμές για τα A και B στο δίσκο κατά το recovery. Θα γραφτεί στο log το <ABORT T>. failure 2 :Το <COMMIT T> έχει γραφτεί στο log (μνήμη) αλλά δεν έχει φτάσει με βεβαιότητα στο δίσκο. 52

Checkpoints με Redo Logging Πρόβλημα: Οι μεταβολές μιας οριστικοποιημένης δοσοληψίας μπορεί να γραφτούν στο δίσκο πολύ αργότερα από την στιγμή της οριστικοποίησης. Έτσι, δεν μπορούμε να περιορίσουμε το ενδιαφέρον μας μόνο στις δοσοληψίες που είναι ενεργές την στιγμή του σημείου ελέγχου. Επομένως, είτε για αδρανές είτε για μη-αδρανές checkpoints, πρέπει να εγγράφουμε στο δίσκο τις τροποποιήσεις που έγιναν σε στοιχεία της ΒΔ από οριστικοποιημένες δοσοληψίες. Πρέπει να γνωρίζουμε ποιοι buffers είναι dirty, δηλαδή το περιεχόμενο ενός στοιχείου έχει μεταβληθεί αλλά η μεταβολή δεν έχει εγγραφεί ακόμα στο δίσκο. Πρέπει επίσης να γνωρίζουμε ποιες δοσοληψίες έχουν τροποποιήσει το κάθε buffer. 53

Checkpoints με Redo Logging Όμως, μπορούμε να ολοκληρώσουμε το σημείο ελέγχου χωρίς να περιμένουμε το commit ή abort των ενεργών δοσοληψιών, αφού έτσι κι αλλιώς δεν τους επιτρέπεται να εγγράψουν εκείνη την στιγμή τις αλλαγές τους στο δίσκο. Βήματα για μη-αδρανή checkpoints με redo logging: 1. Γράψε ένα log record <START CKPT(T 1,T 2,,T k )> για κάθε ενεργή (μη οριστικοποιημένη) δοσοληψία T 1, T 2,, T k και κάνε flush log 2. Γράψε στο δίσκο όλα τα στοιχεία που ήταν γραμμένα σε buffers (αλλά όχι ακόμα στο δίσκο) από οριστικοποιημένες δοσοληψίες όταν γράφτηκε το <START CKPT(T 1,T 2,,T k )> στο log 3. Γράψε <END CKPT> στο log και κάνε flush log 54

Μη-αδρανή checkpoints με redo logging Παράδειγμα : <START T 1 > <T 1, A, 5> <START T 2 > <COMMIT T 1 > <T 2, B, 10> <START CKPT(T 2 )> <T 2, C, 15> <START T 3 > <T 3, D, 20> <END CKPT> <COMMIT T 2 > <COMMIT T 3 > Η T 2 είναι η μόνη ενεργή δοσοληψία. Όμως, η τιμή του Α της T 1 ενδέχεται να έχει φτάσει στο δίσκο. Αν όχι, πρέπει να γραφτεί το Α στο δίσκο για να μπορέσει να ολοκληρωθεί το checkpoint. 55

Επαναφορά με Checkpointed Redo Log Όταν σαρώνουμε το log file, η αναζήτηση μας περιορίζεται στο τμήμα μεταξύ του τέλους και της αρχής του checkpoint. Υπάρχουν δύο περιπτώσεις: 1. Αν στο log βρούμε <END CKPT> πριν το failure, γνωρίζουμε ότι όλες οι τιμές που τροποποιήθηκαν από κάθε οριστικοποιημένη δοσοληψία πριν το αντίστοιχο <START CKPT(T 1,T 2,, T k )> είναι στο δίσκο και δεν ασχολούμαστε με αυτές. Ωστόσο, οι μεταβολές που μπορεί να έχει κάνει κάποια από τις T 1,T 2,,T k ή από αυτές που άρχισαν μετά το <START CKPT> ενδέχεται να μην έχουν γραφτεί ακόμα στο δίσκο. Στην περίπτωση αυτή συνεχίζουμε την αποκατάσταση όπως πριν. Δεν χρειάζεται να κοιτάξουμε πιο πίσω από το προγενέστερο εκ των <START T i > 56

Επαναφορά με Checkpointed Redo Log 2. Αν στο log βρούμε <START CKPT(T 1,T 2,, T K )> πριν το failure, τότε δεν μπορούμε να γνωρίζουμε με βεβαιότητα αν οι μεταβολές στις τιμές που πραγματοποίησαν οριστικοποιημένες δοσοληψίες πριν την έναρξη του checkpoint έχουν εγγραφεί στο δίσκο. Πρέπει να ψάξουμε προς τα πίσω μέχρι το προηγούμενο <END CKPT>, μετά να βρούμε το αντίστοιχο <START CKPT(T 1,T 2,, T k )> και να κάνουμε redo της αλλαγές όπως στην περίπτωση 1 προηγουμένως.

Επαναφορά με Checkpointed Redo Log Παράδειγμα recovery: failure 3 failure 2 failure 1 <START T 1 > <T 1, A, 5> <START T 2 > <COMMIT T 1 > <T 2, B, 10> <START CKPT(T 2 )> <T 2, C, 15> <START T 3 > <T 3, D, 20> <END CKPT> <COMMIT T 2 > <COMMIT T 3 > failure 1 : Ψάχνουμε προς τα πίσω και βρίσκουμε το <END CKPT>. Υποψήφιες δοσοληψίες: T 3 και T 2. Υπάρχουν τα COMMIT τους οπότε πρέπει να γίνουν και οι δύο redo. Δηλαδή επανεγγράφουμε τις τιμές 10,15,20 για τα B,C,D αντίστοιχα. failure 2 : Ψάχνουμε προς τα πίσω και βρίσκουμε το <END CKPT>. Υποψήφιες δοσοληψίες: T 3 και T 2. Υπάρχει μόνο τo COMMIT της T 2 οπότε πρέπει να γίνει redo η T 2 (αγνοούμε την T 3 ). Δηλαδή επανεγγράφουμε τις τιμές 10,15 για τα B,C αντίστοιχα. Γράφουμε <ABORT T 3 >. failure 3 : Ψάχνουμε προς τα πίσω μέχρι το προτελευταίο <START CKPT> για να πάρουμε κατάλογο ενεργών δοσοληψιών. Επειδή δεν υπάρχει, φτάνουμε μέχρι την αρχή του log. Υπάρχει μόνο τo COMMIT της T 1 οπότε είναι και η μόνη που πρέπει να γίνει redo (αγνοούμε τις T 2 και T 3 ). Δηλαδή επανεγγράφουμε την τιμή 5 στο Α. Γράφουμε <ABORT T 2 > και <ABORT T 3 >. 58

Σύγκριση Undo Logging με Redo Logging Undo logging: απαιτεί τα δεδομένα να εγγραφούν στο δίσκο μόλις τελειώσει μια δοσοληψία, πιθανώς προκαλώντας αύξηση του αριθμού απαιτούμενων ενεργειών Ι/Ο στο δίσκο. Redo logging: απαιτεί να διατηρούνται τα τροποποιημένα blocks στους buffers μέχρι την οριστικοποίηση της δοσοληψίας και την αποστολή του log στο δίσκο. Πιθανώς προκαλεί αύξηση του απαιτούμενου μέσου αριθμού από buffers που χρειάζονται από τις δοσοληψίες. Και οι δύο μέθοδοι μπορεί να επιβάλλουν αντιφατικές απαιτήσεις στον τρόπο χειρισμού ενός checkpoint (πχ blocks με >1 DB elements) Νέα μέθοδος: Undo/Redo logging. Είναι πιο ευέλικτη αλλά έχει επιπλέον κόστος τηρούμε περισσότερες πληροφορίες στο log. 59

Κανόνες Undo/Redo Logging Ένα Undo/Redo log διαφέρει μόνο στο record ενημέρωσης: <T, X, v, w> σημαίνει ότι η δοσοληψία T άλλαξε την τιμή του στοιχείου Χ της ΒΔ από v σε w. Κανόνας: πριν τροποποιηθεί οποιοδήποτε στοιχείο Χ της ΒΔ στο δίσκο, το record ενημέρωσης <T, X, v, w> πρέπει να εμφανιστεί στο δίσκο το <COMMIT T> μπορεί να είναι πριν ή μετά από κάθε αλλαγή των στοιχείων της ΒΔ στο δίσκο Κατά την διάρκεια του recovery, επιτρέπει είτε την επαναφορά είτε την επανάληψη. Πολιτική αποκατάστασης (recovery policy): Επανέφερε (Redo) όλες τις οριστικοποιημένες δοσοληψίες (earliest first) Αναίρεσε (Undo) τις μη-οριστικοποιημένες δοσοληψίες (latest first) Και τα δύο είναι απαραίτητα για να αποφύγουμε ημιτελή recovery 60

T1: Read (A,t); t t*2 Write (A,t); Read (B,t); t t*2 Write (B,t); Output (A); Output (B); A: 5 B: 5 10 10 Undo/Redo Logging A:5 B:5 <START T1> <T1, A, 5, 10> 10 <T1, B, 5, 10> <COMMIT T1> 10 Παρατηρήσεις: Στα log records <T1, A, 5, 10> και <T1, B, 5, 10> φαίνονται και οι παλιές και οι νέες τιμές του Α και Β. Το <COMMIT T1> μπορεί να γίνει και ενδιάμεσα της εγγραφής των Α και Β στο δίσκο (ή πριν/μετά). memory disk log 61

Παράδειγμα Undo/Redo Logging Memory Buffer Disk Step Action t A B A B Log Initially 5 5 1 <START T> 2 Read (A,t) 5 5 3 t t*2 10 4 Write (A,t) 10 <T, A,5,10> 5 Read (B,t) 5 5 6 t t*2 10 7 Write (B,t) 10 <T, B, 5,10> 8 FLUSH LOG 9 10 Output (A) 10 11 <COMMIT T> 12 Output (B) 10 13 14 FLUSH LOG * or or 62

Recovery με Undo/Redo Logging Παράδειγμα: Α=5, Β=5 Log (on disk) failure 1 Read (A, t); t t*2 Write (A, t); Read (B, t); t t*2 Write (B, t); FLUSH LOG; Output (A); Output (B); failure 1 <START T> <T, A, 5, 10> <T, B, 5, 10> <COMMIT T> failure 1 : Αν η αποτυχία γίνει μετά που έχει γραφτεί το <COMMIT T> στο δίσκο, τότε η Τ θεωρείται ολοκληρωμένη και γίνεται redo, δηλαδή θα γραφτεί η τιμή 10 και για το A και για το B στο δίσκο κατά το recovery. 63

Recovery με Undo/Redo Logging Παράδειγμα: Α=5, Β=5 Log (on disk) failure 2 failure 2 failure 2 failure 2 failure 2 Read (A, t); t t*2 Write (A, t); Read (B, t); t t*2 Write (B, t); FLUSH LOG; Output (A); Output (B); failure 2 failure 2 failure 2 <START T> <T, A, 5, 10> <T, B, 5, 10> failure 2 : Αν η αποτυχία γίνει πριν γραφτεί το <COMMIT T> στο δίσκο, τότε η Τ θεωρείται ανολοκλήρωτη και γίνεται undo, δηλαδή θα γραφτεί η τιμή 5 και για το A και για το B στο δίσκο κατά το recovery (ανάλογα το σημείο της αποτυχίας). 64

Recovery με Undo/Redo Logging Ένας επιπλέον κανόνας μπορεί να χρησιμοποιηθεί για να αποφύγουμε περιπτώσεις όπου ο χρήστης θεωρεί ότι μια δοσοληψία ολοκληρώθηκε (π.χ. κράτηση εισιτηρίου) αλλά το COMMIT δεν έχει σταλεί ακόμα στο δίσκο μια πιθανή κατάρρευση θα είχε αποτέλεσμα να γίνει undo και όχι redo! Νέος επιπλέον κανόνας: ένα <COMMIT T> πρέπει να στέλνεται στο δίσκο αμέσως μόλις εμφανιστεί στο log πρακτικά πρέπει να προσθέσουμε ένα FLASH LOG 65

Checkpoints με Undo/Redo Logging Μη-αδρανή (non-quiescent) checkpoints (γίνονται απλούστερα): 1. Γράψε <START CKPT(T 1,T 2,,T k )> στο log για όλες τις ενεργές δοσοληψίες T 1,T 2,,T k και κάνε flush το log 2. Γράφουμε στο δίσκο όλους τους dirty buffers (όσους περιέχουν στοιχεία της ΒΔ που έχουν μεταβληθεί όχι μόνο από οριστικοποιημένες δοσοληψίες όπως στο Redo Logging) 3. Γράψε <END CKPT> και κάνε flush το log στο δίσκο. Το βήμα 2, λόγω της ευελιξίας του Undo/Redo, επιβάλει την εγγραφή στοιχείων στο δίσκο που προέρχονται από ανολοκλήρωτες δοσοληψίες. Υπάρχει όμως η εξής απαίτηση: Μια δοσοληψία δεν πρέπει να εγγράψει καμία τιμή (ούτε καν στο buffer μνήμης) μέχρι να είναι σίγουρο ότι δεν θα ματαιωθεί (abort). 66

Παράδειγμα recovery: failure 2 failure 1 Επαναφορά με Checkpointed Undo/Redo Logging <START T 1 > <T 1, A, 4, 5> <START T 2 > <COMMIT T 1 > <T 2, B, 9, 10> <START CKPT(T 2 )> <T 2, C, 14, 15> <START T 3 > <T 3, D, 19, 20> <END CKPT> <COMMIT T 2 > <COMMIT T 3 > Στο ξεκίνημα του checkpoint, η τιμή του Β θα σταλεί στο δίσκο. Η τιμή του Α από την ολοκληρωμένη T 1 θα σταλεί επίσης στο δίσκο, αν δεν βρίσκεται ήδη εκεί. failure 1 : Ψάχνουμε προς τα πίσω και βρίσκουμε το <END CKPT>. Οι T 3 και T 2 είναι οριστικοποιημένες οπότε πρέπει να γίνουν και οι δύο redo. Δηλαδή επανεγγράφουμε τις τιμές 15,20 για τα C,D αντίστοιχα. Την T 1 την αγνοούμε γιατί έχει ήδη εγγραφεί στο δίσκο. Δεν χρειάζεται να κοιτάζουμε πριν από το <START CKPT> failure 2 : Βλέπουμε ότι η T 2 είναι οριστικοποιημένη ενώ η T 3 είναι ανολοκλήρωτη. Επαναλαμβάνουμε (redo) την T 2 θέτοντας την τιμή του C ίση με 15 (δεν χρειάζεται να γράψουμε την τιμή του Β ίση με 10). Αναιρούμε (undo) την T 3 και θέτουμε την τιμή του D ίση με 19. Δεν χρειάζεται να κοιτάζουμε πριν από το <START CKPT> 67

Προστασία από αστοχίες δίσκου/μέσου Τα πρακτικά προστατεύουν από αστοχίες του συστήματος όπου χάνονται προσωρινά δεδομένα που βρίσκονται στην κύρια μνήμη αλλά τίποτα δεν χάνεται από το δίσκο όμως, σε πιο σοβαρές αστοχίες μπορεί να χαθεί και το περιεχόμενο ενός ή περισσότερων δίσκων Για να μπορεί να επιβιώσει μια ΒΔ από τέτοιες απώλειες δεδομένων χρειάζεται ένα σύστημα αρχειοθέτησης (archiving system) τήρηση αντιγράφου της ΒΔ σε άλλο σημείο 68

Αρχειακό αντίγραφο της ΒΔ Ένα πλήρες αντίγραφο ασφαλείας θα απαιτούσε την διακοπή την λειτουργίας της ΒΔ για λίγο, αφού είναι μια χρονοβόρα διαδικασία Διακρίνουμε 2 επίπεδα αρχειοθέτησης Το πλήρες αποτύπωμα (full dump), όπου αντιγράφεται ολόκληρη η ΒΔ Το αυξητικό αποτύπωμα (incremental dump) όπου αντιγράφονται μόνο τα στοιχεία που μεταβλήθηκαν μετά το προηγούμενο πλήρες ή αυξητικό αποτύπωμα. Ζητήματα κόστους/χώρου 69

Αρχειακό αντίγραφο της ΒΔ Πρακτικά, οι περισσότερες ΒΔ δεν μπορούν να διακόψουν την λειτουργία τους για την δημιουργία ενός αντιγράφου ασφαλείας. Ένα μη-αδρανές αποτύπωμα δημιουργεί ένα αντίγραφο της ΒΔ στην μορφή που είχε όταν ξεκίνησε η διαδικασία, ωστόσο μπορεί να μεταβάλλονται πολλά από τα στοιχεία της ΒΔ μέσα στο διάστημα που διαρκεί η αποτύπωση αν είναι απαραίτητο να αποκατασταθεί η ΒΔ, τότε μπορούν να χρησιμοποιηθούν τα πρακτικά που δημιουργήθηκαν κατά την διάρκεια της αποτύπωσης 70

Αποκατάσταση της ΒΔ Η ΒΔ μπορεί να αποκατασταθεί χρησιμοποιώντας ένα πλήρες αποτύπωμα και τα αυξητικά αποτυπώματα που ακολούθησαν ξεκινώντας από το παλαιότερο. Για να έχουμε μια πιο πρόσφατη κατάσταση της ΒΔ θα μπορούσαμε να χρησιμοποιήσουμε τα πρακτικά, εφόσον έχουν τηρηθεί από τη στιγμή δημιουργίας του αρχειακού αντιγράφου και μετά και τα ίδια επιβίωσαν από την αστοχία για να προστατευθούμε από την ενδεχόμενη απώλεια των πρακτικών, θα μπορούσαμε να στέλνουμε ένα αντίγραφό τους στην ίδια απομακρυσμένη τοποθεσία που βρίσκεται και το backup, αμέσως μετά την δημιουργία τους. 71

Έλεγχος Συγχρονικότητας (Concurrency Control)

Συγχρονικότητα δοσοληψιών Οι αλληλεπιδράσεις ανάμεσα σε πολλαπλές δοσοληψίες που εκτελούνται ταυτόχρονα (multiple transactions execute concurrently) μπορεί να καταστήσουν ασυνεπή την κατάσταση της ΒΔ ακόμα και αν κάθε δοσοληψία από μόνη της διατηρεί την συνέπεια της ΒΔ ακόμα και αν δεν υπάρχει αστοχία Πρέπει να υπάρχει κάποιου είδους έλεγχος στις χρονικές στιγμές πραγματοποίησης των επιμέρους βημάτων των δοσοληψιών. 73

Προβλήματα Λόγω Συγχρονικότητας Παράδειγμα 1 Θεωρούμε δύο δοσοληψίες Τ1 και Τ2 ως εξής: T1: R(X), X=Χ-N, W(X), R(Y), Y=Y+N, W(Y) T2: R(X), X=X+M, W(X) Ν και Μ είναι κρατήσεις στην πτήση Χ και Υ. Η T1 μεταφέρει Ν κρατήσεις θέσεων από την πτήση Χ στη Y. Η T2 κρατά Μ επιπλέον θέσεις στη Χ. Αν και η δύο δοσοληψίες υποβληθούν ταυτόχρονα, δεν υπάρχει καμία εγγύηση ότι η T1 θα εκτελεστεί πριν την T2 ή το ανάποδο. Ωστόσο, το συνολικό αποτέλεσμα πρέπει να είναι ισοδύναμο με τη μία ή την άλλη περίπτωση (δηλαδή, με κάποια σειριακή εκτέλεση των δύο δοσοληψιών). 74

Προβλήματα Λόγω Συγχρονικότητας Παράδειγμα 1: Χ = 100 κρατήσεις, Υ = 90 κρατήσεις μεταφορά Ν = 30 κρατήσεων νέα κράτηση Μ = 5 θέσεις T1 μεταφέρει Ν κρατήσεις θέσεων από την πτήση Χ στη Y. T2 κρατά Μ θέσεις στη Χ. Σωστό αποτέλεσμα: Χ = 75, Υ = 120 Σειριακή εκτέλεση Τ1 Τ2 T1 T2 Χ Υ 100 90 Read(Χ) Χ Χ Ν Write(Χ) 70 Read(Υ) Υ Υ + Ν Write(Υ) 120 Read(Χ) Χ Χ + Μ Write(Χ) 75 75 120 75

Προβλήματα Λόγω Συγχρονικότητας Παράδειγμα 1: Χ = 100 κρατήσεις, Υ = 90 κρατήσεις μεταφορά Ν = 30 κρατήσεων νέα κράτηση Μ = 5 θέσεις T1 μεταφέρει Ν κρατήσεις θέσεων από την πτήση Χ στη Y. T2 κρατά Μ θέσεις στη Χ. Σωστό αποτέλεσμα: Χ = 75, Υ = 120 Σειριακή εκτέλεση Τ2 Τ1 T1 T2 Χ Υ 100 90 Read(Χ) Χ Χ + Μ Write(Χ) 105 Read(Χ) Χ Χ Ν Write(Χ) 75 Read(Υ) Υ Υ + Ν Write(Υ) 120 75 120 76

Προβλήματα Λόγω Συγχρονικότητας Παράδειγμα 1: Χ = 100 κρατήσεις, Υ = 90 κρατήσεις μεταφορά Ν = 30 κρατήσεων νέα κράτηση Μ = 5 θέσεις T1 μεταφέρει Ν κρατήσεις θέσεων από την πτήση Χ στη Y. T2 κρατά Μ θέσεις στη Χ. Σωστό αποτέλεσμα: Χ = 75, Υ = 120 Η τιμή του X είναι τελικά λανθασμένη Απώλεια ενημερώσεων στο δίσκο T1 T2 Χ Υ 100 90 Read(Χ) Χ Χ Ν [70] Read(Χ) Χ Χ + Μ [105] Write(Χ) 70 Read(Υ) Write(Χ) 105 Υ Υ + Ν Write(Υ) 120 105 120 77

Προβλήματα Λόγω Συγχρονικότητας Παράδειγμα 1: Χ = 100 κρατήσεις, Υ = 90 κρατήσεις μεταφορά Ν = 30 κρατήσεων νέα κράτηση Μ = 5 θέσεις T1 μεταφέρει Ν κρατήσεις θέσεων από την πτήση Χ στη Y. T2 κρατά Μ θέσεις στη Χ. Σωστό αποτέλεσμα: Χ = 75, Υ = 120 Προσωρινή ενημέρωση T1 T2 Χ Υ Dirty Read 100 90 Read(Χ) Χ Χ Ν Write(Χ) 70 Read(Χ) Χ Χ + Μ Write(Χ) 75 Failure! Τι θα συμβεί αν η Τ1 αποτύχει; η Τ2 θα έχει διαβάσει «ανύπαρκτη τιμή» 78

Προβλήματα Λόγω Συγχρονικότητας Παράδειγμα 1: Χ = 100 κρατήσεις, Υ = 90 κρατήσεις μεταφορά Ν = 30 κρατήσεων νέα κράτηση Μ = 5 θέσεις T1 μεταφέρει Ν κρατήσεις θέσεων από την πτήση Χ στη Y. T2 κρατά Μ θέσεις στη Χ. Σωστό αποτέλεσμα: Χ = 75, Υ = 120 H τιμή του Χ που διαβάζει η Τ1 είναι διαφορετική!! Μη επαναλήψιμη ανάγνωση T1 T2 Χ Υ 100 90 Read(Χ) Read(Χ) Χ Χ Ν Write(Χ) 70 Read(Υ) Υ Υ + Ν Write(Υ) 120 Read(Χ) 79