Επανάκτηση δεδομένων (εμπλουτισμένο υλικό) http://delab.csd.auth.gr/courses/c_dbimpl/
Ευχαριστίες Μέρος του υλικού είναι βασισμένο στο βιβλίο Database Systems: The Complete Book 2
Επανάκτηση ηδεδομένων Οι συχνότερες αιτίες βλάβης ή αστοχίας (failure) που οδηγούν σε διακοπή της λειτουργίας του συστήματος είναι: πτώση συστήματος, λόγω εσφαλμένης λειτουργίας του υλικού ή του λογισμικού συστήματος, πρόβλημα στο μέσο αποθήκευσης, το οποίο μπορεί να οφείλεται σε καταστροφή της μαγνητικής επιφάνειας του δίσκου, του μηχανικού ή του ηλεκτρονικού υλικού του δίσκου, σφάλμα λογισμικού εφαρμογής, το οποίο οφείλεται συνήθως σε σφάλμα εκτέλεσης (run time error) κατά τη διάρκεια ενημέρωσης των δεδομένων της ΒΔ, φυσικά αίτια,, όπως πυρκαγιές, σεισμοί κλπ. Υπάρχει ανάγκη ύπαρξης μηχανισμών επανάκτησης (recovery) δεδομένων, ώστε, μετά από βλάβη ή αστοχία, να επανέλθει η ΒΔ στην κανονική της κατάσταση, όπου πληρούνται όλοι οι περιορισμοί ακεραιότητας. 3
Ιδιότητες συναλλαγών ACID Ατομικότητα (Αtomicity): αν υπάρχει έστω και μία εντολή της συναλλαγής, η οποία αποτυγχάνει να εκτελεσθεί, τότε ολόκληρη η συναλλαγή αποτυγχάνει επίσης. Συνέπεια (Consistency): it η συναλλαγή πρέπει να μετατρέπει τη βάση δεδομένων από μία συνεπή κατάσταση σε μία άλλη συνεπή κατάσταση η( (τα δεδομένα πρέπει να είναι ορθά). Οι μηχανισμοί ακεραιότητας δεδομένων δεν επαρκούν για την εγγύηση της συνέπειας. Απομόνωση (Isolation): lti κάθε συναλλαγή πρέπει να εκτελείται ανεξάρτητα από άλλες συναλλαγές. Μονιμότητα (Durability): αν μία συναλλαγή ολοκληρωθεί με επιτυχία, τότε οι αλλαγές που έχει επιφέρει καταγράφονται μόνιμα στη ΒΔ και δεν μπορούν να ανακληθούν. 4
Απαιτήσεις επανάκτησης ηςδεδομένων Για να είναι εφικτή η λειτουργία της επανάκτησης δεδομένων, το ΣΔΒΔ πρέπει να διαθέτει: μηχανισμό μ δημιουργίας αντιγράφων ασφαλείας (backup) για τα δεδομένα της ΒΔ, καταγραφή ημερολογίου (log) όπου να αποθηκεύεται η κατάσταση της κάθε συναλλαγής και οι αλλαγές που έχουν πραγματοποιηθεί στη ΒΔ, μηχανισμό χρονικών σημείων ελέγχου (checkpoints) που σηματοδοτούν τις στιγμές που οι αλλαγές που έχουν επιφέρει οι συναλλαγές έχουν γίνει μόνιμες, μέθοδο επανάκτησης, η οποία λαμβάνοντας υπόψη τα αντίγραφα ασφαλείας, τις πληροφορίες ημερολογίου και τα χρονικά σημεία ελέγχου, επαναφέρει τη ΒΔ σε κατάσταση συνέπειας. 5
Ημερολόγιο Οι εγγραφές στο ημερολόγιο έχουν τις ακόλουθες μορφές: <START T>: Η συναλλαγή Τ άρχισε την εκτέλεσή της. <COMMIT T>: H συναλλαγή Τ ολοκλήρωσε επιτυχώς την εκτέλεσή της. Γενικά, είναι ευθύνη του buffer/log manager το πότε τροποποιημένα δεδομένα λόγω της Τ θα αποθηκευτούν στον δίσκο <ABORT T>: H συναλλαγή Τ δεν ολοκλήρωσε επιτυχώς την εκτέλεσή της. Π.χ. λόγω σφάλματος ή συμμετοχής σε αδιέξοδο. Ό,τι αλλαγές στα δεδομένα έχουν γίνει πρέπει να μην εμφανίζονται στο δίσκο. <T, X, ov, nv>: H συναλλαγή Τ τροποποίησε τα δεδομένα δ Χ. Η παλαιά τιμή του Χ ήταν ov (old value) και η νέα nv (new value). 6
Βασικές πράξεις συναλλαγών......που σχετίζονται με την επανάκτηση: Input (x): Το block x μεταφέρεται στην μνήμη. Output (x): Το block x αποθηκεύεται στο δίσκο. Read(x,t): (,) input(x) //αν χρειάζεται t τιμή του block x Write (x,t): input(x) //αν χρειάζεται t τιμή του block x Flush (log): τα περιεχόμενα του ημερολογίου αποθηκεύονται στο δίσκο. 7
Παράδειγμα παραβίασης ατομικότητας T1: Read (A,t); t t 2 Write (A,t); Read (B,t); t t 2 Write (B,t); Output (A); Output (B); αποτυχία! A: 8 16 A: 8 16 B: 8 16 B: 8 μνήμη δίσκος 8
Επανάκτηση η βασισμένη σε ROLLBACK Σε περίπτωση αποτυχίας κάποιες πράξεις που είναι καταγεγραμμένες στο ημερολόγιο θα πρέπει να αναιρεθούν (πράξη undo ή rollback). Στο ημερολόγιο καταγράφονται μόνο οι παλαιές τιμές των τροποποιημένων δεδομένων. Βασίζεται σε δυο κανόνες αναφορικά με το χειρισμό του ημερολογίου: 1. Αν η συναλλαγή Τ τροποποιεί τα δεδομένα Χ, τότε η εγγραφή <T, X, ov> εγγράφεται στον δίσκο πριν αποθηκευτεί στο δίσκο η νέα τιμή του Χ. 2. Αν η συναλλαγή T ολοκληρωθεί επιτυχώς, η εγγραφή <COMMIT T> αποθηκεύεται στον δίσκο αφού αποθηκευτούν στον δίσκο 9 όλες οι αλλαγές της Τ.
Παράδειγμα εκτέλεσης συναλλαγής Βήμα Πράξη Τ Α (μνήμη) Β (μνήμη) Α (δίσκος) Β (δισκος) Ημερο λόγιο 1 8 8 StartT 2 Read(A,t) 8 8 8 8 3 T 2*T 16 8 8 8 4 Write(A,t) 16 16 8 8 <T,A,8> 5 Read(B,t) 8 16 8 8 8 6 T 2*T 16 16 8 8 8 7 Wit Write(B,t) (Bt) 16 16 16 8 8 <T,B,8> TB8 8 Flush(log) 9 Output(A) 16 16 16 16 8 10 Output(B) 16 16 16 16 16 11 Commit T 12 Flush(log) 10
Κανόνες επανάκτησης ης Για κάθε συναλλαγή με αντίστοιχη εγγραφή <start Ti> στο ημερολόγιο: Αν υπάρχει <commit Ti> ή <abort Τi> στο ημερολόγιο, τότε η Ti αγνοείται. Διαφορετικά, για κάθε <Ti, X, οv>: write (X, οv) output (X ) Καταχώρηση εγγραφής <abort Ti> στο ημερολόγιο. Το ημερολόγιο εξετάζεται από το τέλος προς την αρχή. 11
Σκεπτικό 1 ου κανόνα Αποφεύγεται η παρακάτω προβληματική κατάσταση μετά από αποτυχία κατά την εκτέλεση της συναλλαγής. μνήμη A: 8 16 B: 8 16 A: 8 16 B: 8 δίσκος Log: <T1,start> <T1, A, 8> <T1, B, 8> ημερολόγιο στο δίσκο 12
Σκεπτικό 2 ου κανόνα Αποφεύγεται η παρακάτω προβληματική κατάσταση μετά από αποτυχία κατά την εκτέλεση της συναλλαγής. μνήμη A: 8 16 B: 8 16 Log: <T1,start> <T1, A, 8> <T1, B, 8> <T1,commit> A: 8 16 B: 8 <T1, B, 8> <T1,commit> δίσκος ημερολόγιο στο δίσκο 13
Αποτυχίες κατά την επανάκτηση η Δεν δημιουργούν πρόβλημα. Οι εγγραφές στο ημερολόγιο μπορούν να επαναεξεταστούν πολλαπλές φορές. 14
Eπανάκτηση η η βασισμένη σε ROLLFORWARD Ονομάζεταικαι redo logging ή deferred update. Στο ημερολόγιο καταγράφονται μόνο οι νέες τιμές των τροποποιημένων δεδομένων. Βασίζεται σε δυο (διαφορετικούς) φ ρ κανόνες αναφορικά με το χειρισμό του ημερολογίου: 1. Αν η συναλλαγή Τ τροποποιεί τα δεδομένα Χ, τότε η εγγραφή <T, X, nv> εγγράφεται στον δίσκο πριν αποθηκευτεί στο δίσκο η νέα τιμή του Χ. 2. Αν η συναλλαγή T ολοκληρωθεί επιτυχώς, η εγγραφή <COMMIT T> αποθηκεύεται στον δίσκο πριν αποθηκευτούν στον δίσκο οποιεσδήποτε οι αλλαγές της Τ. 15
Παράδειγμα εκτέλεσης συναλλαγής Βήμα Πράξη Τ Α (μνήμη) Β (μνήμη) Α (δίσκος) Β (δισκος) Ημερο λόγιο 1 8 8 StartT 2 Read(A,t) 8 8 8 8 3 T 2*T 16 8 8 8 4 Write(A,t) 16 16 8 8 <T,A,16> 5 Read(B,t) 8 16 8 8 8 6 T 2*T 16 16 8 8 8 7 Wit Write(B,t) (Bt) 16 16 16 8 8 <T,B,16> TB16 8 Commit T 9 Flush(log) 10 Output(A) 16 16 16 16 8 11 Output(B) 16 16 16 16 16 Τα βήματα 10 και 11 μπορεί να είναι πολύ πιο μετά χρονικά από το 10. 16
Κανόνες επανάκτησης ης Για κάθε συναλλαγή Ti με εγγραφή <commit Τi> στο ημερολόγιο: Για κάθε εγγραφή <Ti, X, nv>: Write(X, nv) Output(X) Οι συναλλαγές εξετάζονται από την αρχή προς το τέλος του ημερολογίου. 17
Σύγκριση τεχνικών Undo logging: αυξημένο I/O κόστος Redo logging: αυξημένες απαιτήσεις μνήμης καθώς όλα τα τροποποιημένα blocks πρέπει να είναι στην κύρια μνήμη μέχρι την δέσμευση (commit). Undo/Redo logging: Αν η συναλλαγή Τ τροποποιεί τα δεδομένα Χ, τότε η εγγραφή <T, X, ov, nv> εγγράφεται στον δίσκο πριν αποθηκευτεί στο δίσκο η νέα τιμή του Χ. Δεν υπάρχει περιορισμός για το πότε πρέπει να αποθηκευτούν στον δίσκο οι εγγραφές commit του ημερολογίου. 18
Παράδειγμα εκτέλεσης συναλλαγής Βήμα Πράξη Τ Α (μνήμη) Β (μνήμη) Α (δίσκος) Β (δισκος) Ημερο λόγιο 1 8 8 StartT 2 Read(A,t) 8 8 8 8 3 T 2*T 16 8 8 8 4 Write(A,t) 16 16 8 8 <T,A,8,16> 5 Read(B,t) 8 16 8 8 8 6 T 2*T 16 16 8 8 8 7 Wit Write(B,t) (Bt) 16 16 16 8 8 <T,B,8,16> TB816 8 Flush(log) 9 Output(A) 16 16 16 16 8 10 Commit T 11 Output(B) 16 16 16 16 16 Το βήμα 10 (Commit) θα μπορούσε να είναι και πριν το Output(A) ή μετά από το Output(B). 19
Επανάκτηση η Λειτουργία redo/rollforward για όσες συναλλαγές ολοκλήρωσαν επιτυχώς την εκτέλεσή τους (με χρονική σειρά) Λειτουργία undo/rollbackγια όσες συναλλαγές ΔΕΝ ολοκλήρωσαν επιτυχώς την εκτέλεσή τους (με αντίστροφη χρονική σειρά) 20
Ταυτοχρονισμός και επανάκτηση η Αντιπαράδειγμα: Tj Ti Wj(A) ri(a) Commit itti Abort Tj Η σειριοποίηση ηδεν αρκεί από μόνη της. Το πρόβλημα λύνεται με αναδρομικά rollback (cascading rollback). Πρέπει να αναιρεθεί και η εντολή commit Ti, που είναι ανεπιθύμητο. Καλύτερη προσέγγιση: επανακτήσιμα χρονοδιαγράμματα. 21
Επανακτήσιμα χρονοδιαγράμματα Ένα χρονοδιάγραμμα S είναι επανακτήσιμο (recoverable) αν κάθε συναλλαγή δεσμεύεται (φάση commit) ) μόνο αφού έχουν δεσμευτεί όλες οι υπόλοιπες συναλλαγές από τις οποίες έχει διαβάσει δεδομένα. 22
ACR χρονοδιαγράμματα Ένα χρονοδιάγραμμα αποφεύγει τα αναδρομικά rollback αν κάθε συναλλαγή διαβάζει δεδομένα δ από συναλλαγές που έχουν ήδη δεσμευτεί. 23
Συνέχεια αντιπαραδείγματος Tj Wj(A) Ti ri(a) wi(b) Abort Tj [Commit Ti] Παραμένει η ανάγκη για αναδρομικά rollback (cascading rollback) στα επανακτήσιμα χρονοδιαγράμματα. Τα αναδρομικά rollback αποφεύγονται στα avoids cascading rollback (ACR) χρονοδιαγράμματα. 24
Συνδυασμός τατυχρονισμού και επανάκτησης ης Αυστηρό (strict) 2PL: οι κλειδαριές κρατούνται μέχρι τη φάση δέσμευσης: Tj.... Wj(A)... Cj uj(a)... Ti............ ri(a) Κάθε αυστηρό 2PL χρονοδιάγραμμα, εκτός από σειριοποιήσιμο, είναι και ACR. Κάθε αυστηρό χρονοδιάγραμμα, διαβάζει ή γράφει δεδομένα που έχουν τροποποιηθεί μόνο από δεσμευμένες (committed) συναλλαγές. 25
Επισκόπηση ηχρονοδιαγραμμάτων επανακτήσιμα σειριοποιήσιμα ACR αυστηρά σειριακά 26
Παραδείγματα Επανακτήσιμο: w 1 (A) w 1 (B) w 2 (A) r 2 (B) c 1 c 2 ACR: w 1 (A) w 1 (B) w 2 (A) c 1 r 2 (B) c 2 Αυστηρό: w 1 (A) w 1 (B) c 1 w 2 (A) r 2 (B) c 2 27