Ολοκλήρωση της συναλλαγής. Τι είναι μια συναλλαγή τραπεζικής κάρτας. Απαγόρευση της λειτουργίας. Εκτέλεση εντολής SELECT

Μια συναλλαγή είναι μια ακολουθία δηλώσεων χειρισμού δεδομένων που εκτελείται ως μία οντότητα (όλα ή τίποτα) και μετατρέπει μια βάση δεδομένων από μια σταθερή κατάσταση (δηλαδή, μια κατάσταση στην οποία ικανοποιούνται όλοι οι περιορισμοί ακεραιότητας που ορίζονται για τη βάση δεδομένων) σε μια άλλη πολιτεία. Για τον χρήστη του συστήματος πληροφοριών, είτε η συναλλαγή εκτελείται στο σύνολό της, ή εάν για κάποιο λόγο μία από τις ενέργειες της συναλλαγής είναι ανέφικτη ή υπήρξε κάποια δυσλειτουργία του συστήματος, η βάση δεδομένων επιστρέφει στην αρχική της κατάσταση, η οποία ήταν πριν από την έναρξη της συναλλαγής (η συναλλαγή επαναφέρεται).

Οι συναλλαγές είναι σημαντικές τόσο σε συστήματα πολλαπλών χρηστών όσο και σε συστήματα ενός χρήστη. Σε συστήματα ενός χρήστη, οι συναλλαγές είναι λογικές μονάδες εργασίας που αφήνουν τη βάση δεδομένων σε σταθερή κατάσταση. Οι συναλλαγές είναι επίσης η μονάδα ανάκτησης δεδομένων μετά από αστοχίες - κατά την ανάκτηση, το σύστημα εξαλείφει τα ίχνη συναλλαγών που δεν είχαν χρόνο να ολοκληρώσουν με επιτυχία ως αποτέλεσμα βλάβης λογισμικού ή υλικού. Σε συστήματα πολλαπλών χρηστών, επιπλέον, οι συναλλαγές χρησιμεύουν για να διασφαλίσουν την απομονωμένη εργασία μεμονωμένων χρηστών - οι πελάτες που εργάζονται ταυτόχρονα με την ίδια βάση δεδομένων φαίνεται να λειτουργούν σαν σε ένα σύστημα ενός χρήστη και δεν παρεμβαίνουν μεταξύ τους.

Ιδιότητες συναλλαγής

Όλες οι συναλλαγές πρέπει να έχουν τις ακόλουθες τέσσερις ιδιότητες (γνωστές ως ιδιότητες ASID):

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

Παρεμπιπτόντως, η ατομικότητα (αλληλεξάρτηση) είναι αναπόσπαστο μέρος της καθημερινής μας ζωής. Για παράδειγμα, κατά τη διάρκεια μιας γαμήλιας τελετής, ένας ιερέας ρωτάει πρώτα τη νύφη και τον γαμπρό: "Θέλετε να πάρετε αυτό το άτομο ως σύζυγό σας;" Μόνο μετά την απάντηση "Ναι" τόσο του ενός όσο και του άλλου, ο ιερέας μπορεί να πει: "Σας δηλώνω σύζυγο και σύζυγο", και επομένως διορθώνει τη μετάβαση από το ένα κράτος στο άλλο. Με άλλα λόγια, στο πλαίσιο μιας συναλλαγής, πολλά ανεξάρτητα μέρη της συναλλαγής πρέπει να καταλήξουν σε κοινή συμφωνία για όλους πριν από τη σύναψη της συναλλαγής. Εάν ένα από τα μέρη είναι εναντίον, κάθε ένας από τους συμμετέχοντες παραμένει με το δικό τους.

Συνοχή. Η συναλλαγή προκαλεί τον σωστό μετασχηματισμό του συστήματος, διατηρώντας παράλληλα την κατάστασή του. Για παράδειγμα, ως μέρος της συναλλακτικής προσθήκης ενός στοιχείου σε μια διπλά συνδεδεμένη λίστα, και οι τέσσερις δείκτες και στις δύο πλευρές ενημερώνονται ταυτόχρονα.

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

Η ικανότητα ταυτόχρονης εκτέλεσης ανταγωνιστικών συναλλαγών σε διαφορετικά επίπεδα απομόνωσης επιτρέπει στους προγραμματιστές εφαρμογών να βελτιώσουν την αποδοτικότητα του συστήματος. Τα χαμηλότερα επίπεδα απομόνωσης καθιστούν δυνατή την αύξηση του αριθμού των ταυτόχρονων συναλλαγών εις βάρος του κινδύνου λήψης θολών ή ασυνεπής κατάστασης δεδομένων. Ενώ ορισμένες συναλλαγές εκτελούνται στο υψηλότερο επίπεδο απομόνωσης (καθαρή σειριοποιησιμότητα), η ταυτόχρονη εκτέλεση συναλλαγών στα χαμηλότερα επίπεδα απομόνωσης εκτελείται παράλληλα και μπορεί να λειτουργήσει σε μη δεσμευμένα ή παλιότερα δεδομένα που διαβάζονται από μια συναλλαγή νωρίτερα. Φυσικά, οι συναλλαγές που εκτελούνται σε χαμηλότερα επίπεδα απομόνωσης μπορούν να παράγουν λανθασμένα δεδομένα ως αποτέλεσμα. Οι προγραμματιστές εφαρμογών πρέπει να προσέχουν τη διάδοση τέτοιων σφαλμάτων όταν τα μη έγκυρα δεδομένα χρησιμοποιούνται από συναλλαγές υψηλού επιπέδου απομόνωσης.

Ανθεκτικότητα ή σταθερότητα (Ανθεκτικότητα). Εάν η συναλλαγή είναι επιτυχής, το αποτέλεσμα θα δεσμευτεί και θα αποθηκευτεί. Επιπλέον, σε αυτήν την περίπτωση, το αποτέλεσμα θα διατηρηθεί ακόμη και αν υπάρχει κίνδυνος βλάβης του συστήματος.Θα πρέπει να σημειωθεί ότι οι ιδιότητες του ASID των συναλλαγών δεν εκτελούνται πάντα πλήρως. Αυτό ισχύει ιδιαίτερα για την ιδιοκτησία I (απομόνωση). Στην ιδανική περίπτωση, οι συναλλαγές διαφορετικών χρηστών δεν πρέπει να αλληλεπιδρούν μεταξύ τους, δηλαδή Θα πρέπει να εκτελούνται με τέτοιο τρόπο ώστε ο χρήστης να έχει την ψευδαίσθηση ότι είναι μόνος του στο σύστημα. Ο ευκολότερος τρόπος για να επιτευχθεί απόλυτη απομόνωση είναι η ουρά των συναλλαγών και η εκτέλεση αυστηρά το ένα μετά το άλλο. Προφανώς, αυτό χάνει την αποτελεσματικότητα του συστήματος. Επομένως, στην πραγματικότητα, πολλές συναλλαγές εκτελούνται ταυτόχρονα.

Υπάρχουν διάφορα επίπεδα απομόνωσης συναλλαγών. Στο χαμηλότερο επίπεδο απομόνωσης, οι συναλλαγές μπορούν πραγματικά να αλληλεπιδρούν μεταξύ τους · στο υψηλότερο, είναι εντελώς απομονωμένες. Η μεγαλύτερη απομόνωση συναλλαγών επιβαρύνεται με υψηλό κόστος γενικού συστήματος και χαμηλότερη απόδοση. Οι χρήστες ή ο διαχειριστής του συστήματος μπορούν να ορίσουν διαφορετικά επίπεδα όλων ή μεμονωμένων συναλλαγών κατά την κρίση τους.

Η ιδιότητα D (ανθεκτικότητα) δεν είναι επίσης απόλυτη ιδιοκτησία, δεδομένου ότι ορισμένα συστήματα επιτρέπουν ένθετες συναλλαγές. Εάν η συναλλαγή Β ξεκινά μέσα στη συναλλαγή Α, και εκδίδεται η εντολή COMMIT WORK για τη συναλλαγή Β, τότε η δέσμευση των δεδομένων της συναλλαγής Β είναι υπό όρους, επειδή εξωτερική συναλλαγή Α μπορεί να επαναφέρει. Τα αποτελέσματα της εσωτερικής συναλλαγής Β θα δεσμεύονται μόνιμα μόνο εάν πραγματοποιείται εξωτερική συναλλαγή Α.

Αρχη και τελος

Μια συναλλαγή ξεκινά συνήθως αυτόματα όταν ο χρήστης συνδέεται με το DBMS (συνήθως, αλλά όχι πάντα: για παράδειγμα, το Visual FoxPro απαιτεί μια ρητή BEGIN TRANSACTION για να ξεκινήσει μια νέα συναλλαγή) και συνεχίζεται έως ότου συμβεί ένα από τα ακόλουθα:

Εκδόθηκε η εντολή COMMIT WORK.

Εκδόθηκε η εντολή ROLLBACK WORK.

Ο χρήστης έχει αποσυνδεθεί από το DBMS.

Παρουσιάστηκε αποτυχία του συστήματος.

Η εντολή COMMIT WORK τερματίζει την τρέχουσα συναλλαγή και ξεκινά αυτόματα μια νέα συναλλαγή. Σε αυτήν την περίπτωση, είναι εγγυημένο ότι τα αποτελέσματα της ολοκληρωμένης συναλλαγής καταγράφονται, δηλ. αποθηκεύονται στη βάση δεδομένων. Η εντολή ROLLBACK WORK προκαλεί την επαναφορά όλων των αλλαγών που πραγματοποιούνται από την τρέχουσα συναλλαγή, δηλαδή ακυρώνονται σαν να μην υπήρχαν καθόλου. Αυτό ξεκινά αυτόματα μια νέα συναλλαγή. Όταν ένας χρήστης αποσυνδέεται από το DBMS, οι συναλλαγές πραγματοποιούνται αυτόματα.

Όταν το σύστημα αποτύχει, εμφανίζονται πιο πολύπλοκες διαδικασίες. Η ουσία τους οφείλεται στο γεγονός ότι στην επόμενη έναρξη του συστήματος, η ανάλυση των συναλλαγών που πραγματοποιήθηκαν πριν από την αποτυχία. Αυτές οι συναλλαγές για τις οποίες εκδόθηκε η εντολή COMMIT WORK, αλλά τα αποτελέσματα των οποίων δεν έχουν εισαχθεί στη βάση δεδομένων, εκτελούνται ξανά (έλασης). Οι συναλλαγές για τις οποίες δεν εκδόθηκε η εντολή COMMIT WORK επιστρέφονται.

Παράλληλη εργασία

Τα σύγχρονα DBMS είναι συστήματα πολλαπλών χρηστών, δηλαδή επιτρέπουν παράλληλη ταυτόχρονη εργασία μεγάλου αριθμού χρηστών. Ταυτόχρονα, οι χρήστες δεν πρέπει να παρεμβαίνουν μεταξύ τους. Επειδή η λογική μονάδα εργασίας για τον χρήστη είναι μια συναλλαγή, τότε το έργο του DBMS πρέπει να οργανωθεί έτσι ώστε ο χρήστης να έχει την εντύπωση ότι οι συναλλαγές του εκτελούνται ανεξάρτητα από τις συναλλαγές άλλων χρηστών.

Ο απλούστερος και πιο προφανής τρόπος για να παρέχει μια τέτοια ψευδαίσθηση στον χρήστη είναι να ευθυγραμμίσει όλες τις εισερχόμενες συναλλαγές σε μία ουρά και να τις εκτελέσει αυστηρά με τη σειρά. Αυτή η μέθοδος δεν είναι κατάλληλη για προφανείς λόγους - το πλεονέκτημα της παράλληλης εργασίας χάνεται. Έτσι, οι συναλλαγές πρέπει να εκτελούνται ταυτόχρονα, αλλά έτσι ώστε το αποτέλεσμα να είναι το ίδιο σαν να εκτελούνται οι συναλλαγές με τη σειρά. Η δυσκολία έγκειται στο γεγονός ότι εάν δεν ληφθούν ειδικά μέτρα, τα δεδομένα που αλλάζουν από έναν χρήστη μπορούν να αλλάξουν με τη συναλλαγή άλλου χρήστη πριν από τη λήξη της συναλλαγής του πρώτου χρήστη. Ως αποτέλεσμα, στο τέλος της συναλλαγής, ο πρώτος χρήστης δεν θα δει τα αποτελέσματα της εργασίας του, αλλά ποιος ξέρει τι.

Πώς μπορούν οι συναλλαγές διαφορετικών χρηστών να αλληλεπιδρούν μεταξύ τους; Υπάρχουν τρία κύρια προβλήματα ταυτότητας:

Το πρόβλημα της απώλειας των αποτελεσμάτων ενημέρωσης.

Μη δεσμευμένο πρόβλημα εξάρτησης (ανάγνωση "βρώμικων" δεδομένων, ατημέλητη ανάγνωση).

Το πρόβλημα της ασυμβίβαστης ανάλυσης.

Ένας από τους τρόπους για την εξασφάλιση ανεξάρτητης παράλληλης λειτουργίας πολλαπλών συναλλαγών είναι η μέθοδος κλειδώματος.

Εκτός από τα τρία θέματα ταυτόχρονης, είναι σύνηθες να γίνεται διάκριση μεταξύ συγκρούσεων πρόσβασης ταυτόχρονης πρόσβασης. Οι συναλλαγές ονομάζονται ταυτόχρονες συναλλαγές εάν αλληλεπικαλύπτονται στο χρόνο και έχουν πρόσβαση στα ίδια δεδομένα. Ως αποτέλεσμα της διαφωνίας δεδομένων μεταξύ συναλλαγών, προκύπτουν διενέξεις πρόσβασης στα δεδομένα:

W-W (Εγγραφή - Εγγραφή). Η πρώτη συναλλαγή άλλαξε το αντικείμενο και δεν τελείωσε. Η δεύτερη συναλλαγή προσπαθεί να τροποποιήσει αυτό το αντικείμενο. Το αποτέλεσμα είναι απώλεια ενημέρωσης.

R-W (Ανάγνωση - Εγγραφή). Η πρώτη συναλλαγή διάβασε το αντικείμενο και δεν ολοκληρώθηκε. Η δεύτερη συναλλαγή προσπαθεί να τροποποιήσει αυτό το αντικείμενο. Το αποτέλεσμα είναι μια ασυμβίβαστη ανάλυση (μη επαναλαμβανόμενη ανάγνωση).

W-R (Γράψτε - Διαβάστε). Η πρώτη συναλλαγή άλλαξε το αντικείμενο και δεν τελείωσε. Η δεύτερη συναλλαγή προσπαθεί να διαβάσει αυτό το αντικείμενο. Το αποτέλεσμα είναι η ανάγνωση βρώμικων δεδομένων.

Δεν υπάρχουν συγκρούσεις R-R (Read - Read) επειδή τα δεδομένα δεν αλλάζουν κατά την ανάγνωση.

Άλλα προβλήματα ταυτότητας είναι πιο περίπλοκα επειδή Η θεμελιώδης διαφορά τους είναι ότι δεν μπορούν να προκύψουν όταν εργάζονται με ένα αντικείμενο. Αυτά τα προβλήματα απαιτούν τη λειτουργία συναλλαγών σε ολόκληρα σύνολα δεδομένων.

Αντιμετώπιση προβλημάτων: Μπλοκ

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

Αποκλειστικές κλειδαριές (X-locks, eXclusive locks) - κλειδαριές χωρίς αμοιβαία πρόσβαση (κλείδωμα εγγραφής). Αντίθετα, οι κοινόχρηστες κλειδαριές (S-locks) είναι κλειδαριές αμοιβαίας πρόσβασης (κλειδαριές ανάγνωσης). Εάν η συναλλαγή Α κλειδώνει ένα αντικείμενο με X-lock, τότε απαγορεύεται κάθε πρόσβαση σε αυτό το αντικείμενο από άλλες συναλλαγές. Εάν η συναλλαγή Α κλειδώσει ένα αντικείμενο χρησιμοποιώντας S-lock, τότε τα αιτήματα από άλλες συναλλαγές για X-lock σε αυτό το αντικείμενο θα απορριφθούν, αιτήματα από άλλες συναλλαγές για S-lock σε αυτό το αντικείμενο θα γίνουν αποδεκτά.

Αδιέξοδα

Όταν εργάζεστε με συναλλαγές με κλειδαριές, ενδέχεται να προκύψει αδιέξοδο, δηλ. μια κατάσταση στην οποία αμφότερες οι συναλλαγές περιμένουν μεταξύ τους και δεν μπορούν να συνεχιστούν. Είναι σαφές ότι δεν υπάρχει "κανονική" (αυτόματη) έξοδος από το αδιέξοδο, επομένως αυτή η κατάσταση πρέπει να αναγνωριστεί και να εξαλειφθεί. Η μέθοδος επίλυσης αδιεξόδου είναι η επαναφορά μίας από τις συναλλαγές (η συναλλαγή του θύματος) έτσι ώστε οι άλλες συναλλαγές να συνεχίσουν να λειτουργούν. Αφού επιλυθεί το αδιέξοδο, η συναλλαγή που επιλέγεται ως θύμα μπορεί να επαναληφθεί.

Υπάρχουν δύο βασικές προσεγγίσεις για τον εντοπισμό αδιεξόδου και την επιλογή συναλλαγών θυμάτων: το DBMS δεν παρακολουθεί τα αδιέξοδα. Οι ίδιες οι συναλλαγές αποφασίζουν εάν θα γίνουν θύματα. Αυτή η προσέγγιση είναι τυπική για το λεγόμενο DBMS για επιτραπέζιους υπολογιστές (FoxPro κ.λπ.). Αυτή η μέθοδος είναι απλούστερη και δεν απαιτεί πρόσθετους πόρους συστήματος. Για συναλλαγές, καθορίζετε το χρονικό όριο (ή τον αριθμό των προσπαθειών) κατά το οποίο η συναλλαγή προσπαθεί να αποκτήσει το επιθυμητό κλείδωμα. Εάν το κλείδωμα δεν ολοκληρωθεί επιτυχώς εντός του καθορισμένου χρόνου (ή μετά τον καθορισμένο αριθμό προσπαθειών), η συναλλαγή επαναφέρεται (ή δημιουργείται μια κατάσταση σφάλματος). Το τίμημα για την απλότητα αυτής της μεθόδου είναι ότι οι συναλλαγές των θυμάτων επιλέγονται, γενικά, τυχαία. Ως αποτέλεσμα, λόγω μιας απλής συναλλαγής, μια πολύ ακριβή συναλλαγή μπορεί να ανατραπεί, με την εκτέλεση της οποίας έχει ήδη δαπανηθεί πολύς χρόνος και πόροι συστήματος.

Η δεύτερη προσέγγιση για την ανίχνευση αδιεξόδου είναι ότι το ίδιο το DBMS παρακολουθεί την εμφάνιση αδιεξόδου και αποφασίζει επίσης ποια συναλλαγή θα θυσιάσει. Αυτή η μέθοδος είναι τυπική για βιομηχανικά DBMS (ORACLE, MS SQL Server, κ.λπ.). Σε αυτήν την περίπτωση, το ίδιο το σύστημα παρακολουθεί την εμφάνιση μιας κατάστασης αδιεξόδου κατασκευάζοντας (ή συνεχώς διατηρώντας) ένα γράφημα αναμονής συναλλαγών (ένα κατευθυνόμενο διμερές γράφημα στο οποίο υπάρχουν δύο τύποι κόμβων - κόμβοι που αντιστοιχούν σε συναλλαγές και κόμβοι που αντιστοιχούν σε αντικείμενα σύλληψης) . Το αδιέξοδο συμβαίνει όταν υπάρχει τουλάχιστον ένας κύκλος στο γράφημα αναμονής συναλλαγών. Μία από τις συναλλαγές που εμπλέκονται στον κύκλο πρέπει να επιστραφεί και το ίδιο το σύστημα μπορεί να επιλέξει αυτήν τη συναλλαγή σύμφωνα με ορισμένες εκτιμήσεις κόστους (για παράδειγμα, το συντομότερο ή με τη χαμηλότερη προτεραιότητα κ.λπ.)

Συναλλαγές σε βιομηχανικές εφαρμογές

Η συναλλαγή είναι μια κρίσιμη έννοια για τη δημιουργία μιας βιομηχανικής κλίμακας εφαρμογής. Όπως έχει ήδη αναφερθεί, για τον χρήστη, μια συναλλαγή είναι ένα σήμα ότι μια ενέργεια είτε πραγματοποιήθηκε είτε δεν πραγματοποιήθηκε. Από την άλλη πλευρά, για έναν προγραμματιστή, μια συναλλαγή είναι ένα στυλ προγραμματισμού που του επιτρέπει να δημιουργεί ανεξάρτητες λειτουργικές μονάδες που μπορούν να λάβουν μέρος σε κατανεμημένους υπολογιστές. Για παράδειγμα, ένας πελάτης πρέπει να μεταφέρει μερικά από τα χρήματα από έναν λογαριασμό ταμιευτηρίου σε έναν λογαριασμό ελέγχου. Για αυτήν τη λειτουργία, το πιο σημαντικό σημείο θα είναι η ταυτόχρονη αλλαγή στην κατάσταση και των δύο λογαριασμών σε περίπτωση επιτυχούς συναλλαγής ή η διατήρηση της κατάστασης των λογαριασμών στην ίδια μορφή εάν η μεταφορά χρημάτων απέτυχε. Είναι απίθανο να σας αρέσει όταν τα χρήματα αφήνουν έναν λογαριασμό και δεν φτάνουν σε έναν άλλο. Και παρόλο που αυτή η προϋπόθεση είναι αυτονόητη απαίτηση για εφαρμογές αυτού του σκοπού, η εκτέλεση αυτής της λειτουργίας σε κατανεμημένα συστήματα χωρίς εισαγωγή οποιασδήποτε μορφής διαχείρισης και ελέγχου των συναλλαγών φαίνεται να είναι αρκετά προβληματική - οι υπολογιστές ενδέχεται να αποτύχουν και το μήνυμα μπορεί να χαθεί κάπου.

Οι συναλλαγές αποτελούν τη ραχοκοκαλιά των κατανεμημένων εφαρμογών. Επιπλέον, είναι οι συναλλαγές που παρέχουν αρθρωτή εκτέλεση προγράμματος - η οποία είναι η ουσία της τεχνολογίας συστατικών στον προγραμματισμό.

Ηλεκτρονικό εμπόριο: εξασφάλιση συναλλαγών

Οι συναλλαγές χωρίς μετρητά σε συστήματα πληρωμών ονομάζονται συναλλαγές. Τα συστήματα πληρωμών υποστηρίζουν συναλλαγές διαφόρων τύπων: αγορά, ανάληψη μετρητών σε υποκατάστημα τράπεζας, ανάληψη μετρητών από ATM, λήψη πληροφοριών σχετικά με το υπόλοιπο στο λογαριασμό του πελάτη και άλλα.

Οι συναλλαγές διαφέρουν επίσης στον τρόπο με τον οποίο παρουσιάζονται τα στοιχεία της κάρτας στο σύστημα πληρωμών. Υπάρχουν ηλεκτρονικές συναλλαγές (οι πληροφορίες για την κάρτα διαβάζονται από μαγνητική λωρίδα / τσιπ) και συναλλαγές φωνητικής εξουσιοδότησης (με βάση το χαρτί).

Συνήθως, η διαδικτυακή διαδικασία αγορών έχει ως εξής. Ο πελάτης, χρησιμοποιώντας έναν προσωπικό υπολογιστή (ή άλλη συσκευή) συνδεδεμένη στο Διαδίκτυο, επιλέγει τα αγαθά που ενδιαφέρουν στην εικονική βιτρίνα των προϊόντων στον ιστότοπο του καταστήματος. Αφού επιβεβαιώσει την επιλογή των αγαθών και συμφωνήσει με το κόστος τους, ο πελάτης ενημερώνει το κατάστημα για την επιθυμία να πληρώσει για την αγορά χρησιμοποιώντας μια πλαστική κάρτα.

Επιπλέον, πραγματοποιείται διάλογος μεταξύ του καταστήματος και του κατόχου της κάρτας, σκοπός του οποίου είναι να λάβει τις λεπτομέρειες της κάρτας του αγοραστή για την παρουσίασή τους στο δίκτυο με τη μορφή τυπικού αιτήματος εξουσιοδότησης. Κατά τη διάρκεια αυτού του διαλόγου, ο έμπορος και ο αγοραστής έχουν μερικές φορές την ευκαιρία να επικυρώσουν ο ένας τον άλλον, γεγονός που διασφαλίζει την ασφάλεια της συναλλαγής. Από τις πρώτες μέρες του ηλεκτρονικού εμπορίου, έχει καταστεί προφανές ότι οι μέθοδοι αναγνώρισης κατόχου κάρτας που χρησιμοποιούνται σε συμβατικές συναλλαγές δεν είναι ικανοποιητικές για τις συναλλαγές ηλεκτρονικού εμπορίου.

Πράγματι, όταν πραγματοποιείτε μια συναλλαγή αγοράς σε ένα φυσικό κατάστημα, ο πωλητής έχει το δικαίωμα να εξετάσει την πλαστική κάρτα που παρουσιάζεται για υπολογισμό για τη συμμόρφωσή της με τις απαιτήσεις των συστημάτων πληρωμής (ιδίως, ελέγξτε την παρουσία ενός ολογράμματος, ειδικά μυστικά σύμβολα, τις υπογραφές στο πάνελ και την απόδειξη πώλησης, κ.λπ.) ... Επιπλέον, ο πωλητής μπορεί να απαιτήσει από τον αγοραστή να παράσχει ένα έγγραφο που να αποδεικνύει την ταυτότητά του. Όλα αυτά καθιστούν την απάτη απάτη καρτών μια δαπανηρή επιχείρηση. Στην περίπτωση μιας συναλλαγής ηλεκτρονικού εμπορίου, το μόνο που απαιτείται από έναν απατεώνα είναι η γνώση των λεπτομερειών της κάρτας. Το κόστος που σχετίζεται με την κατασκευή μιας πλαστής φυσικής κάρτας δεν απαιτείται σε αυτήν την περίπτωση.

Για πλαστικές κάρτες με μαγνητική λωρίδα, ο πιο αξιόπιστος τρόπος για την προστασία μιας συναλλαγής από απάτη είναι να χρησιμοποιήσετε έναν κωδικό PIN για να προσδιορίσετε τον κάτοχο της κάρτας από την τράπεζα έκδοσης του. Οι μυστικές πληροφορίες που διαθέτει ο κάτοχος της κάρτας είναι ο κωδικός PIN. Είναι μια ακολουθία 4-12 ψηφίων που είναι γνωστή μόνο στον κάτοχο της κάρτας και στην τράπεζα έκδοσης του. Ο κωδικός PIN χρησιμοποιείται πάντα κατά τη διεξαγωγή συναλλαγής υψηλού κινδύνου, για παράδειγμα, κατά την έκδοση μετρητών στον κάτοχο της κάρτας σε ΑΤΜ. Η ανάληψη μετρητών σε ΑΤΜ πραγματοποιείται χωρίς την παρουσία εκπροσώπου της τράπεζας εξυπηρέτησης (η κατάσταση είναι παρόμοια με μια συναλλαγή ηλεκτρονικού εμπορίου). Επομένως, τα συνηθισμένα στοιχεία της κάρτας για την προστασία της λειτουργίας «ανάληψης μετρητών σε ΑΤΜ» δεν επαρκούν και χρησιμοποιούνται μυστικές πρόσθετες πληροφορίες - κωδικός PIN.

Φαίνεται ότι η χρήση ενός τέτοιου αναγνωριστικού θα μπορούσε να βοηθήσει στην επίλυση του προβλήματος ασφαλείας, αλλά αυτό δεν ισχύει. Δυστυχώς, στην εφαρμογή του ηλεκτρονικού εμπορίου, αυτή η μέθοδος δεν εφαρμόζεται στην κλασική μορφή.

Η χρήση του κωδικού PIN πρέπει να γίνεται με τέτοιο τρόπο ώστε αυτή η μυστική παράμετρος να παραμένει κρυπτογραφημένη σε όλα τα στάδια της επεξεργασίας συναλλαγών (θα πρέπει να είναι γνωστή μόνο στον κάτοχο της κάρτας και στην τράπεζα).

Το κλασικό σχήμα θα μπορούσε να εφαρμοστεί χρησιμοποιώντας ασύμμετρους αλγόριθμους με κρυπτογράφηση του κωδικού PIN του κατόχου της κάρτας με το δημόσιο κλειδί του εμπόρου. Ωστόσο, για την παρουσίαση του κωδικού PIN στο δίκτυο πληρωμών, πρέπει να είναι κρυπτογραφημένος, όπως είναι συνηθισμένο σε όλα τα συστήματα πληρωμών, με συμμετρικό κλειδί.

Υπάρχει μια άλλη, μη κλασική λύση για τη χρήση κωδικού PIN. Για παράδειγμα, είναι δυνατό να κρυπτογραφηθεί ο κωδικός PIN στον υπολογιστή του κατόχου της κάρτας συν ορισμένα δεδομένα που αλλάζουν δυναμικά από συναλλαγή σε συναλλαγή σε ένα κλειδί γνωστό μόνο στον εκδότη και στον κάτοχο της κάρτας. Αυτή η προσέγγιση θα απαιτήσει την επίλυση του προβλήματος της διανομής μυστικών κλειδιών. Αυτή η εργασία είναι πολύ δύσκολη (είναι προφανές ότι κάθε κάτοχος κάρτας πρέπει να έχει το δικό του ατομικό κλειδί) και εάν έχει ήδη επιλυθεί, τότε έχει νόημα να χρησιμοποιήσετε τη λύση του για άλλες μεθόδους ελέγχου ταυτότητας του κατόχου της κάρτας που είναι πιο αποτελεσματικές από τον έλεγχο τον κωδικό PIN.

Ως αποτέλεσμα της ανάλυσης, τα συστήματα πληρωμών "διαμόρφωσαν" τις βασικές απαιτήσεις για τα συστήματα διεξαγωγής συναλλαγών στο ηλεκτρονικό εμπόριο, τα οποία διασφαλίζουν το απαιτούμενο επίπεδο ασφάλειας:

1. Έλεγχος ταυτότητας των συμμετεχόντων στην αγορά (αγοραστής, κατάστημα λιανικής και τράπεζα εξυπηρέτησης). Ο έλεγχος ταυτότητας ενός αγοραστή (πωλητή) σημαίνει μια διαδικασία που αποδεικνύει (στο επίπεδο αξιοπιστίας γνωστών κρυπτογραφικών αλγορίθμων) το γεγονός ότι ένας δεδομένος κάτοχος κάρτας είναι πράγματι πελάτης ενός συγκεκριμένου εκδότη-συμμετέχοντα (εξυπηρετώντας τράπεζα-συμμετέχων) αυτού του συστήματος πληρωμών. Ο έλεγχος ταυτότητας της τράπεζας εξυπηρέτησης αποδεικνύει το γεγονός ότι η τράπεζα είναι μέλος αυτού του συστήματος πληρωμών.

2. Οι λεπτομέρειες της κάρτας πληρωμής (αριθμός κάρτας, ημερομηνία λήξης, CVC2 / CVV2 κ.λπ.) που χρησιμοποιούνται στη συναλλαγή πρέπει να είναι εμπιστευτικές για τον έμπορο.

3. Η αδυναμία ακύρωσης της συναλλαγής για όλους τους συμμετέχοντες στη συναλλαγή, δηλαδή, όλοι οι συμμετέχοντες έχουν αδιαμφισβήτητη απόδειξη του γεγονότος ότι πραγματοποίησαν μια αγορά (παραγγελία ή πληρωμή).

4. Εγγύηση πληρωμής στον έμπορο για ηλεκτρονική αγορά - ο έμπορος έχει απόδειξη ότι η παραγγελία έχει ολοκληρωθεί.

Συναλλαγές στο InterBase

Τέλος, θα καλύψω δύο περιβάλλοντα όπου πραγματοποιούνται οι συναλλαγές. Δηλαδή, σχετικά με την εφαρμογή συναλλαγών στο InterBase και σχετικά με την "Java Transaction Service" της τεχνολογίας Enterprise JavaBeans.

Υπάρχουν τρεις εκφράσεις για τη διαχείριση συναλλαγών στο InterBase:

SET TRANSACTION - Ξεκινά μια συναλλαγή και καθορίζει τη συμπεριφορά της.

ΕΠΙΤΡΟΠΗ - Αποθηκεύει τις αλλαγές που πραγματοποιήθηκαν από τη συναλλαγή στη βάση δεδομένων και τερματίζει τη συναλλαγή.

ROLLBACK - Επαναφέρει τις αλλαγές που πραγματοποιήθηκαν από τη συναλλαγή και τερματίζει τη συναλλαγή.

1. Έναρξη συναλλαγής

Για να ξεκινήσετε μια συναλλαγή, πρέπει να εκτελέσετε την ακόλουθη εντολή SQL:

ΡΥΘΜΙΣΗ ΣΥΝΑΛΛΑΓΗΣ

Έκφραση "SET TRANSACTION"
είναι ισοδύναμη με την έκφραση
"ΡΥΘΜΙΣΗ ΣΥΝΑΛΛΑΓΗΣ ΔΙΑΒΑΣΤΕ ΓΡΑΠΤΗΣΤΕ ΠΕΡΙΣΣΟΤΕΡΑ ΕΠΙΠΕΔΟ ΜΟΝΩΣΗΣ SNAPSHOT"

Λειτουργία πρόσβασης - καθορίζει τον τύπο πρόσβασης δεδομένων. Μπορεί να πάρει δύο τιμές:

ΔΙΑΒΑΣΤΕ ΜΟΝΟ - δείχνει ότι η συναλλαγή μπορεί να διαβάσει μόνο δεδομένα και δεν μπορεί να τα τροποποιήσει.

ΔΙΑΒΑΣΤΕ ΓΡΑΦΗ - δείχνει ότι η συναλλαγή μπορεί να διαβάσει και να τροποποιήσει δεδομένα. Αυτή είναι η προεπιλογή.

Επίπεδο απομόνωσης - καθορίζει τη σειρά αλληλεπίδρασης αυτής της συναλλαγής με άλλους σε αυτήν τη βάση δεδομένων. Μπορεί να λάβει τιμές:

Το SNAPSHOT είναι η προεπιλογή. Μέσα στη συναλλαγή, τα δεδομένα θα είναι διαθέσιμα στην κατάσταση στην οποία βρισκόταν τη στιγμή που ξεκίνησε η συναλλαγή. Εάν στην πορεία, αλλαγές που έγιναν από άλλες ολοκληρωμένες συναλλαγές εμφανίζονται στη βάση δεδομένων, τότε αυτή η συναλλαγή δεν θα τις δει. Εάν προσπαθήσετε να τροποποιήσετε τέτοιες εγγραφές, θα εμφανιστεί ένα μήνυμα διένεξης.

SNAPSHOT TABLE STABILITY - Παραχωρεί στην συναλλαγή αποκλειστική πρόσβαση στους πίνακες που χρησιμοποιεί. Άλλες συναλλαγές θα μπορούν να διαβάζουν δεδομένα μόνο από αυτές.

ΔΙΑΒΑΣΤΕ ΔΕΣΜΕΥΣΗ - επιτρέπει σε μια συναλλαγή να βλέπει την τρέχουσα κατάσταση της βάσης δεδομένων.

Οι διενέξεις κλειδώματος εγγραφής εμφανίζονται σε δύο περιπτώσεις:

Μια συναλλαγή προσπαθεί να τροποποιήσει μια εγγραφή που άλλαξε ή διαγράφηκε μετά την έναρξή της. Μια συναλλαγή READ COMMITTED μπορεί να κάνει αλλαγές σε εγγραφές που έχουν τροποποιηθεί από άλλες συναλλαγές μετά την ολοκλήρωσή τους.

Η συναλλαγή προσπαθεί να τροποποιήσει έναν πίνακα που κλειδώνεται από άλλη συναλλαγή τύπου SNAPSHOT TABLE STABILITY.

Lock Resolution - καθορίζει την πορεία των συμβάντων όταν εντοπίζεται διένεξη κλειδώματος. Μπορεί να πάρει δύο τιμές:

Το WAIT είναι η προεπιλογή. Περιμένοντας να ξεκλειδωθεί η απαιτούμενη καταχώριση. Μετά από αυτό, προσπαθεί να συνεχίσει να εργάζεται.

NO WAIT - Επιστρέφει αμέσως ένα σφάλμα κλειδώματος εγγραφής.

Table Reservation - επιτρέπει σε μια συναλλαγή να έχει εγγυημένη πρόσβαση του απαιτούμενου επιπέδου στους καθορισμένους πίνακες. Υπάρχουν τέσσερα επίπεδα πρόσβασης:

ΠΡΟΣΤΑΤΕΥΜΕΝΗ ΔΙΑΒΑΣΗ - Αποτρέπει άλλες συναλλαγές από την ενημέρωση του πίνακα, αλλά τους επιτρέπει να λαμβάνουν δεδομένα από τον πίνακα.

PROTECTED WRITE - απαγορεύει την ενημέρωση του πίνακα από άλλες συναλλαγές, μόνο οι συναλλαγές SNAPSHOT ή READ COMMITTED μπορούν να διαβάσουν δεδομένα από τον πίνακα.

Το SHARED READ είναι το πιο φιλελεύθερο επίπεδο. Ο καθένας μπορεί να διαβάσει, να τροποποιήσει - ΔΙΑΒΑΣΤΕ ΓΡΑΠΤΕΣ συναλλαγές.

SHARED WRITE - Οι συναλλαγές SNAPSHOT ή READ COMMITTED READ WRITE μπορούν να τροποποιήσουν τον πίνακα, ενώ οι υπόλοιποι μπορούν να πάρουν μόνο δεδομένα.

2. Ολοκλήρωση της συναλλαγής

Όταν όλες οι ενέργειες που συνθέτουν μια συναλλαγή έχουν ολοκληρωθεί επιτυχώς ή έχει προκύψει σφάλμα, η συναλλαγή πρέπει να ολοκληρωθεί προκειμένου η βάση δεδομένων να βρίσκεται σε σταθερή κατάσταση. Υπάρχουν δηλώσεις SQL για αυτό:

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

ROLLBACK - επιστροφή συναλλαγών. Η συναλλαγή τελειώνει και δεν γίνονται αλλαγές στη βάση δεδομένων. Αυτή η λειτουργία εκτελείται όταν παρουσιάζεται σφάλμα κατά τη λειτουργία (για παράδειγμα, όταν είναι αδύνατο να ενημερώσετε μια εγγραφή).

Υπηρεσία συναλλαγών Java

Η αρχιτεκτονική EJB (Server Bean Technology, Enterprise JavaBeans) χρησιμοποιεί τον Java Transaction Service (JTS) ως συντονιστή συναλλαγών. Στην ορολογία JTS, αυτός ο συντονιστής αναφέρεται ως διαχειριστής συναλλαγών. Οι συμμετέχοντες σε μια συναλλαγή που εφαρμόζουν προστατευμένους πόρους συναλλαγών όπως σχεσιακές βάσεις δεδομένων ονομάζονται διαχειριστές πόρων. Όταν μια εφαρμογή ξεκινά μια συναλλαγή, δημιουργεί ένα αντικείμενο που αντιπροσωπεύει αυτήν τη συναλλαγή. Στη συνέχεια, η εφαρμογή καλεί τους διαχειριστές πόρων να εκτελέσουν τη λειτουργία. Κατά την εκτέλεση μιας συναλλαγής, καθένας από τους διαχειριστές συναλλαγών παρακολουθεί το έργο καθενός από τους διαχειριστές πόρων που καθορίζονται στη συναλλαγή.

Η πρώτη κλήση από την εφαρμογή σε καθέναν από τους διαχειριστές πόρων καθορίζει την τρέχουσα συναλλαγή. Για παράδειγμα, εάν μια εφαρμογή χρησιμοποιεί μια σχεσιακή βάση δεδομένων, επικαλείται τη διασύνδεση Java Database Connectivity (JDBC), η οποία συσχετίζει το αντικείμενο συναλλαγής με τη βάση δεδομένων. Από τώρα και στο εξής, όλες οι κλήσεις που πραγματοποιούνται μέσω αυτής της σύνδεσης θα πραγματοποιούνται για λογαριασμό της ίδιας της συναλλαγής βάσης δεδομένων, έως ότου ολοκληρωθεί η συναλλαγή.

Η εφαρμογή δεσμεύει το αποτέλεσμα της συναλλαγής καλώντας τη μέθοδο xa_commit () και αναφέρει ότι η συναλλαγή ολοκληρώθηκε με επιτυχία. Εάν, για οποιονδήποτε λόγο, η εφαρμογή δεν μπορεί να ολοκληρώσει τη συναλλαγή, καλεί τη μέθοδο xa_rollback () για να αναιρέσει τις αλλαγές που πραγματοποιήθηκαν. Σε περίπτωση που η εφαρμογή δεν είναι σε θέση να ολοκληρώσει τη συναλλαγή, το JTS σταματά την εργασία. Όταν η συναλλαγή επιτύχει, η εφαρμογή καλεί το JTS να αποθηκεύσει το αποτέλεσμα. Στη συνέχεια, το JTS περνά από ένα πρωτόκολλο δέσμευσης δύο φάσεων για να υποβάλει την εργασία στους διαχειριστές πόρων που καθορίζονται στη συναλλαγή.

Το πρωτόκολλο δύο φάσεων δέσμευσης χρησιμοποιείται για να διασφαλιστεί ότι το αποτέλεσμα μιας συναλλαγής αποθηκεύεται ή μια εργασία ακυρώνεται. Στην πρώτη φάση, το JTS καθορίζει την ετοιμότητα καθενός από τους διαχειριστές πόρων. Εάν καθένας από αυτούς επιβεβαιώσει την ετοιμότητά του, τότε στη δεύτερη φάση, το JTS στέλνει ένα μήνυμα σε καθένα από αυτά δηλώνοντας το αποτέλεσμα. Εάν κάποιος από τους διαχειριστές δεν ανταποκριθεί στο αίτημα ή δεν δώσει αρνητική απάντηση, η JTS ειδοποιεί τους άλλους διαχειριστές ότι η συναλλαγή ακυρώνεται.


Υπάρχουν διάφορα μοντέλα συναλλαγών που μπορούν να ταξινομηθούν με βάση διάφορες ιδιότητες, συμπεριλαμβανομένης της δομής της συναλλαγής, της ταυτόχρονης συναλλαγής, της διάρκειας κ.λπ.

Επί του παρόντος, διακρίνονται οι ακόλουθοι τύποι συναλλαγών: επίπεδες ή κλασικές συναλλαγές, αλυσοδεμένες συναλλαγές και ένθετες συναλλαγές.

Οι επίπεδες ή παραδοσιακές συναλλαγές χαρακτηρίζονται από τέσσερις κλασικές ιδιότητες: ατομικότητα, συνέπεια, απομόνωση, ανθεκτικότητα (αντοχή) - ACID (Ατομικότητα, συνέπεια, απομόνωση, ανθεκτικότητα). Οι παραδοσιακές συναλλαγές αναφέρονται μερικές φορές ως συναλλαγές ACID. Οι ιδιότητες που αναφέρονται παραπάνω σημαίνουν τα εξής:

· Ατομική ιδιότητα(Ατομικότητα) εκφράζεται στο γεγονός ότι μια συναλλαγή πρέπει να ολοκληρωθεί στο σύνολό της ή καθόλου.

· Ιδιότητα συνοχής(Συνέπεια) διασφαλίζει ότι καθώς οι συναλλαγές εξελίσσονται, τα δεδομένα μεταβαίνουν από τη μία σταθερή κατάσταση στην άλλη - η συναλλαγή δεν σπάει την αμοιβαία συνέπεια των δεδομένων.

· Ιδιοκτησία απομόνωσης(Απομόνωση) σημαίνει ότι οι ανταγωνιστικές συναλλαγές για πρόσβαση στη βάση δεδομένων υφίστανται φυσική επεξεργασία διαδοχικά, μεμονωμένα, αλλά στους χρήστες φαίνεται ότι εκτελούνται παράλληλα.

· Ιδιότητα ανθεκτικότητας(Ανθεκτικότητα) ερμηνεύεται ως εξής: εάν η συναλλαγή ολοκληρωθεί με επιτυχία, τότε οι αλλαγές στα δεδομένα που έγιναν από αυτήν δεν μπορούν να χαθούν σε καμία περίπτωση (ακόμη και σε περίπτωση επακόλουθων σφαλμάτων).

Υπάρχουν δύο επιλογές για την ολοκλήρωση μιας συναλλαγής. Εάν όλες οι δηλώσεις είναι επιτυχείς και δεν προέκυψαν αστοχίες υλικού ή λογισμικού κατά τη διάρκεια της συναλλαγής, η συναλλαγή πραγματοποιείται.

Η πραγματοποίηση μιας συναλλαγής είναι η πράξη γραφής σε αλλαγές δίσκου στη βάση δεδομένων που πραγματοποιήθηκαν κατά την εκτέλεση μιας συναλλαγής.

Μέχρι να πραγματοποιηθεί η συναλλαγή, επιτρέπεται η επαναφορά αυτών των αλλαγών, επαναφέροντας τη βάση δεδομένων στην κατάσταση στην οποία βρισκόταν τη στιγμή που ξεκίνησε η συναλλαγή. Η πραγματοποίηση μιας συναλλαγής σημαίνει ότι όλα τα αποτελέσματα της συναλλαγής είναι μόνιμα. Θα γίνουν ορατές σε άλλες συναλλαγές μόνο μετά την εκτέλεση της τρέχουσας συναλλαγής. Μέχρι αυτό το σημείο, όλα τα δεδομένα που επηρεάζονται από τη συναλλαγή θα είναι «ορατά» στον χρήστη στην αρχή της τρέχουσας συναλλαγής.

Εάν συμβεί κάτι κατά την εκτέλεση μιας συναλλαγής που καθιστά αδύνατη την κανονική ολοκλήρωσή της, η βάση δεδομένων πρέπει να επιστραφεί στην αρχική της κατάσταση. Μια επαναφορά συναλλαγής είναι η ενέργεια που επαναφέρει όλες τις αλλαγές δεδομένων που έχουν γίνει από δηλώσεις SQL στο σώμα της τρέχουσας εκκρεμής συναλλαγής.

Κάθε δήλωση σε μια συναλλαγή κάνει το μέρος της εργασίας, αλλά όλες οι δηλώσεις της πρέπει να συμπληρώνονται άνευ όρων για να ολοκληρωθεί επιτυχώς ολόκληρη η εργασία. Η ομαδοποίηση των δηλώσεων σε μια συναλλαγή λέει στο DBMS ότι ολόκληρη η ομάδα πρέπει να εκτελεστεί στο σύνολό της και αυτή η εκτέλεση θα πρέπει να υποστηρίζεται αυτόματα.

Το πρότυπο ANSI / ISO SQL καθορίζει το μοντέλο συναλλαγών και τις λειτουργίες των δηλώσεων COMMIT και ROLLBACK. Το πρότυπο καθορίζει ότι μια συναλλαγή ξεκινά με την πρώτη δήλωση SQL, που ξεκίνησε από το χρήστη ή περιέχεται σε ένα πρόγραμμα, που αλλάζει την τρέχουσα κατάσταση της βάσης δεδομένων. Όλες οι επόμενες δηλώσεις SQL αποτελούν το σώμα της συναλλαγής. Η συναλλαγή τελειώνει με έναν από τους τέσσερις πιθανούς τρόπους (Σχήμα 11.1):

1. Η δήλωση COMMIT σημαίνει επιτυχημένη ολοκλήρωση της συναλλαγής · Η χρήση του καθιστά μόνιμες τις αλλαγές που έγιναν στη βάση δεδομένων στην τρέχουσα συναλλαγή.

2. Η δήλωση ROLLBACK ακυρώνει τη συναλλαγή, ακυρώνοντας τις αλλαγές που έγιναν στη βάση δεδομένων ως μέρος αυτής της συναλλαγής. μια νέα συναλλαγή ξεκινά αμέσως μετά τη χρήση του ROLLBACK.

3. η επιτυχής ολοκλήρωση του προγράμματος στο οποίο ξεκίνησε η τρέχουσα συναλλαγή σημαίνει την επιτυχή ολοκλήρωση της συναλλαγής (σαν να χρησιμοποιήθηκε η δήλωση COMMIT) ·

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

Σε αυτό το μοντέλο, κάθε δήλωση που αλλάζει την κατάσταση της βάσης δεδομένων θεωρείται συναλλαγή, επομένως, μετά την επιτυχή ολοκλήρωση αυτής της δήλωσης, η βάση δεδομένων εισέρχεται σε μια νέα σταθερή κατάσταση.

Οι πρώτες εκδόσεις των εμπορικών DBMS εφάρμοσαν το μοντέλο συναλλαγών ANSI / ISO. Αργότερα, ένα εκτεταμένο μοντέλο συναλλαγής εφαρμόστηκε στο SYBASE DBMS, το οποίο περιλαμβάνει έναν αριθμό πρόσθετων λειτουργιών. Το μοντέλο SYBASE χρησιμοποιεί τους ακόλουθους τέσσερις τελεστές:

· Η δήλωση BEGIN TRANSACTION δείχνει την έναρξη μιας συναλλαγής. Σε αντίθεση με το μοντέλο ANSI / ISO, όπου η έναρξη μιας συναλλαγής καθορίζεται έμμεσα από την πρώτη δήλωση τροποποίησης δεδομένων, στο μοντέλο SYBASE, η έναρξη μιας συναλλαγής καθορίζεται ρητά χρησιμοποιώντας την αρχή της δήλωσης συναλλαγής.

· Η δήλωση COMMIT TRANSACTION αναφέρει την επιτυχή ολοκλήρωση της συναλλαγής. Είναι ισοδύναμο με τη δήλωση COMMIT στο πρότυπο πρότυπο ANSI / ISO. Αυτός ο χειριστής, όπως και ο χειριστής COMMIT, πραγματοποιεί όλες τις αλλαγές που έγιναν στη βάση δεδομένων κατά την εκτέλεση της συναλλαγής.

· Η δήλωση SAVE TRANSACTION δημιουργεί ένα σημείο αποθήκευσης εντός της συναλλαγής που αντιστοιχεί στην ενδιάμεση κατάσταση της βάσης δεδομένων που έχει αποθηκευτεί τη στιγμή της εκτέλεσης αυτής της δήλωσης. Η δήλωση SAVE TRANSACTION μπορεί να περιέχει το όνομα του αποθηκευτικού σημείου. Επομένως, κατά την εκτέλεση μιας συναλλαγής, μπορούν να αποθηκευτούν αρκετά σημεία αποθήκευσης, που αντιστοιχούν σε διάφορες ενδιάμεσες καταστάσεις.

· Ο χειριστής ROLLBACK έχει δύο τροποποιήσεις. Εάν αυτή η δήλωση χρησιμοποιείται χωρίς πρόσθετη παράμετρο, ερμηνεύεται ως δήλωση επαναφοράς για ολόκληρη τη συναλλαγή, δηλαδή, στην περίπτωση αυτή είναι ισοδύναμη με τη δήλωση ROLLBACK στο μοντέλο ANSI / ISO. Εάν η δήλωση επαναφοράς έχει μια παράμετρο και είναι γραμμένη ως ROLLBACK B, τότε ερμηνεύεται ως μερική δήλωση επαναφοράς συναλλαγής στο σημείο αποθήκευσης B.

Σύκο. 11.1.Μοντέλο συναλλαγής ANSI / ISO

Οι αρχές εκτέλεσης συναλλαγών στο εκτεταμένο μοντέλο συναλλαγών φαίνονται στο Σχ. 11.2. Στο σχήμα, οι χειριστές επισημαίνονται με αριθμούς, ώστε να είναι πιο βολικό για μας να εντοπίσουμε την πρόοδο της συναλλαγής σε όλες τις επιτρεπόμενες περιπτώσεις.

Σύκο. 11.2.Παραδείγματα εκτέλεσης συναλλαγών στο εκτεταμένο μοντέλο

Η συναλλαγή ξεκινά με έναν ρητό χειριστή της έναρξης της συναλλαγής, ο οποίος έχει τον αριθμό 1 στο σύστημά μας. Στη συνέχεια έρχεται ο τελεστής 2, ο οποίος είναι χειριστής αναζήτησης και δεν αλλάζει την τρέχουσα κατάσταση της βάσης δεδομένων, και τους ακόλουθους χειριστές 3 και 4 μεταφορά της βάσης δεδομένων σε νέα κατάσταση. Η δήλωση 5 αποθηκεύει αυτήν τη νέα ενδιάμεση κατάσταση της βάσης δεδομένων και την επισημαίνει ως ενδιάμεση κατάσταση στο σημείο A. Στη συνέχεια ακολουθούν οι δηλώσεις 6 και 7, οι οποίες μεταφέρουν τη βάση δεδομένων σε μια νέα κατάσταση. Και ο χειριστής 8 αποθηκεύει αυτήν την κατάσταση ως ενδιάμεση κατάσταση στο σημείο Β. Ο χειριστής 9 εκτελεί νέα εισαγωγή δεδομένων και ο χειριστής 10 εκτελεί κάποιο έλεγχο της κατάστασης 1. Εάν πληρούται η συνθήκη 1, τότε εκτελείται η δήλωση 11, η οποία επαναφέρει τη συναλλαγή στην ενδιάμεση κατάσταση Β. Αυτό σημαίνει ότι οι συνέπειες των ενεργειών της δήλωσης 9 διαγράφονται, όπως ήταν, και η βάση δεδομένων επιστρέφει στην ενδιάμεση κατάσταση Β , παρόλο που μετά την εκτέλεση της δήλωσης 9 βρισκόταν ήδη σε νέα κατάσταση. Και μετά την επαναφορά της συναλλαγής, αντί της δήλωσης 9, η οποία εκτελέστηκε νωρίτερα από την κατάσταση Στη βάση δεδομένων, εκτελείται η δήλωση 13 της εισαγωγής νέων δεδομένων και, στη συνέχεια, ο έλεγχος μεταφέρεται στη δήλωση 14. Η δήλωση 14 ελέγχει ξανά την κατάσταση, αλλά ήδη κάποια νέα συνθήκη 2; εάν πληρούται η συνθήκη, τότε ο έλεγχος μεταφέρεται στον χειριστή 15, ο οποίος επαναφέρει τη συναλλαγή στην ενδιάμεση κατάσταση Α, δηλαδή, όλοι οι χειριστές που άλλαξαν τη βάση δεδομένων, ξεκινώντας από το 6 και τελειώνουν με 13, θεωρούνται ανεκπλήρωτοι, δηλαδή , τα αποτελέσματα της εκτέλεσης τους έχουν εξαφανιστεί και είμαστε και πάλι στην κατάσταση Και, όπως μετά την εκτέλεση της δήλωσης 4. Στη συνέχεια, ο έλεγχος μεταφέρεται στον χειριστή 17, ο οποίος ενημερώνει τα περιεχόμενα της βάσης δεδομένων και στη συνέχεια ο έλεγχος μεταφέρεται στον χειριστή 18, που σχετίζεται με την κατάσταση ελέγχου 3. Ο έλεγχος τελειώνει είτε μεταφέροντας τον έλεγχο στον χειριστή 20, ο οποίος πραγματοποιεί τη συναλλαγή, και η βάση δεδομένων πηγαίνει σε μια νέα σταθερή κατάσταση, και είναι αδύνατο να την αλλάξετε εντός της τρέχουσας συναλλαγής. Ή, εάν ο έλεγχος μεταφερθεί στον χειριστή 19, τότε η συναλλαγή επαναφέρεται στην αρχή και η βάση δεδομένων επιστρέφει στην αρχική της κατάσταση και όλες οι ενδιάμεσες καταστάσεις έχουν ήδη ελεγχθεί εδώ και είναι αδύνατο να εκτελεστεί μια λειτουργία επαναφοράς σε αυτά τα ενδιάμεσα δηλώνει μετά την εκτέλεση του χειριστή 19.

Φυσικά, το εκτεταμένο μοντέλο συναλλαγών της SYBASE υποστηρίζει έναν πολύ πιο ευέλικτο μηχανισμό εκτέλεσης συναλλαγών. Τα σημεία αποθήκευσης επιτρέπουν τον καθορισμό δεικτών σε μια συναλλαγή, έτσι ώστε μόνο μέρος της εργασίας που πραγματοποιείται στη συναλλαγή να μπορεί να αναιρεθεί. Συνιστάται η χρήση σημείων αποθήκευσης σε μακροχρόνιες και πολύπλοκες συναλλαγές για να διασφαλιστεί ότι ορισμένες δηλώσεις μπορούν να αναιρεθούν. Ωστόσο, αυτό οδηγεί σε πρόσθετο κόστος των πόρων του συστήματος - ο χειριστής εκτελεί την εργασία και οι αλλαγές στη συνέχεια ακυρώνονται. Συνήθως, οι βελτιώσεις στη λογική επεξεργασίας μπορεί να είναι μια καλύτερη λύση.

Αρχείο καταγραφής συναλλαγών

Η εφαρμογή στο DBMS της αρχής της διατήρησης των ενδιάμεσων καταστάσεων, της επιβεβαίωσης ή της επαναφοράς μιας συναλλαγής παρέχεται από έναν ειδικό μηχανισμό, για την υποστήριξη της δημιουργίας μιας συγκεκριμένης δομής συστήματος, που ονομάζεται Αρχείο καταγραφής συναλλαγών.

Ωστόσο, ο σκοπός του αρχείου καταγραφής συναλλαγών είναι πολύ ευρύτερος. Έχει σχεδιαστεί για να παρέχει αξιόπιστη αποθήκευση δεδομένων στη βάση δεδομένων.

Και αυτή η απαίτηση συνεπάγεται, ιδίως, τη δυνατότητα επαναφοράς της σταθερής κατάστασης της βάσης δεδομένων μετά από κάθε είδους αποτυχία υλικού και λογισμικού. Προφανώς, απαιτούνται ορισμένες πρόσθετες πληροφορίες για την πραγματοποίηση αποκαταστάσεων. Στη συντριπτική πλειονότητα των σύγχρονων σχεσιακών DBMS, τέτοιες περιττές πρόσθετες πληροφορίες διατηρούνται με τη μορφή αρχείου καταγραφής αλλαγών βάσης δεδομένων, που συχνά ονομάζεται Αρχείο καταγραφής συναλλαγών.

Έτσι, ο γενικός στόχος της καταγραφής των αλλαγών στη βάση δεδομένων είναι να διασφαλιστεί ότι η βάση δεδομένων μπορεί να αποκατασταθεί σε σταθερή κατάσταση μετά από οποιαδήποτε αποτυχία. Επειδή η βάση για τη διατήρηση της σταθερής κατάστασης μιας βάσης δεδομένων είναι ο μηχανισμός συναλλαγών, η καταγραφή και η ανάκτηση σχετίζονται στενά με την έννοια μιας συναλλαγής. Οι γενικές αρχές της αποκατάστασης είναι οι εξής:

· Τα αποτελέσματα των δεσμευμένων συναλλαγών πρέπει να αποθηκευτούν στην κατάσταση αποκατάστασης της βάσης δεδομένων.

· Τα αποτελέσματα των μη δεσμευμένων συναλλαγών δεν πρέπει να εμφανίζονται στην κατάσταση αποκατάστασης της βάσης δεδομένων.

Αυτό, στην πραγματικότητα, σημαίνει ότι γίνεται επαναφορά της πιο πρόσφατης σταθερής κατάστασης της βάσης δεδομένων.

Είναι δυνατές οι ακόλουθες καταστάσεις στις οποίες πρέπει να επαναφέρετε την κατάσταση της βάσης δεδομένων.

· Ατομική επαναφορά της συναλλαγής. Αυτή η επαναφορά πρέπει να εφαρμοστεί στις ακόλουθες περιπτώσεις:

o η τυπική κατάσταση για μια επαναφορά συναλλαγής είναι η ρητή ολοκλήρωσή της με μια δήλωση ROLLBACK.

o μη φυσιολογικό τερματισμό του προγράμματος εφαρμογής, το οποίο είναι λογικά ισοδύναμο με την εκτέλεση της δήλωσης ROLLBACK, αλλά φυσικά έχει διαφορετικό μηχανισμό εκτέλεσης.

o αναγκαστική επαναφορά μιας συναλλαγής σε περίπτωση αδιεξόδου παράλληλης εκτέλεσης συναλλαγών. Σε μια τέτοια περίπτωση, για να σπάσει το αδιέξοδο, αυτή η συναλλαγή μπορεί να επιλεγεί ως «θύμα» και η εκτέλεση της από τον πυρήνα DBMS σταμάτησε αναγκαστικά.

· Ανάκτηση μετά από ξαφνική απώλεια των περιεχομένων της μνήμης RAM (μαλακή αστοχία). Αυτή η κατάσταση μπορεί να προκύψει στις ακόλουθες περιπτώσεις:

o σε περίπτωση έκτακτης διακοπής της τροφοδοσίας ·

o σε περίπτωση ανεπανόρθωτης αστοχίας του επεξεργαστή (για παράδειγμα, λειτουργία ελέγχου RAM), κ.λπ. Η κατάσταση χαρακτηρίζεται από την απώλεια εκείνου του τμήματος της βάσης δεδομένων που περιέχεται στις μνήμες RAM κατά τη στιγμή της αποτυχίας.

· Ανάκτηση μετά από ανάλυση των κύριων εξωτερικών μέσων βάσης δεδομένων (σκληρή αποτυχία). Αυτή η κατάσταση, με αρκετά υψηλή αξιοπιστία των σύγχρονων εξωτερικών συσκευών μνήμης, μπορεί να εμφανιστεί σχετικά σπάνια, αλλά παρ 'όλα αυτά το DBMS θα πρέπει να μπορεί να επαναφέρει τη βάση δεδομένων ακόμη και σε αυτήν την περίπτωση. Η βάση της ανάκτησης είναι το αντίγραφο αρχείου και το αρχείο καταγραφής αλλαγών της βάσης δεδομένων.

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

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

Υπάρχουν δύο κύριες επιλογές για τη διατήρηση πληροφοριών καταγραφής. Στην πρώτη επιλογή, διατηρείται ξεχωριστό αρχείο καταγραφής αλλαγών τοπικής βάσης δεδομένων για κάθε συναλλαγή μέσω αυτής της συναλλαγής. Αυτά τα αρχεία καταγραφής ονομάζονται τοπικά αρχεία καταγραφής. Χρησιμοποιούνται για μεμονωμένες επαναφορές συναλλαγών και μπορούν να διατηρηθούν στη μνήμη RAM (πιο σωστά, στην εικονική) μνήμη. Επιπλέον, διατηρείται ένα γενικό αρχείο καταγραφής αλλαγών βάσης δεδομένων, το οποίο χρησιμοποιείται για την ανάκτηση της κατάστασης της βάσης δεδομένων μετά από μαλακές και σκληρές αποτυχίες.

Αυτή η προσέγγιση σάς επιτρέπει να εκτελείτε γρήγορα μεμονωμένες επαναφορές συναλλαγών, αλλά οδηγεί σε διπλές πληροφορίες στα τοπικά και κοινόχρηστα αρχεία καταγραφής. Επομένως, η δεύτερη επιλογή χρησιμοποιείται πιο συχνά - διατηρώντας μόνο ένα γενικό αρχείο καταγραφής αλλαγών στη βάση δεδομένων, το οποίο χρησιμοποιείται επίσης κατά την εκτέλεση μεμονωμένων επαναφορών. Στη συνέχεια, εξετάζουμε αυτήν τη συγκεκριμένη επιλογή.

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

Κάθε καταχώριση στο αρχείο καταγραφής συναλλαγών σημειώνεται με τον αριθμό της συναλλαγής στην οποία ανήκει και τις τιμές των χαρακτηριστικών που αλλάζει. Επιπλέον, για κάθε συναλλαγή, η εντολή έναρξης και τερματισμού της συναλλαγής καταγράφεται στο αρχείο καταγραφής (βλ. Εικόνα 11.3).

Για μεγαλύτερη αξιοπιστία, το αρχείο καταγραφής συναλλαγών αναπαράγεται συχνά από τα εργαλεία συστήματος εμπορικών DBMS, γι 'αυτό και η ποσότητα της εξωτερικής μνήμης είναι πολλές φορές μεγαλύτερη από την πραγματική ποσότητα δεδομένων που είναι αποθηκευμένα στο χώρο αποθήκευσης.

Υπάρχουν δύο εναλλακτικές λύσεις για καταγραφή συναλλαγών: πρωτόκολλο αναβαλλόμενης ενημέρωσης και πρωτόκολλο άμεσης ενημέρωσης.

Η καταγραφή αλλαγών σε εκκρεμότητα προϋποθέτει τον ακόλουθο μηχανισμό εκτέλεσης συναλλαγών:

1. Όταν ξεκινά η συναλλαγή Τ1, μια εγγραφή εισάγεται στο πρωτόκολλο

<Т1 Begin transaction>

2. Κατά την εκτέλεση της συναλλαγής, μια νέα τιμή καταγράφεται στο πρωτόκολλο για κάθε αλλαγή εγγραφής: ... Εδώ το ID_RECORD είναι ένας μοναδικός αριθμός εγγραφής.

3. Εάν όλες οι ενέργειες που συνθέτουν τη συναλλαγή Τ1 έχουν ολοκληρωθεί με επιτυχία, τότε η συναλλαγή καταγράφεται εν μέρει και εγγράφεται στο πρωτόκολλο.<Т1 СОММIТ>.

4. Μετά την ολοκλήρωση της συναλλαγής, οι εγγραφές πρωτοκόλλου που σχετίζονται με το Τ1 χρησιμοποιούνται για την πραγματοποίηση των κατάλληλων αλλαγών στη βάση δεδομένων.

5. Εάν προκύψει αποτυχία, το DBMS εξετάζει το αρχείο καταγραφής και ανακαλύπτει ποιες συναλλαγές πρέπει να επαναληφθούν. Η συναλλαγή T1 πρέπει να επαναληφθεί εάν το πρωτόκολλο περιέχει και τις δύο εγγραφές<Т1 BEGIN TRANSACTION и <Т1 СОММIТ>... Η βάση δεδομένων μπορεί να βρίσκεται σε ασυνεπή κατάσταση, ωστόσο, όλες οι νέες τιμές των αλλαγμένων στοιχείων δεδομένων περιέχονται στο αρχείο καταγραφής και αυτό απαιτεί την εκ νέου εκτέλεση της συναλλαγής. Για αυτό, χρησιμοποιείται κάποια διαδικασία συστήματος REDOQ, η οποία αντικαθιστά όλες τις τιμές των στοιχείων δεδομένων με νέες, κοιτάζοντας το πρωτόκολλο σε άμεση σειρά.

6. Εάν το πρωτόκολλο δεν περιέχει την εντολή διαπραγμάτευσης συναλλαγής COMMIT, τότε δεν απαιτείται καμία ενέργεια και η επανεκκίνηση της συναλλαγής.

Σύκο. 11.3.Αρχείο καταγραφής συναλλαγών

Ένας εναλλακτικός μηχανισμός με άμεση εκτέλεση προβλέπει την πραγματοποίηση αλλαγών απευθείας στη βάση δεδομένων, και όχι μόνο νέες, αλλά και όλες οι παλιές τιμές των αλλαγμένων χαρακτηριστικών εισάγονται στο πρωτόκολλο, έτσι κάθε εγγραφή μοιάζει<Т1, ID_RECORD, атрибут новое значение старое значение...>... Σε αυτήν την περίπτωση, η εγγραφή στο αρχείο καταγραφής προηγείται της άμεσης εκτέλεσης της λειτουργίας στη βάση δεδομένων. Όταν πραγματοποιείται μια συναλλαγή, δηλαδή, αντιμετωπίζεται η εντολή<Т1 СОММIТ>και εκτελείται, τότε όλες οι αλλαγές έχουν ήδη γίνει στη βάση δεδομένων και δεν απαιτείται περαιτέρω ενέργεια σε σχέση με αυτήν τη συναλλαγή.

Όταν μια συναλλαγή επαναφέρεται, εκτελείται η διαδικασία συστήματος UNDO (), η οποία επιστρέφει όλες τις παλιές τιμές στην ακυρωμένη συναλλαγή, προχωρώντας διαδοχικά μέσω του πρωτοκόλλου ξεκινώντας με την εντολή BEGIN TRANSACTION.

Ο ακόλουθος μηχανισμός χρησιμοποιείται για την ανακατεύθυνση:

· Εάν μια συναλλαγή περιέχει μια εντολή για να ξεκινήσει μια συναλλαγή, αλλά δεν περιέχει μια εντολή δέσμευσης με επιβεβαίωση της εκτέλεσης της, τότε η ακολουθία των ενεργειών εκτελείται όπως όταν η συναλλαγή επαναφέρεται, δηλαδή, οι παλιές τιμές αποκαθίστανται .

· Εάν η αποτυχία συνέβη μετά την εκτέλεση της τελευταίας εντολής αλλαγής DB, αλλά πριν εκτελεστεί η εντολή komit, τότε εκτελείται η εντολή komit, και δεν γίνονται αλλαγές στη βάση δεδομένων. Η εργασία πραγματοποιείται μόνο σε επίπεδο πρωτοκόλλου.

· Ωστόσο, πρέπει να σημειωθεί ότι τα προβλήματα ανάκτησης φαίνονται πολύ πιο περίπλοκα από τους αλγόριθμους που περιγράφηκαν προηγουμένως, δεδομένου ότι οι αλλαγές τόσο στο αρχείο καταγραφής όσο και στη βάση δεδομένων δεν καταγράφονται αμέσως, αλλά αποθηκεύονται σε προσωρινή μνήμη. Η επόμενη ενότητα είναι αφιερωμένη σε αυτό.

Καταγραφή και αποθήκευση

Η καταγραφή αλλαγών σχετίζεται στενά όχι μόνο με τη διαχείριση συναλλαγών, αλλά και με την προσωρινή αποθήκευση σελίδων βάσης δεδομένων στη μνήμη.

Εάν μια εγγραφή αλλαγής βάσης δεδομένων, η οποία θα έπρεπε να μεταβεί στο αρχείο καταγραφής για οποιαδήποτε λειτουργία τροποποίησης βάσης δεδομένων, στην πραγματικότητα γράφτηκε αμέσως σε εξωτερική μνήμη, αυτό θα επιβραδύνει σημαντικά το σύστημα. Επομένως, οι καταχωρήσεις καταγραφής αποθηκεύονται επίσης σε προσωρινή μνήμη: κατά τη διάρκεια της κανονικής λειτουργίας, η επόμενη σελίδα ωθείται στην εξωτερική μνήμη του αρχείου καταγραφής μόνο όταν είναι γεμάτη από καταχωρήσεις.

Η πρόκληση είναι να σχεδιαστεί κάποια γενική πολιτική ώθησης για να διασφαλιστεί ότι η βάση δεδομένων μπορεί να ανακτηθεί από ένα σφάλμα.

Το πρόβλημα δεν προκύπτει με μεμονωμένες επαναφορές συναλλαγών, καθώς σε αυτές τις περιπτώσεις δεν μπορούν να χαθούν τα περιεχόμενα της κύριας μνήμης και μπορούν να χρησιμοποιηθούν τα περιεχόμενα τόσο του buffer καταγραφής όσο και των buffer σελίδων της βάσης δεδομένων. Ωστόσο, εάν προκύψει μαλακή αστοχία και χάνονται τα περιεχόμενα των buffer, πρέπει να έχετε κάποια συνεπή κατάσταση του αρχείου καταγραφής και της βάσης δεδομένων στην εξωτερική μνήμη για να ανακτήσετε τη βάση δεδομένων.

Η βασική αρχή μιας σταθερής πολιτικής για την εμφάνιση του buffer καταγραφής και των buffer σελίδων βάσης δεδομένων είναι ότι μια αλλαγή σε ένα αντικείμενο βάσης δεδομένων πρέπει να γραφτεί σε εξωτερική μνήμη καταγραφής πριν από το τροποποιημένο αντικείμενο βρίσκεται στην εξωτερική μνήμη βάσης δεδομένων. Το αντίστοιχο πρωτόκολλο καταγραφής (και διαχείριση buffering) ονομάζεται Write Ahead Log (WAL) - "write first to the log" και συνίσταται στο γεγονός ότι εάν θέλετε να γράψετε ένα τροποποιημένο αντικείμενο βάσης δεδομένων σε εξωτερική μνήμη, πρέπει πρώτα να βεβαιωθείτε ότι το το αρχείο καταγραφής συναλλαγών γράφεται σε αρχεία εξωτερικής μνήμης για την αλλαγή του.

Με άλλα λόγια, εάν υπάρχει κάποιο αντικείμενο βάσης δεδομένων στην εξωτερική μνήμη της βάσης δεδομένων, σε σχέση με το οποίο έχει πραγματοποιηθεί η λειτουργία τροποποίησης, τότε στην εξωτερική μνήμη του αρχείου καταγραφής υπάρχει αναγκαστικά μια εγγραφή που αντιστοιχεί σε αυτήν τη λειτουργία. Το αντίθετο δεν ισχύει, δηλαδή, εάν η εξωτερική μνήμη του αρχείου καταγραφής περιέχει μια εγγραφή σχετικά με κάποια λειτουργία αλλαγής ενός αντικειμένου βάσης δεδομένων, τότε το ίδιο το αλλαγμένο αντικείμενο ενδέχεται να μην υπάρχει στην εξωτερική μνήμη της βάσης δεδομένων.

Μια επιπρόσθετη προϋπόθεση για την ώθηση buffer επιβάλλεται από την απαίτηση ότι κάθε επιτυχημένη ολοκλήρωση συναλλαγής πρέπει να δεσμευτεί στην εξωτερική μνήμη. Όποια αποτυχία συμβεί, το σύστημα πρέπει να είναι σε θέση να επαναφέρει την κατάσταση της βάσης δεδομένων που περιέχει τα αποτελέσματα όλων των συναλλαγών που έχουν πραγματοποιηθεί κατά τη στιγμή της αποτυχίας.

Μια απλή λύση θα ήταν ένα pop buffer log ακολουθούμενο από ένα μαζικό pop των buffer σελίδων βάσης δεδομένων που τροποποιήθηκαν από τη συναλλαγή. Αυτό γίνεται αρκετά συχνά, αλλά εισάγει σημαντική επιβάρυνση κατά την εκτέλεση μιας λειτουργίας δέσμευσης.

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

Τώρα ας δούμε πώς μπορείτε να εκτελέσετε λειτουργίες επαναφοράς βάσης δεδομένων σε διάφορες καταστάσεις, εάν το σύστημα διατηρεί ένα κοινό αρχείο καταγραφής για όλες τις συναλλαγές με κοινόχρηστη εγγραφή σε buffer, διατηρείται σύμφωνα με το πρωτόκολλο WAL.

Ατομική επαναφορά μιας συναλλαγής

Προκειμένου να είναι δυνατή η εκτέλεση μεμονωμένης επαναφοράς συναλλαγών στο γενικό αρχείο καταγραφής, όλες οι εγγραφές καταγραφής για αυτήν τη συναλλαγή συνδέονται σε μια αντίστροφη λίστα. Η αρχή της λίστας για αποτυχημένες συναλλαγές είναι η τελευταία αλλαγή στη βάση δεδομένων που πραγματοποιήθηκε από αυτήν τη συναλλαγή. Για ολοκληρωμένες συναλλαγές (μεμονωμένες επιστροφές των οποίων δεν είναι πλέον δυνατές), η αρχή της λίστας είναι η εγγραφή για το τέλος της συναλλαγής, η οποία ωθεί αναγκαστικά στην εξωτερική μνήμη του αρχείου καταγραφής. Το τέλος της λίστας είναι πάντα το πρώτο εγγραφή σχετικά με την αλλαγή της βάσης δεδομένων που πραγματοποιήθηκε από αυτήν τη συναλλαγή. Συνήθως, σε κάθε εγγραφή εκχωρείται ένα μοναδικό αναγνωριστικό συναλλαγής έτσι ώστε μια άμεση λίστα εγγραφών αλλαγής βάσης δεδομένων να μπορεί να αποκατασταθεί από μια δεδομένη συναλλαγή.

Έτσι, μια μεμονωμένη επαναφορά συναλλαγών (υπογραμμίζουμε για άλλη μια φορά ότι αυτό είναι δυνατό μόνο για μη δεσμευμένες συναλλαγές) εκτελείται ως εξής:

· Η επόμενη εγγραφή επιλέγεται από τη λίστα αυτής της συναλλαγής.

· Εκτελείται η αντίθετη λειτουργία: αντί για λειτουργία INSERT, εκτελείται αντίστοιχη λειτουργία DELETE, εκτελείται λειτουργία INSERT αντί για λειτουργία DELETE και αντί για λειτουργία άμεσης ενημέρωσης, μια αντίστροφη λειτουργία UPDATE επαναφέρει την προηγούμενη κατάσταση της βάσης δεδομένων αντικείμενο.

· Οποιαδήποτε από αυτές τις αντίστροφες λειτουργίες καταγράφεται επίσης. Στην πραγματικότητα, αυτό δεν είναι απαραίτητο για μια μεμονωμένη επαναφορά, αλλά κατά την εκτέλεση μιας μεμονωμένης επαναφοράς μιας συναλλαγής, ενδέχεται να προκύψει μια μαλακή αποτυχία, κατά την ανάκτηση από την οποία θα είναι απαραίτητη η επαναφορά μιας συναλλαγής για την οποία η μεμονωμένη επαναφορά δεν εκτελείται πλήρως.

· Εάν η επαναφορά ολοκληρώθηκε με επιτυχία, εγγράφεται στο αρχείο καταγραφής ένα τέλος της συναλλαγής. Από την άποψη του αρχείου καταγραφής, πραγματοποιείται μια τέτοια συναλλαγή.

Ανάκτηση από μια μαλακή αποτυχία

Ένα από τα σημαντικότερα ζητήματα με την ανάκτηση από μια μαλακή αποτυχία είναι ότι μια λειτουργία λογικής αλλαγής βάσης δεδομένων μπορεί να τροποποιήσει πολλά μπλοκ φυσικών βάσεων δεδομένων, όπως μια σελίδα δεδομένων και πολλές σελίδες ευρετηρίου. Οι σελίδες βάσης δεδομένων αποθηκεύονται σε μνήμη RAM και εμφανίζονται ανεξάρτητα. Παρά τη χρήση του πρωτοκόλλου WAL, μετά από μια μαλακή αποτυχία, το σύνολο των σελίδων εξωτερικής μνήμης της βάσης δεδομένων μπορεί να αποδειχθεί ασυνεπές, δηλαδή, μερικές από τις σελίδες εξωτερικής μνήμης αντιστοιχούν στο αντικείμενο πριν από την αλλαγή και μερικές - μετά την αλλαγή. Οι λειτουργίες του λογικού επιπέδου δεν ισχύουν για αυτήν την κατάσταση του αντικειμένου.

Η κατάσταση της εξωτερικής μνήμης μιας βάσης δεδομένων ονομάζεται φυσικά συνεπής εάν τα σύνολα σελίδων όλων των αντικειμένων είναι συνεπή, δηλαδή αντιστοιχούν στην κατάσταση του αντικειμένου είτε πριν από την αλλαγή είτε μετά την αλλαγή.

Θα υποθέσουμε ότι το αρχείο καταγραφής σημειώνει τα σημεία φυσικής συνοχής της βάσης δεδομένων - τις στιγμές κατά τις οποίες η εξωτερική μνήμη περιέχει συνεπή αποτελέσματα λειτουργιών που έχουν ολοκληρωθεί πριν από το αντίστοιχο χρονικό σημείο και δεν υπάρχουν αποτελέσματα λειτουργιών που δεν έχουν ολοκληρώθηκε και το buffer καταγραφής εισάγεται στην εξωτερική μνήμη. Θα δούμε πώς μπορεί να επιτευχθεί η φυσική συνέπεια λίγο αργότερα. Ας καλέσουμε τέτοια σημεία tpc (χρόνος φυσικής συνοχής) - σημεία φυσικής συμφωνίας.

Στη συνέχεια, μέχρι τη στιγμή μιας μαλακής αποτυχίας, είναι δυνατές οι ακόλουθες καταστάσεις συναλλαγών:

· Η συναλλαγή ολοκληρώθηκε με επιτυχία, δηλαδή, επιβεβαιώθηκε η λειτουργία της συναλλαγής COMMIT και για όλες τις λειτουργίες της συναλλαγής ελήφθη επιβεβαίωση της εκτέλεσης σε εξωτερική μνήμη.

· Η συναλλαγή ολοκληρώθηκε με επιτυχία, αλλά για ορισμένες λειτουργίες δεν έχει ληφθεί επιβεβαίωση της εκτέλεσης σε εξωτερική μνήμη.

· Η συναλλαγή έλαβε και εκτέλεσε την εντολή ROLLBACK.

· Η συναλλαγή δεν έχει ολοκληρωθεί.

Φυσική συνοχή βάσης δεδομένων

Πώς μπορείτε να διασφαλίσετε ότι υπάρχουν φυσικά σημεία συνέπειας της βάσης δεδομένων, δηλαδή πώς να επαναφέρετε την κατάσταση της βάσης δεδομένων τη στιγμή του tpc; Υπάρχουν δύο βασικές προσεγγίσεις σε αυτό: μια σκιώδης προσέγγιση και μια προσέγγιση που χρησιμοποιεί την καταγραφή αλλαγών βάσης δεδομένων από σελίδα προς σελίδα.

Όταν ανοίγει ένα αρχείο, ο πίνακας για τη χαρτογράφηση των αριθμών των λογικών μπλοκ του στις διευθύνσεις των φυσικών μπλοκ εξωτερικής μνήμης διαβάζεται σε RAM. Όταν τροποποιείται οποιοδήποτε μπλοκ ενός αρχείου, εκχωρείται ένα νέο μπλοκ στην εξωτερική μνήμη. Σε αυτήν την περίπτωση, ο τρέχων πίνακας χαρτογράφησης (σε RAM) αλλάζει και ο πίνακας σκιών παραμένει αμετάβλητος. Εάν παρουσιαστεί αποτυχία κατά την εργασία με ανοιχτό αρχείο, η κατάσταση του αρχείου πριν από το άνοιγμα αποθηκεύεται αυτόματα στην εξωτερική μνήμη. Για να επαναφέρετε ρητά το αρχείο, αρκεί να ξαναδιαβάσετε τον πίνακα χαρτογράφησης σκιών στη μνήμη RAM.

Η γενική ιδέα του μηχανισμού σκιών φαίνεται στο Σχ. 11.4.

Σύκο. 11.4.Χρήση πινάκων σκιών

Στο πλαίσιο μιας βάσης δεδομένων, ο μηχανισμός σκιών χρησιμοποιείται ως εξής. Τα σημεία ελέγχου εκτελούνται περιοδικά. Για να γίνει αυτό, όλες οι λογικές λειτουργίες έχουν ολοκληρωθεί, όλα τα buffer της κύριας μνήμης, τα περιεχόμενα των οποίων δεν αντιστοιχούν στα περιεχόμενα των αντίστοιχων σελίδων της εξωτερικής μνήμης, απορρίπτονται. Ο σκιώδης πίνακας για τη χαρτογράφηση αρχείων βάσης δεδομένων αντικαθίσταται με τον τρέχοντα (πιο σωστά, ο τρέχων πίνακας χαρτογράφησης αντικαθίσταται στη θέση του σκιώδους).

Η ανάκτηση στο tpc πραγματοποιείται αμέσως: ο τρέχων πίνακας χαρτογράφησης αντικαθίσταται με έναν σκιά (κατά τη διάρκεια της ανάκτησης, ο πίνακας σκιάς χαρτογράφησης απλώς διαβάζεται). Όλα τα προβλήματα αποκατάστασης επιλύονται, αλλά εις βάρος της υπερβολικής υπερβολικής εξωτερικής μνήμης. Στο όριο, μπορεί να χρειαστείτε διπλάσια εξωτερική μνήμη από ό, τι πραγματικά χρειάζεστε για να αποθηκεύσετε τη βάση δεδομένων. Ο μηχανισμός σκιάς είναι ένα αξιόπιστο αλλά πολύ ακατέργαστο εργαλείο. Μια σταθερή κατάσταση εξωτερικής μνήμης παρέχεται σε ένα κοινό σημείο για όλα τα αντικείμενα. Στην πραγματικότητα, αρκεί να έχουμε ένα σύνολο συνεπών συνόλων σελίδων, καθεμία από τις οποίες μπορεί να αντιστοιχεί στα δικά της δείγματα χρόνου.

Για την εκπλήρωση μιας τόσο ασθενέστερης απαίτησης, μαζί με τη λογική καταγραφή των λειτουργιών αλλαγής βάσης δεδομένων, καταγράφονται αλλαγές από σελίδα σε σελίδα. Το πρώτο βήμα για την ανάκτηση από μια μαλακή αποτυχία είναι η επαναφορά των αποτυχημένων λογικών λειτουργιών μία σελίδα κάθε φορά. Παρόμοια με αυτό που γίνεται με λογικές εγγραφές σε σχέση με τις συναλλαγές, η εγγραφή αλλαγής της τελευταίας σελίδας από μία λογική λειτουργία είναι το τέλος της λειτουργίας.

Υπάρχουν δύο μέθοδοι για την επίλυση του προβλήματος σε αυτήν την προσέγγιση. Η πρώτη μέθοδος διατηρεί ένα κοινό αρχείο λογικών και λειτουργιών τηλεειδοποίησης. Φυσικά, η παρουσία δύο τύπων δίσκων, ερμηνευμένων με εντελώς διαφορετικούς τρόπους, περιπλέκει τη δομή του περιοδικού. Επιπλέον, τα αρχεία αλλαγών από σελίδα σε σελίδα, η συνάφεια των οποίων είναι τοπικής φύσης, αυξάνουν σημαντικά (και όχι πολύ ουσιαστικά) το περιοδικό.

Επομένως, γίνεται όλο και πιο δημοφιλές να διατηρείτε ένα ξεχωριστό (σύντομο) ημερολόγιο σελιδοποιημένων αλλαγών. Αυτή η τεχνική χρησιμοποιείται, για παράδειγμα, στο γνωστό προϊόν Informix Online.

Ας υποθέσουμε ότι με κάποιο τρόπο ήταν δυνατό να επαναφέρετε την εξωτερική μνήμη της βάσης δεδομένων στην κατάσταση κατά τη στιγμή tpc (πώς μπορεί να γίνει αυτό - λίγο αργότερα). Επειτα:

· Δεν απαιτείται καμία ενέργεια για τη συναλλαγή T1. Τελείωσε πριν από το tpc και όλα τα αποτελέσματά του αντικατοπτρίζονται στην εξωτερική μνήμη της βάσης δεδομένων.

· Για τη συναλλαγή T2, πρέπει να εκτελέσετε ξανά τις υπόλοιπες λειτουργίες (επανάληψη). Πράγματι, δεν υπάρχουν ίχνη λειτουργιών που πραγματοποιήθηκαν στη συναλλαγή Τ2 μετά τη στιγμή tpc στην εξωτερική μνήμη. Επομένως, η άμεση επανεξήγηση των λειτουργιών T2 είναι σωστή και θα οδηγήσει σε μια λογικά συνεπή κατάσταση της βάσης δεδομένων (δεδομένου ότι η συναλλαγή T2 ολοκληρώθηκε με επιτυχία πριν από τη μαλακή αποτυχία, το αρχείο καταγραφής περιέχει μια καταγραφή όλων των αλλαγών που έγιναν από αυτήν τη συναλλαγή).

· Για μια συναλλαγή TK, το πρώτο μέρος των λειτουργιών (αναίρεση) πρέπει να εκτελεστεί στην αντίθετη κατεύθυνση. Πράγματι, στην εξωτερική μνήμη της βάσης δεδομένων, τα αποτελέσματα των λειτουργιών TK που πραγματοποιήθηκαν μετά τη στιγμή tpc απουσιάζουν εντελώς. Από την άλλη πλευρά, η εξωτερική μνήμη είναι εγγυημένη ότι περιέχει τα αποτελέσματα των λειτουργιών TK που πραγματοποιήθηκαν πριν από το tpc. Κατά συνέπεια, η αντίστροφη ερμηνεία των λειτουργιών TK είναι σωστή και θα οδηγήσει σε μια συνεπή κατάσταση της βάσης δεδομένων (δεδομένου ότι η συναλλαγή TK δεν ολοκληρώθηκε τη στιγμή μιας μαλακής αποτυχίας, κατά τη διάρκεια της ανάκτησης είναι απαραίτητο να διατηρηθούν όλες οι συνέπειες της εκτέλεσης της ).

· Για μια συναλλαγή T4 που ξεκίνησε μετά το tpc και έληξε πριν από μια μαλακή αποτυχία, πρέπει να εκτελέσετε μια πλήρη επανάληψη.

· Τέλος, δεν απαιτείται καμία ενέργεια για μια συναλλαγή T5 που ξεκίνησε μετά το tpc και απέτυχε να ολοκληρωθεί τη στιγμή της μαλακής αποτυχίας. Τα αποτελέσματα αυτής της συναλλαγής λείπουν εντελώς από την εξωτερική μνήμη της βάσης δεδομένων.

Ανάκτηση από σκληρό σφάλμα

Είναι σαφές ότι το αρχείο καταγραφής αλλαγών δεν είναι αρκετό για να επαναφέρετε τη βάση δεδομένων στην τελευταία συνεπή κατάσταση μετά από μια σκληρή αποτυχία. Σε αυτήν την περίπτωση, η βάση ανάκτησης είναι το αρχείο καταγραφής και το αντίγραφο αρχείου της βάσης δεδομένων.

Η ανάκτηση ξεκινά αντιγράφοντας τη βάση δεδομένων από το αντίγραφο του αρχείου. Στη συνέχεια πραγματοποιείται επανάληψη για όλες τις ολοκληρωμένες συναλλαγές, δηλαδή, οι λειτουργίες επαναλαμβάνονται με άμεση σειρά.

Πιο συγκεκριμένα, συμβαίνουν τα εξής:

· Όλες οι εργασίες εκτελούνται κατά μήκος του ημερολογίου προς τα εμπρός.

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

Στην πραγματικότητα, δεδομένου ότι μια σκληρή αποτυχία δεν οδηγεί σε απώλεια buffer RAM, είναι δυνατόν να επαναφέρετε τη βάση δεδομένων σε τέτοιο επίπεδο που ακόμη και οι αποτυχημένες συναλλαγές μπορούν να συνεχιστούν. Αλλά αυτό συνήθως δεν γίνεται επειδή η ανάκτηση από ένα σκληρό σφάλμα είναι μια αρκετά χρονοβόρα διαδικασία.

Αν και υπάρχουν ειδικές απαιτήσεις για την καταγραφή όσον αφορά την αξιοπιστία, κατ 'αρχήν μπορεί να χαθεί. Τότε ο μόνος τρόπος για να επαναφέρετε τη βάση δεδομένων είναι να επιστρέψετε στο αντίγραφο του αρχείου. Φυσικά, σε αυτήν την περίπτωση, δεν θα μπορείτε να λάβετε την τελευταία συνεπή κατάσταση της βάσης δεδομένων, αλλά αυτό είναι καλύτερο από το τίποτα.

Το τελευταίο ζήτημα που θα εξετάσουμε εν συντομία σχετίζεται με τη δημιουργία αντιγράφων ασφαλείας της βάσης δεδομένων. Ο ευκολότερος τρόπος είναι να αρχειοθετήσετε τη βάση δεδομένων όταν το αρχείο καταγραφής είναι γεμάτο. Η λεγόμενη «κίτρινη ζώνη» εισάγεται στο αρχείο καταγραφής, όταν φτάσει στο οποίο ο σχηματισμός νέων συναλλαγών αποκλείεται προσωρινά. Όταν ολοκληρωθούν όλες οι συναλλαγές και, ως εκ τούτου, η βάση δεδομένων βρίσκεται σε σταθερή κατάσταση, μπορείτε να την αρχειοθετήσετε και, στη συνέχεια, να αρχίσετε να συμπληρώνετε ξανά το αρχείο καταγραφής.

Μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας της βάσης δεδομένων λιγότερο συχνά από το πλήρες αρχείο καταγραφής. Εάν το αρχείο καταγραφής είναι πλήρες και όλες οι αρχικές συναλλαγές έχουν λήξει, μπορείτε να αρχειοθετήσετε το αρχείο καταγραφής. Εφόσον ένα τέτοιο αρχειοθετημένο αρχείο καταγραφής απαιτείται ουσιαστικά μόνο για την αναδημιουργία ενός αρχειοθετημένου αντιγράφου της βάσης δεδομένων, οι αρχειοθετημένες πληροφορίες καταγραφής μπορούν να συμπιεστούν σημαντικά.

Από την 1η Ιανουαρίου του τρέχοντος έτους, ο νόμος υποχρεώνει τις τράπεζες να ενημερώνουν τους πελάτες τους για κάθε συναλλαγή που πραγματοποιούν. Ταυτόχρονα, ο τρόπος με τον οποίο πρέπει να ενημερώνεται ο πελάτης δεν περιλαμβάνεται στη νομοθεσία. Οι τράπεζες που ενδιαφέρονται για τους πελάτες τους χρησιμοποιούν την πιο βολική και άμεση μέθοδο ειδοποίησης - SMS. Οι υπόλοιποι χρησιμοποιούν λιγότερο ακριβά μέσα για τον εαυτό τους - ειδοποίηση μέσω e-mail ή μηνυμάτων στον προσωπικό λογαριασμό στον ιστότοπο της τράπεζας.

Όποια μέθοδο και αν επιλέξει η τράπεζά σας, θα πρέπει να ακολουθείτε προσεκτικά τις ειδοποιήσεις, γιατί όταν πρόκειται για δόλιες συναλλαγές, κυριολεκτικά κάθε λεπτό μπορεί να παίξει στα χέρια σας ή να σας στερήσει τις πιθανότητες επιστροφής του κλεμμένου ποσού.

Πρέπει να έχουμε κατά νου ότι οποιαδήποτε συναλλαγή με την κάρτα σας που δεν πραγματοποιείται από εσάς είναι απάτη. Υπάρχουν διάφοροι τύποι απάτης:

  • Η κάρτα σας κλαπεί ή χάνεται και στη συνέχεια χρησιμοποιείται χωρίς την άδειά σας.
  • Δεν λάβατε νέα κάρτα από τον εκδότη (ή κάρτα για να αντικαταστήσετε την παλιά) και δεν γνωρίζατε ότι έπεσε σε λάθος χέρια μέχρι να λάβετε έγγραφα σχετικά με συναλλαγές που δεν πραγματοποιήσατε. Τα προσωπικά σας στοιχεία χρησιμοποιούνται από άλλο άτομο για να υποβάλει αίτηση για κάρτα. Αυτός ο τύπος απάτης είναι πολύ δύσκολο να αναγνωριστεί εκτός εάν η εκδότρια τράπεζα λάβει καταγγελία από τον πελάτη ή ο λογαριασμός επανεξεταστεί λίγο μετά το άνοιγμα. Εάν δεν είστε πελάτης αυτής της τράπεζας, ενδέχεται να μην γνωρίζετε ότι κάποιος έχει λάβει μια κάρτα με το όνομά σας μέχρι να υποβάλετε αίτηση για δάνειο και δεν θα σας αρνηθεί λόγω κακού πιστωτικού ιστορικού.
  • Η κατάσταση του πιστοποιητικού λογαριασμού περιέχει δεδομένα για συναλλαγές που δεν έχετε πραγματοποιήσει, πράγμα που μπορεί να σημαίνει ότι σε κυκλοφορία μια πλαστή κάρτα με τον ίδιο αριθμό με τη δική σας.
  • Ένας εισβολέας με πλαστά έγγραφα, που θέτει ως κάτοχος κάρτας, αποκτά τον έλεγχο του λογαριασμού του κατόχου της κάρτας, απαιτώντας την αντικατάσταση της κάρτας στον ίδιο λογαριασμό. Συνήθως απαιτούν να στείλουν την κάρτα σε διαφορετική διεύθυνση. Συνήθως το ανακαλύπτετε όταν λαμβάνετε ένα πιστοποιητικό κατάστασης λογαριασμού ή όταν σταματά τα τιμολόγια να φτάνουν στη διεύθυνσή σας.
  • Η κάρτα σας είναι μαζί σας, αλλά ο εισβολέας εκτελεί συναλλαγές χρησιμοποιώντας τον αριθμό της κάρτας, για παράδειγμα, παραγγέλνει προϊόντα μέσω ταχυδρομείου, τηλεφώνου ή μέσω Διαδικτύου

Εάν βρεθείτε σε οποιαδήποτε από αυτές τις καταστάσεις, το πρώτο πράγμα που πρέπει να κάνετε είναι να επικοινωνήσετε με την τράπεζα. Σύμφωνα με το νόμο, η τράπεζα πρέπει να σας αποζημιώσει για τα χρήματα που χάθηκαν από την κάρτα, εάν ληφθεί καταγγελία για παράνομη συναλλαγή εντός της πρώτης ημέρας μετά τη χρέωση των χρημάτων.

Σύμφωνα με τον Stepan Zaitsev, αναπληρωτή επικεφαλής για την ανάπτυξη επιχειρηματικών καρτών, εάν ο πελάτης δεν έχει ανακοινώσει την αμφισβητούμενη συναλλαγή εντός 24 ωρών, μπορεί να το κάνει αργότερα. Σε οποιοδήποτε γραφείο της τράπεζας, μπορείτε να γράψετε μια καταγγελία. Περαιτέρω εξέταση θα πραγματοποιηθεί με τον τρόπο που ορίζει η τράπεζα. Ο όρος για την απάντηση στον πελάτη στο αίτημά του είναι 30 εργάσιμες ημέρες (έως 60 - όταν συμμετέχουν στην επιχείρηση συμμετέχουσες ξένες τράπεζες). Για να διευκρινιστεί ολόκληρη η κατάσταση, η τράπεζα μπορεί να ζητήσει πρόσθετα έγγραφα και πληροφορίες από τον πελάτη.

Η έννοια μιας συναλλαγής βρίσκεται στην καρδιά του σχεσιακού παραδείγματος. Μια συναλλαγή αποτελείται από μία ή περισσότερες εντολές DML και την επόμενη εντολή, είτε ROLLBACK είτε COMMIT. Είναι δυνατή η χρήση της εντολής SAVEPOINT για συγκεκριμένο έλεγχο σε μια συναλλαγή. Πριν εξετάσετε τη σύνταξη, πρέπει να λάβετε υπόψη την έννοια των συναλλαγών. Ένα σχετικό θέμα είναι το θέμα της συνεπούς ανάγνωσης. Αυτό γίνεται αυτόματα σε επίπεδο διακομιστή Oracle, αλλά ορισμένοι προγραμματιστές μπορούν να το χειριστούν με εντολές SELECT.

Ο κινητήρας ακεραιότητας συναλλαγών της Oracle βασίζεται σε έναν συνδυασμό αναίρεσης τμημάτων και ενός αρχείου καταγραφής, αναμφισβήτητα το καλύτερο διαθέσιμο μέχρι σήμερα και συμμορφώνεται πλήρως με τα διεθνή πρότυπα επεξεργασίας δεδομένων. Άλλοι προμηθευτές βάσεων δεδομένων εφαρμόζουν το πρότυπο με τους δικούς τους διαφορετικούς τρόπους. Εν ολίγοις, οποιαδήποτε σχεσιακή βάση δεδομένων πρέπει να ικανοποιεί τη δοκιμή ACID: ατομικότητα (Α - ατομικότητα), συνέπεια (C - συνέπεια), απομόνωση (I - απομόνωση) και ανθεκτικότητα (D - ανθεκτικότητα) πρέπει να είναι εγγυημένη.

ΕΝΑντομάτα

Η ατομική αρχή δηλώνει ότι είτε όλα τα μέρη μιας συναλλαγής πρέπει να είναι επιτυχημένα είτε κανένα από αυτά. Για παράδειγμα, εάν ένας αναλυτής επιχείρησης έχει εγκρίνει τον κανόνα ότι όταν αλλάζει ο μισθός ενός υπαλλήλου, το επίπεδο του υπαλλήλου θα αλλάξει αναγκαστικά, τότε η ατομική σας συναλλαγή θα έχει δύο μέρη. Η βάση δεδομένων πρέπει να διασφαλίζει ότι είτε εφαρμόζονται και οι δύο αλλαγές είτε καμία. Εάν μόνο μία αλλαγή είναι επιτυχής, τότε θα έχετε έναν υπάλληλο του οποίου ο μισθός είναι ασυμβίβαστος με το επίπεδό του: διαφθορά δεδομένων όσον αφορά τις επιχειρήσεις. Εάν κάτι (καθόλου) πήγε στραβά πριν από την επιβεβαίωση της συναλλαγής, η βάση δεδομένων πρέπει να διασφαλίσει ότι όλες οι εργασίες που έγιναν μέχρι το σημείο από την έναρξη της συναλλαγής θα ακυρωθούν: θα πρέπει να λειτουργεί αυτόματα. Παρά το γεγονός ότι η ατομικότητα μιας συναλλαγής ακούγεται σαν κάτι μικρό, οι συναλλαγές μπορεί να είναι μεγάλες και πολύ σημαντικές. Εξετάστε ένα άλλο παράδειγμα, δεν μπορεί να υπάρχουν δεδομένα στο καθολικό για μισό μήνα Αύγουστο και μισό μήνα Σεπτέμβριο: το κλείσιμο ενός μήνα από επιχειρηματική άποψη είναι μια ατομική συναλλαγή που μπορεί να επεξεργαστεί εκατομμύρια σειρές και χιλιάδες πίνακες και εργασίες για αρκετές ώρες (ή ακυρώθηκε αν κάτι τότε πήγε στραβά). Η ακύρωση μιας συναλλαγής μπορεί να είναι χειροκίνητη (με την έκδοση της εντολής ROLLBACK), αλλά πρέπει να είναι αυτόματη και μη αναστρέψιμη σε περίπτωση σφάλματος.

Συνοχή

Η αρχή της συνοχής των δεδομένων δηλώνει ότι το αποτέλεσμα ενός ερωτήματος πρέπει να είναι συνεπές με την κατάσταση της βάσης δεδομένων κατά την έναρξη του ερωτήματος. Ας παρουσιάσουμε ένα απλό ερώτημα που υπολογίζει τον μέσο όρο μιας στήλης σε έναν πίνακα. Εάν ο πίνακας είναι μεγάλος, θα χρειαστεί πολύς χρόνος για την επανάληψη όλων των σειρών του πίνακα. Εάν άλλοι χρήστες ενημερώνουν δεδομένα αυτήν τη στιγμή κατά την εκτέλεση του ερωτήματος, θα πρέπει το ερώτημα να λάβει νέες τιμές ή παλιές; Πρέπει το αποτέλεσμα του ερωτήματος να λάβει υπόψη τις σειρές που προστέθηκαν ή να αγνοήσει τις σειρές που καταργήθηκαν; Η αρχή της συνέπειας απαιτεί τη βάση δεδομένων να διασφαλίζει ότι οποιεσδήποτε αλλαγές μετά την έναρξη ενός ερωτήματος δεν ήταν ορατές για αυτό το ερώτημα. το ερώτημα θα πρέπει να επιστρέφει τη μέση τιμή της στήλης τη στιγμή που ξεκίνησε το ερώτημα, ανεξάρτητα από το πόσο καιρό κράτησε το ερώτημα και ποιες αλλαγές έγιναν στα δεδομένα. Η Oracle εγγυάται ότι εάν το αίτημα είναι επιτυχές, το αποτέλεσμα θα είναι συνεπές. Ωστόσο, εάν το DBA δεν έχει ρυθμίσει σωστά τη βάση δεδομένων, το ερώτημα ενδέχεται να αποτύχει: θα εμφανιστεί το περίφημο σφάλμα "πολύ παλιό στιγμιότυπο ORA-1555". Κάποτε ήταν πολύ δύσκολο να επιλυθούν τέτοια σφάλματα, αλλά σε πρόσφατες εκδόσεις, ο διαχειριστής μπορεί εύκολα να επιλύσει αυτές τις καταστάσεις.

Απομόνωση

Η αρχή της απομόνωσης δηλώνει ότι μια ημιτελής (μη επιβεβαιωμένη συναλλαγή) πρέπει να είναι αόρατη στον υπόλοιπο κόσμο. Ενώ η συναλλαγή βρίσκεται σε εξέλιξη, μόνο η περίοδος λειτουργίας που εκτελεί αυτήν τη συναλλαγή βλέπει το χειμώνα. Όλες οι άλλες συνεδρίες θα πρέπει να βλέπουν αμετάβλητα δεδομένα. Γιατί αυτό? Πρώτον, ολόκληρη η συναλλαγή ενδέχεται να μην εκτελεστεί πλήρως (θυμηθείτε την αρχή της ατομικότητας και της συνέπειας) και επομένως κανείς δεν πρέπει να δει τις αλλαγές που μπορούν να αντιστραφούν. Δεύτερον, κατά τη διάρκεια της συναλλαγής, τα δεδομένα (από την άποψη της επιχειρηματικής δραστηριότητας) είναι ασυνεπή: για το παράδειγμα ενημέρωσης του μισθού, θα υπάρξει μια χρονική περίοδος κατά την οποία ο μισθός θα αλλάξει, αλλά το επίπεδο δεν είναι ακόμη. Η απομόνωση συναλλαγών θα απαιτήσει από τη βάση δεδομένων να αποκρύπτει τρέχουσες συναλλαγές από άλλους χρήστες: θα βλέπουν τα δεδομένα πριν από τις αλλαγές ενώ η συναλλαγή βρίσκεται σε εξέλιξη και, στη συνέχεια, θα βλέπουν αμέσως όλες τις αλλαγές ως συνεπές σύνολο δεδομένων. Η Oracle εγγυάται την απομόνωση συναλλαγών: δεν υπάρχει τρόπος για μια συνεδρία (εκτός από αυτήν που κάνει την αλλαγή) να δει μη επιβεβαιωμένα δεδομένα. Η ανάγνωση μη επιβεβαιωμένων δεδομένων (γνωστή ως βρώμικη ανάγνωση) δεν επιτρέπεται από την Oracle (αν και ορισμένες άλλες βάσεις δεδομένων).

Αντοχή

Η αρχή της μακροζωίας δείχνει ότι εάν μια συναλλαγή ολοκληρωθεί επιτυχώς, τότε θα πρέπει να είναι αδύνατο να χάσετε αυτά τα δεδομένα. Κατά τη λειτουργία μιας συναλλαγής, η αρχή της απομόνωσης απαιτεί από κανέναν εκτός από τη συνεδρία που πραγματοποιεί τις αλλαγές να τις δει. Αλλά μόλις ολοκληρωθεί με επιτυχία η συναλλαγή, οι αλλαγές θα πρέπει να είναι διαθέσιμες σε όλους και η βάση δεδομένων πρέπει να διασφαλίσει ότι δεν θα χαθούν. Η Oracle πληροί αυτήν την απαίτηση γράφοντας όλα τα διανύσματα αλλαγής σε αρχεία καταγραφής πριν από τις αλλαγές. Εφαρμόζοντας αυτό το αρχείο καταγραφής αλλαγών σε αντίγραφα ασφαλείας, είναι πάντα δυνατό να επαναλάβετε τυχόν αλλαγές που έγιναν τη στιγμή που η βάση δεδομένων είχε σταματήσει ή καταστραφεί. Φυσικά, τα δεδομένα μπορεί να χαθούν λόγω σφαλμάτων χρήστη, όπως η εκτέλεση μη έγκυρων ερωτημάτων DML ή η πτώση πινάκων. Όμως, από την άποψη της Oracle και της DBA, τέτοια γεγονότα είναι επίσης συναλλαγές: σύμφωνα με την αρχή της ανθεκτικότητας, δεν μπορούν να αντιστραφούν.

Εκτέλεση SQLαιτήσεων

Ολόκληρη η γλώσσα SQL αποτελείται από περίπου δώδεκα εντολές. Τώρα ενδιαφερόμαστε για τις εντολές: SELECT, INSERT, UPDATE και DELETE.

Εκτέλεση εντολής SELECT

Η εντολή SELECT ανακτά δεδομένα. Η εκτέλεση μιας εντολής SELECT είναι μια διαδικασία πολλαπλών σταδίων: η διαδικασία διακομιστή που εκτελεί το ερώτημα θα ελέγξει εάν υπάρχουν τα απαιτούμενα μπλοκ δεδομένων στη μνήμη, στην προσωρινή μνήμη προσωρινής μνήμης. Εάν είναι εκεί, η εκτέλεση μπορεί να συνεχιστεί, διαφορετικά η διαδικασία του διακομιστή πρέπει να βρει τα δεδομένα στο δίσκο και να τα αντιγράψει στην προσωρινή μνήμη προσωρινής αποθήκευσης.

Να θυμάστε πάντα ότι οι διακομιστές επεξεργάζονται μπλοκ από αρχεία δεδομένων στην προσωρινή μνήμη προσωρινής αποθήκευσης βάσης δεδομένων, το DBWn γράφει μπλοκ από την προσωρινή μνήμη προσωρινής μνήμης βάσης δεδομένων στα αρχεία δεδομένων.

Όταν τα μπλοκ με τα δεδομένα που απαιτούνται για την εκτέλεση του αιτήματος βρίσκονται στην προσωρινή μνήμη προσωρινής αποθήκευσης, τυχόν πρόσθετες διεργασίες (όπως ταξινόμηση και συγκέντρωση) συνεχίζονται στη συνεδρία PGA. Όταν ολοκληρωθεί η εκτέλεση, το αποτέλεσμα επιστρέφεται στη διαδικασία χρήστη.

Πώς σχετίζεται με τη δοκιμή ACID; Για λόγους συνέπειας, εάν το αίτημα εντοπίσει ότι το μπλοκ δεδομένων έχει αλλάξει από την έναρξη του αιτήματος, η διαδικασία του διακομιστή θα βρει ένα τμήμα επαναφοράς (τμήμα αναίρεσης ή αναίρεσης) που αντιστοιχεί σε αυτήν την αλλαγή, να βρει την παλιά έκδοση των δεδομένων και (για το τρέχον αίτημα) αναιρέστε την αλλαγή. Έτσι, οι αλλαγές που πραγματοποιήθηκαν μετά την έναρξη του αιτήματος δεν θα είναι ορατές. Ομοίως, η απομόνωση συναλλαγών είναι εγγυημένη, παρόλο που η απομόνωση βασίζεται επίσης σε δεσμευμένες αλλαγές. Ειλικρινά, εάν τα δεδομένα που απαιτούνται για την αναίρεση των αλλαγών δεν υπάρχουν πλέον στο τμήμα επαναφοράς, αυτός ο μηχανισμός δεν θα λειτουργήσει. Ως εκ τούτου, ακολουθεί το σφάλμα "snapshot too old".

Το σχήμα 8-4 δείχνει τη διαδρομή επεξεργασίας ερωτήματος SELECT

Το βήμα 1 είναι η μεταφορά του αιτήματος χρήστη από τη διαδικασία χρήστη στη διαδικασία διακομιστή. Η διαδικασία διακομιστή σαρώνει την προσωρινή μνήμη προσωρινής αποθήκευσης για τα απαραίτητα μπλοκ και εάν βρίσκονται στο buffer, πηγαίνει στο βήμα 4. Εάν όχι, τότε το βήμα 2 βρίσκει τα μπλοκ στα αρχεία δεδομένων και το βήμα 3 αντιγράφει τα δεδομένα στο buffer. Το βήμα 4 μεταβιβάζει τα δεδομένα στη διαδικασία διακομιστή όπου ενδέχεται να υπάρχει επιπλέον επεξεργασία πριν από το βήμα 5 επιστρέψει το αποτέλεσμα του ερωτήματος στη διαδικασία χρήστη.

Εκτέλεση εντολής ΕΝΗΜΕΡΩΣΗΣ

Για οποιαδήποτε εντολή DML, είναι απαραίτητο να εργαστείτε με μπλοκ δεδομένων και αναίρεση μπλοκ, καθώς και να δημιουργήσετε ένα αρχείο καταγραφής αλλαγών (επανάληψη): Οι αρχές A, C και I της δοκιμής ACIDS απαιτούν τη δημιουργία αναίρεσης δεδομένων. Το D απαιτεί τη δημιουργία επανάληψης δεδομένων.

Η αναίρεση δεν είναι το αντίθετο της επανάληψης! Η επανάληψη προστατεύει όλες τις αλλαγές μπλοκ, ανεξάρτητα από το αν πρόκειται για τμήμα μπλοκ, ευρετήριο ή επαναφορά. Για επανάληψη - αναίρεση, το τμήμα είναι το ίδιο τμήμα με τους πίνακες και όλες οι αλλαγές πρέπει να είναι ανθεκτικές

Το πρώτο βήμα κατά την εκτέλεση μιας εντολής DML είναι το ίδιο με εκείνο κατά την εκτέλεση μιας εντολής SELECT: τα απαραίτητα μπλοκ πρέπει να βρεθούν στο buffer προσωρινής μνήμης ή να αντιγραφούν από τα αρχεία δεδομένων στο buffer. Η μόνη διαφορά είναι ότι απαιτείται ένα κενό (ή έληξε) μπλοκ επαναφοράς. Στη συνέχεια, η εκτέλεση γίνεται πιο περίπλοκη από ό, τι με την εντολή SELECT.

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

Στη συνέχεια δημιουργείται η επανάληψη δεδομένων: η διαδικασία του διακομιστή γράφεται στα αρχεία καταγραφής του buffer του διανύσματος αλλαγών που θα εφαρμοστούν στα δεδομένα. Η επανάληψη δεδομένων δημιουργείται τόσο για αλλαγές μπλοκ δεδομένων όσο και για αλλαγές μπλοκ επαναφοράς: εάν ενημερωθεί μια στήλη σε μια σειρά, τότε το rowid και η νέα τιμή εγγράφονται στο buffer καταγραφής (η αλλαγή που θα εφαρμοστεί στο μπλοκ πίνακα), ως καθώς και την παλιά τιμή της στήλης (αλλαγή για το μπλοκ επαναφοράς) ... Εάν η στήλη είναι μέρος του κλειδιού ευρετηρίου, τότε οι αλλαγές στο ευρετήριο θα εγγραφούν επίσης στο buffer καταγραφής, μαζί με τις αλλαγές που θα γίνουν στο μπλοκ επαναφοράς για την προστασία των αλλαγών ευρετηρίου.

Αφού δημιουργηθούν όλα τα δεδομένα επανάληψης, τα δεδομένα ενημερώνονται στην προσωρινή μνήμη προσωρινής αποθήκευσης: το μπλοκ δεδομένων ενημερώνεται στη νέα έκδοση με την αλλαγμένη στήλη και η παλιά έκδοση γράφεται στο μπλοκ επαναφοράς. Από αυτήν τη στιγμή έως ότου επιβεβαιωθεί η συναλλαγή, όλα τα αιτήματα από άλλες περιόδους σύνδεσης που αναφέρονται σε αυτήν τη γραμμή θα ανακατευθυνθούν στο μπλοκ επαναφοράς. Μόνο η περίοδος λειτουργίας που κάνει την ΕΝΗΜΕΡΩΣΗ θα δει την τρέχουσα έκδοση της γραμμής στο μπλοκ πίνακα. Η ίδια αρχή ισχύει για όλα τα συνδεδεμένα ευρετήρια.

Εκτέλεση εντολών INSERTκαι ΔΙΑΓΡΑΦΗ

Εννοιολογικά, το INSERT και το DELETE διαχειρίζονται με τον ίδιο τρόπο όπως το UPDATE. Πρώτον, υπάρχει μια αναζήτηση για τα απαραίτητα μπλοκ στο buffer, και αν δεν υπάρχουν, τότε αντιγράφονται στη μνήμη.

Η επανάληψη δημιουργείται με τον ίδιο τρόπο: όλα τα διανύσματα αλλαγής που θα εφαρμοστούν σε δεδομένα και οι αναίρεση μπλοκ γράφονται πρώτα στο buffer καταγραφής. Για την εντολή INSERT, το διάνυσμα αλλαγών ενός μπλοκ πίνακα (και πιθανώς μπλοκ ευρετηρίου) είναι τα byte που αποτελούν μια νέα σειρά (και πιθανώς ένα νέο κλειδί ευρετηρίου). Το διάνυσμα για το μπλοκ επαναφοράς είναι η σειρά της νέας σειράς. Για την εντολή DELETE, το διάνυσμα για το μπλοκ αναίρεσης είναι ολόκληρη η γραμμή.

Η βασική διαφορά μεταξύ ΕΙΣΑΓΩΓΗΣ και ΕΝΗΜΕΡΩΣΗΣ είναι η ποσότητα των δεδομένων προς επαναφορά. Όταν προστίθεται μια σειρά, τα μόνα δεδομένα για επαναφορά θα είναι η καταχώριση με σειρά στο μπλοκ επαναφοράς, επειδή για την αναίρεση της εντολής ΕΙΣΑΓΩΓΗ, οι μόνες πληροφορίες που χρειάζεται η Oracle είναι η σειρά της σειράς και η εντολή μπορεί να δημιουργηθεί

διαγραφή από το table_name όπου rowid = rowd_id_of_new_row;

Η εκτέλεση αυτής της εντολής θα αναιρέσει την αλλαγή.

Για την εντολή ΔΙΑΓΡΑΦΗ, ολόκληρη η σειρά (η οποία μπορεί να είναι αρκετά kilobyte) πρέπει να γραφτεί στο μπλοκ αναίρεσης και, στη συνέχεια, η διαγραφή μπορεί να ακυρωθεί, εάν είναι απαραίτητο, δημιουργώντας ένα ερώτημα που πρόσθεσε ξανά ολόκληρη τη σειρά στον πίνακα.

Έναρξη και τέλος συναλλαγής

Μια συνεδρία ξεκινά μια συναλλαγή τη στιγμή που εκτελεί οποιαδήποτε εντολή DML. Η συναλλαγή συνεχίζεται για όσες εντολές DML επιθυμείτε έως ότου η συνεδρία εκδώσει μια εντολή ROLLBACK ή COMMIT. Μόνο επιβεβαιωμένες αλλαγές θα είναι εγγυημένες και θα είναι διαθέσιμες για άλλες συνεδρίες. Δεν είναι δυνατή η έναρξη μιας συναλλαγής μέσα σε μια συναλλαγή. Το πρότυπο SQL δεν επιτρέπει στους χρήστες να ξεκινήσουν μια συναλλαγή και στη συνέχεια να ξεκινήσουν μια νέα πριν ολοκληρώσουν την πρώτη. Αυτό μπορεί να γίνει χρησιμοποιώντας PL / SQL (γλώσσα Oracle 3ης γενιάς), αλλά όχι τυπική SQL.

Οι εντολές ελέγχου συναλλαγών είναι COMMIT, ROLLBACK και SAVEPOINT. Μπορεί επίσης να υπάρχουν άλλες περιστάσεις εκτός από την ρητή κλήση μιας εντολής COMMIT ή ROLLBACK που ακυρώνει αμέσως τη συναλλαγή.

  • Εκτέλεση εντολής DDL ή DCL
  • Ολοκλήρωση της διαδικασίας χρήστη (για παράδειγμα, ο χρήστης τερμάτισε το πρόγραμμα SQL * Plus ή SQL Developer)
  • Η συνεδρία πελάτη "πέθανε"
  • Προβλήματα συστήματος

Εάν ο χρήστης εκτελέσει μια εντολή DDL (CREATE, ALTER ή DROP) ή μια εντολή DCL (GRANT ή REVOKE) τότε θα πραγματοποιηθεί η ενεργή συναλλαγή (εάν υπάρχει). Αυτό συμβαίνει επειδή οι εντολές DDL και DCL είναι οι ίδιες συναλλαγές. Δεδομένου ότι είναι αδύνατο να δημιουργηθούν ένθετες συναλλαγές σε SQL, εάν ο χρήστης έχει ήδη εκτελέσει οποιαδήποτε συναλλαγή, όλες οι εντολές χρήστη θα επιβεβαιωθούν μαζί με την εντολή DDL ή DCL.

Εάν ξεκινήσετε μια συναλλαγή εκτελώντας ένα αίτημα DML και, στη συνέχεια, κλείσετε το πρόγραμμα χωρίς να ορίσετε ρητά το COMMIT ή το ROLLBACK πριν από την έξοδο, η συναλλαγή θα ακυρωθεί - αλλά εξαρτάται αποκλειστικά από το πρόγραμμα να ακυρωθεί με επιβεβαίωση ή ακύρωση. Διαφορετικά προγράμματα ενδέχεται να συμπεριφέρονται διαφορετικά ανάλογα με το πώς καταλήξατε να εργάζεστε στο πρόγραμμα. Για παράδειγμα, στα Windows, μπορείτε συνήθως να βγείτε από το πρόγραμμα επιλέγοντας τα στοιχεία μενού Αρχείο - Έξοδος ή κάνοντας κλικ στο σταυρό στην επάνω δεξιά γωνία. Ο προγραμματιστής θα μπορούσε να χειριστεί αυτές τις μεθόδους ολοκλήρωσης με διαφορετικό τρόπο και στην πρώτη περίπτωση να καθορίσει COMMIT και στο δεύτερο ROLLBACK. Σε κάθε περίπτωση, θα είναι μια ελεγχόμενη έξοδος.

Εάν η συνεδρία πελάτη αποτύχει για οποιονδήποτε λόγο, η βάση δεδομένων θα ακυρώνει πάντα τη συναλλαγή. Τέτοιες αστοχίες μπορεί να οφείλονται σε διάφορους λόγους: η διαδικασία χρήστη μπορεί να "σκοτωθεί" από τον αποστολέα, προβλήματα δικτύου ή βλάβη του μηχανήματος του χρήστη. Σε κάθε περίπτωση, η εντολή COMMIT ή ROLLBACK δεν προσδιορίστηκε ρητά και η βάση δεδομένων πρέπει να αποφασίσει τι συνέβη. Σε αυτήν την περίπτωση, η συνεδρία "σκοτώνεται" και η ενεργή συναλλαγή ακυρώνεται. Και με τον ίδιο ακριβώς τρόπο, η βάση δεδομένων συμπεριφέρεται σε περίπτωση προβλημάτων από την πλευρά του διακομιστή. Εάν η βάση δεδομένων έκλεισε ασυνήθιστα, τότε στην επόμενη έναρξη όλες οι συναλλαγές που ξεκίνησαν αλλά προφανώς δεν ολοκληρώθηκαν θα ακυρωθούν.

Ελεγχοςσυναλλαγές: COMMIT, ROLLBACK, SAVEPOINTκαι ΕΠΙΛΕΞΤΕ ΓΙΑ ΕΝΗΜΕΡΩΣΗ

Η Oracle ξεκινά μια συναλλαγή όταν εκτελείται η πρώτη εντολή DML. Η συναλλαγή διαρκεί μέχρι να κληθεί η εντολή ROLLBACK ή COMMIT. Η εντολή SAVEPOINT δεν αποτελεί μέρος του προτύπου SQL και στην πραγματικότητα είναι ένας εύκολος τρόπος για τον προγραμματιστή να αναιρεί εν μέρει τις αλλαγές σε αντίστροφη σειρά.

Η εκτέλεση της εντολής COMMIT είναι όπου πολλοί άνθρωποι (και ακόμη και ορισμένα DBA) παρεξηγούν την αρχιτεκτονική του Oracle. Όταν δεσμεύετε, το μόνο που συμβαίνει φυσικά είναι το LGWR γράφει το buffer καταγραφής στο δίσκο. Το DBWn δεν κάνει απολύτως τίποτα. Αυτή είναι μια από τις πιο σημαντικές ιδιότητες της Oracle για επίτευξη υψηλής απόδοσης βάσης δεδομένων.

Τι κάνει το DBWn όταν εκτελείται η εντολή COMMIT; Απάντηση: απολύτως τίποτα

Για να κάνετε μια συναλλαγή ανθεκτική, το μόνο που χρειάζεται να κάνετε είναι να γράψετε τις αλλαγές που έγιναν κατά τη διάρκεια της συναλλαγής στο δίσκο: δεν υπάρχει ανάγκη για πραγματικά δεδομένα στο δίσκο. Εάν οι αλλαγές καταγράφονται με τη μορφή πολλών αντιγράφων των αρχείων καταγραφής αλλαγών στο δίσκο, τότε ακόμη και αν η βάση δεδομένων είναι κατεστραμμένη, όλες οι συναλλαγές μπορούν να επαναληφθούν επαναφέροντας το αντίγραφο ασφαλείας των δεδομένων στο σφάλμα και εφαρμόζοντας τις αλλαγές από τα αρχεία καταγραφής . Προς το παρόν, πρέπει να καταλάβετε το γεγονός ότι το COMMIT ξεπλένει το buffer καταγραφής μόνο στο δίσκο και επισημαίνει τη συναλλαγή ως ολοκληρωμένη. Αυτός είναι ο λόγος για τον οποίο μια συναλλαγή που περιελάμβανε εκατομμύρια ενημερώσεις σε χιλιάδες αρχεία σε διάστημα αρκετών ωρών μπορεί να καταλήξει σε ένα κλάσμα του δευτερολέπτου. Εφόσον το LGWR γράφει αρχεία καταγραφής σχεδόν σε πραγματικό χρόνο, σχεδόν όλες οι αλλαγές συναλλαγών έχουν ήδη εγγραφεί στο δίσκο. Όταν δεσμεύσετε, το LGWR θα γράψει αμέσως ένα αρχείο καταγραφής στο δίσκο: η συνεδρία σας θα περιμένει μέχρι να ολοκληρωθεί η εγγραφή. Ο χρόνος καθυστέρησης θα είναι ίσος με τον χρόνο που απαιτείται για την εγγραφή των τελευταίων δεδομένων από το buffer καταγραφής, το οποίο συνήθως διαρκεί μερικά χιλιοστά του δευτερολέπτου. Στη συνέχεια, η συνεδρία σας μπορεί να συνεχίσει να λειτουργεί και όλες οι άλλες συνεδρίες δεν θα ανακατευθύνουν στα δεδομένα στο τμήμα επαναφοράς κατά την πρόσβαση στα ενημερωμένα δεδομένα, εκτός εάν το απαιτεί η αρχή της συνέπειας. Τα διανύσματα αλλαγής που είναι γραμμένα στο αρχείο καταγραφής επανάληψης είναι όλες οι αλλαγές που εφαρμόζονται τόσο στα μπλοκ δεδομένων (πίνακες και ευρετήρια) όσο και στα μπλοκ επαναφοράς.

Το αρχείο καταγραφής επανάληψης περιλαμβάνει όλες τις αλλαγές: εφαρμόζονται σε τμήματα δεδομένων και αναίρεση τμημάτων για επιβεβαιωμένες και μη επιβεβαιωμένες συναλλαγές

Το πιο ακατανόητο πράγμα είναι ότι η επανάληψη είναι γραμμένη από το LGWR στα αρχεία θα περιέχει τόσο επιβεβαιωμένες όσο και μη επιβεβαιωμένες συναλλαγές. Ακόμα περισσότερο, ανά πάσα στιγμή το DBWn μπορεί ή όχι να γράφει τροποποιημένα τμήματα τμημάτων δεδομένων ή τμημάτων επαναφοράς σε αρχεία δεδομένων για δεσμευμένες και μη δεσμευμένες συναλλαγές. Δηλαδή, η βάση δεδομένων σας στο δίσκο είναι ασυνεπής: τα αρχεία δεδομένων μπορούν να αποθηκεύουν δεδομένα από μη επιβεβαιωμένες συναλλαγές και ενδέχεται να μην περιέχουν επιβεβαιωμένες αλλαγές. Αλλά ανά πάσα στιγμή, σε περίπτωση προβλήματος, υπάρχουν αρκετές πληροφορίες στο αρχείο καταγραφής στο δίσκο για να επαναλάβετε επιβεβαιωμένες συναλλαγές που παραλείφθηκαν στα αρχεία δεδομένων (χρησιμοποιώντας αλλαγές για μπλοκ δεδομένων) και να επαναφέρετε τμήματα επαναφοράς (χρησιμοποιώντας αλλαγές σε μπλοκ επαναφοράς ) απαραίτητο για την ακύρωση όλων των μη επιβεβαιωμένων συναλλαγών που έχουν γραφτεί σε αρχεία δεδομένων.

Οποιαδήποτε εντολή DDL, GRANT ή REVOKE θα επιβεβαιώσει την τρέχουσα συναλλαγή

ΕΠΑΝΑΦΟΡΑ

Ενώ η συναλλαγή βρίσκεται σε εξέλιξη, η Oracle αποθηκεύει μια εικόνα των δεδομένων έως ότου ξεκινήσει η συναλλαγή. Αυτή η εικόνα χρησιμοποιείται από άλλες συνεδρίες που έχουν πρόσβαση στα δεδομένα που εμπλέκονται στη συναλλαγή. Χρησιμοποιείται επίσης για την ακύρωση μιας συναλλαγής αυτόματα εάν κάτι πάει στραβά ή η συνεδρία ακυρώνει τη συναλλαγή.

Σύνταξη για ακύρωση συναλλαγής

ΡΟΛΟΠΟΙ;

Η κατάσταση των δεδομένων πριν από την επαναφορά της συναλλαγής περιέχει αλλαγές, αλλά οι πληροφορίες που απαιτούνται για την επαναφορά αυτών των αλλαγών είναι διαθέσιμες. Αυτές οι πληροφορίες χρησιμοποιούνται από άλλες συνεδρίες για την επιβολή της αρχής της απομόνωσης. Το ROLLBACK της συναλλαγής θα αναιρέσει όλες τις αλλαγές, αποκαθιστώντας την εικόνα δεδομένων πριν από την έναρξη της συναλλαγής: όλες οι προστιθέμενες σειρές θα διαγραφούν, όλες οι διαγραμμένες σειρές θα αποκατασταθούν, όλες οι σειρές στις οποίες οι τιμές άλλαξαν θα επιστρέψουν στην αρχική τους κατάσταση. Άλλες συνεδρίες δεν θα γνωρίζουν καν ότι κάτι συνέβαινε, δεν είδαν ποτέ αλλαγή. Και η συνεδρία που ξεκίνησε τη συναλλαγή μετά την ακύρωση θα δει τα δεδομένα όπως ήταν πριν από την έναρξη της συναλλαγής.

ΑΠΟΘΗΚΕΥΣΗ

Ένα σημείο αποθήκευσης επιτρέπει στους προγραμματιστές να ορίσουν μια σημαία σε μια συναλλαγή η οποία μπορεί στη συνέχεια να χρησιμοποιηθεί για τον έλεγχο της επίδρασης της ακύρωσης της συναλλαγής. Αντί να ακυρώσετε ολόκληρη τη συναλλαγή και να την ολοκληρώσετε, καθίσταται δυνατή η αναίρεση των αλλαγών που πραγματοποιήθηκαν μετά από μια συγκεκριμένη σημαία, αλλά διατηρήστε τις αλλαγές που πραγματοποιήθηκαν πριν από αυτήν τη σημαία. Η λειτουργία της συναλλαγής αυτή τη στιγμή συνεχίζεται: η συναλλαγή δεν έχει επιβεβαιωθεί, είναι ακόμα δυνατή η ακύρωση ολόκληρης της συναλλαγής και οι αλλαγές δεν είναι ορατές για άλλες συνεδρίες.

Σύνταξη εντολών

SAVEPOINT αποθηκευτικό σημείο

Αυτή η εντολή δημιουργεί ένα σημείο στη συναλλαγή που μπορεί να χρησιμοποιηθεί αργότερα στην εντολή ROLLBACK. Ο παρακάτω πίνακας δείχνει τον αριθμό των γραμμών στον πίνακα ορατό σε διαφορετικές περιόδους σύνδεσης κατά τη λειτουργία μιας συναλλαγής σε διαφορετικά χρονικά σημεία. Ο πίνακας που χρησιμοποιείται ονομάζεται TAB και έχει μία στήλη.

Στο παράδειγμα γ, έχουν εκτελεστεί δύο συναλλαγές: η πρώτη ολοκληρώθηκε με μια ΕΠΙΤΡΟΠΗ και η δεύτερη με ΕΠΑΝΑΦΟΡΑ. Μπορεί να φανεί ότι η χρήση των σημείων αποθήκευσης επηρεάζει μόνο μια συναλλαγή για τη συνεδρία που ξεκίνησε τη συναλλαγή: στη δεύτερη περίοδο λειτουργίας δεν εμφανίζεται τίποτα που δεν έχει επιβεβαιωθεί.

ΕΠΙΛΕΓΩΓΙΑΕΚΣΥΓΧΡΟΝΙΖΩ

Η τελευταία εντολή για τη διαχείριση συναλλαγών είναι SELECT FOR UPDATE. Η Oracle, από προεπιλογή, παρέχει το υψηλότερο επίπεδο παραλληλισμού: η ανάγνωση δεδομένων δεν εμποδίζει τη γραφή, η γραφή δεν αποκλείει την αλλαγή. Με άλλα λόγια, δεν υπάρχει πρόβλημα εάν μία συνεδρία προσπαθεί να διαβάσει δεδομένα που αλλάζει μια άλλη περίοδος λειτουργίας και το αντίστροφο. Αλλά μερικές φορές ίσως χρειαστεί να αλλάξετε αυτήν τη συμπεριφορά και να αποτρέψετε τη δυνατότητα αλλαγής των δεδομένων που διαβάζονται από τη συνεδρία.

Τυπική συμπεριφορά εφαρμογής είναι η ανάκτηση δεδομένων χρησιμοποιώντας την εντολή SELECT, η εμφάνιση των δεδομένων στον χρήστη για προβολή και η δυνατότητα τροποποίησης αυτών των δεδομένων. Δεδομένου ότι η Oracle υποστηρίζει παράλληλη εργασία χρήστη, τίποτα δεν εμποδίζει άλλο χρήστη να λάβει τα ίδια δεδομένα. Εάν και οι δύο συνεδρίες προσπαθήσουν να κάνουν αλλαγές, τότε ενδέχεται να προκύψουν περίεργες καταστάσεις. Το ακόλουθο παράδειγμα δείχνει αυτήν την κατάσταση.

Αυτό βλέπει ο πρώτος χρήστης (υποθέτοντας ότι χρησιμοποιείται το SQL * Plus)

Αυτό το αποτέλεσμα μπερδεύει λίγο τον χρήστη. Για να επιλύσετε αυτό το πρόβλημα, μπορείτε να αποκλείσετε τις γραμμές που επιστρέφονται από το αίτημα.

επιλέξτε * από περιοχές για ενημέρωση.

Η οδηγία FOR UPDATE θα κάνει τους πίνακες που επιστρέφονται από το ερώτημα να κλειδωθούν. Άλλες περίοδοι σύνδεσης δεν θα μπορούν να αλλάξουν τα δεδομένα και έτσι οι επόμενες αλλαγές θα είναι επιτυχημένες: άλλες συνεδρίες δεν θα μπορούν να αλλάξουν τα δεδομένα. Δηλαδή, μια περίοδος σύνδεσης θα έχει μια συνεπή ανάγνωση δεδομένων, αλλά η τιμή για αυτό θα είναι ότι άλλες συνεδρίες "κολλάνε" εάν προσπαθούν να αλλάξουν τα δεδομένα που είναι κλειδωμένα (άλλες συνεδρίες μπορούν να διαβάσουν αυτά τα δεδομένα).

Το κλείδωμα σειρών που προκαλείται από την εντολή FOR UPDATE θα διαρκέσει έως ότου η συνεδρία εκτελέσει μια εντολή COMMIT ή ROLLBACK. Η εντολή τερματισμού συναλλαγής πρέπει να εκτελεστεί ακόμα και αν δεν έχετε εκτελέσει εντολές DML.

Η λεγόμενη "αυτόματη δέσμευση"

Για να ολοκληρωθεί η επισκόπηση του τρόπου διαχείρισης της συναλλαγής, πρέπει να εξαλειφθούν όλες οι αμφιβολίες σχετικά με τη λεγόμενη "αυτόματη δέσμευση" ή τη σιωπηρή δέσμευση. Θα ακούτε συχνά ότι η Oracle θα επιβεβαιώνει αυτόματα. Η πρώτη περίπτωση είναι η προηγούμενη περίπτωση όταν εκτελέσατε την εντολή DDL, η άλλη είναι όταν ο χρήστης τερματίζει από ένα πρόγραμμα όπως το SQL * Plus.

Στην πραγματικότητα, όλα είναι πολύ απλά. Δεν υπάρχει κάτι τέτοιο όπως η αυτόματη δέσμευση. Όταν εκτελείτε μια εντολή DDL, λειτουργεί το συνηθισμένο COMMIT που είναι ενσωματωμένο στην εντολή DDL. Αλλά τι συμβαίνει όταν βγείτε από το πρόγραμμα; Εάν χρησιμοποιείτε SQL Plus σε Windows και εκτελέσετε μια εντολή DML ακολουθούμενη από μια εντολή EXIT (το EXIT είναι μια εντολή SQL * Plus, όχι SQL), η συναλλαγή σας θα πραγματοποιηθεί. Αυτό συμβαίνει επειδή οι προγραμματιστές SQL * Plus έχουν ενσωματώσει μια κλήση COMMIT σε μια εντολή EXIT. Εάν κάνετε κλικ στον Ερυθρό Σταυρό στην επάνω δεξιά γωνία, τότε θα κληθεί η εντολή ROLLBACK. Αυτό συμβαίνει επειδή, πάλι, οι προγραμματιστές SQL * Plus έχουν προγραμματίσει αυτήν τη συμπεριφορά για το πρόγραμμα. Σε ένα άλλο λειτουργικό σύστημα, η συμπεριφορά του προγράμματος SQL Plus μπορεί να είναι διαφορετική, ο μόνος τρόπος να το γνωρίζετε είναι να δοκιμάσετε το πρόγραμμα (ή να διαβάσετε τον πηγαίο κώδικα, ο οποίος στην περίπτωση του προγράμματος SQL Plus είναι αδύνατος εάν δεν εργάζεστε στο Oracle και χρειάζονται αυτό το πρόγραμμα).

Το SQL * Plus έχει εντολή SET AUTOCOMMIT ON. Η κλήση αυτής της εντολής λέει στο SQL * Plus πώς να χειριστεί προσαρμοσμένα ερωτήματα: Το SQL * Plus θα προσθέσει μια κλήση εντολών COMMIT μετά από οποιαδήποτε εντολή DML. Έτσι, όλα τα αιτήματα θα επιβεβαιωθούν μόλις ικανοποιηθούν. Αλλά πάλι, όλα αυτά συμβαίνουν εξ ολοκλήρου από τη διαδικασία του χρήστη. η βάση δεδομένων δεν έχει αυτόματη δέσμευση και όλες οι μακροχρόνιες αλλαγές θα απομονωθούν από άλλες συνεδρίες έως ότου το αίτημα επιτευχθεί. Ακόμη και σε αυτήν την περίπτωση, εάν εκτελέσετε ένα εκτεταμένο αίτημα εκτέλεσης, τότε, για παράδειγμα, τερματίστε τη διαδικασία χρήστη μέσω του διαχειριστή εργασιών, τότε το PMON θα εντοπίσει τη συνεδρία "φάντασμα" και θα ακυρώσει τη συναλλαγή.


Το σύστημα ελέγχου συναλλαγών σε εκκρεμότητα λειτουργεί σε sb-opknt.online. Επισκεπτόμενοι αυτόν τον ιστότοπο, θα μάθετε για μια ημιτελή συναλλαγή ύψους 131.269 ρούβλια. Είναι απαραίτητο να αναλάβετε δράση και να κάνετε ανάληψη χρημάτων μέσα σε λίγες ώρες, διαφορετικά η πληρωμή θα ακυρωθεί. Ελέγξαμε εάν το έργο πραγματοποιεί πληρωμή.

Το εκκρεμές σύστημα ελέγχου συναλλαγών θα σας στείλει πραγματικά χρήματα;

Ο ιστότοπος παρείχε μόνο μια διεύθυνση ηλεκτρονικού ταχυδρομείου για επικοινωνία με ένα συγκεκριμένο PJSC "OPK NT". Δεν βρήκαμε πληροφορίες σχετικά με αυτό το PJSC και οι λεπτομέρειες στον ιστότοπο δεν αναφέρονται. Η εταιρεία ήταν σαφώς φανταστική. Η αποποίηση ευθυνών ήταν δύσκολο να διαβαστεί και τοποθετήθηκε στο κάτω μέρος του ιστότοπου. Όμως κάθε επισκέπτης θα πρέπει να το διαβάσει, καθώς δηλώσεις σχετικά με το υποσχόμενο εισόδημα ανακοινώθηκαν ως υποθέσεις χωρίς εγγυήσεις πληρωμής.

Δεν είχε νόημα να ελπίζουμε να λάβω χρήματα από το Μη ολοκληρωμένο Σύστημα Ελέγχου Συναλλαγών. Το μήνυμα στον ιστότοπο, ο αριθμός της συναλλαγής και ο προσωπικός λογαριασμός, καθώς και το ποσό - όλα θα είναι τα ίδια για όλους τους επισκέπτες. Το γεγονός της πιθανής ακύρωσης χρημάτων έδειξε την αμφισβητήσιμη φύση του ιστότοπου.

Ανακατευθυνθήκαμε στην επόμενη σελίδα, η οποία υποτίθεται ότι είναι προσωπικός λογαριασμός. Εισαγάγαμε αρκετούς αριθμούς στη φόρμα και παραγγείλαμε την ανάληψη χρημάτων. Τα δεδομένα έχουν επαληθευτεί και έχουν σταλεί χρήματα. Είναι απίθανο να ήταν δυνατή η αποστολή πληρωμής στα εσφαλμένα στοιχεία μας, αλλά δεν υπήρχαν καταγγελίες εναντίον μας. Μας προσφέρθηκε να πληρώσουμε μόνο 496 ή 396 ρούβλια για την επιλεγμένη μέθοδο μεταφοράς. Η πληρωμή προέβλεπε την υπηρεσία E-Pay, η οποία εξυπηρετεί την προώθηση απάτες, η οποία χαρακτηρίζει κατά κάποιο τρόπο τον δοκιμασμένο ιστότοπο.

Αφού πραγματοποιήσατε πληρωμή 396 ρούβλια, η διαδικασία μεταφοράς συνεχίστηκε. Όπως ήταν αναμενόμενο, προέκυψε ένα νέο εμπόδιο - η τράπεζα του παραλήπτη απέρριψε τη συναλλαγή. Ο απατεώνας που δημιούργησε τον δοκιμασμένο ιστότοπο δεν σταμάτησε σε μία πληρωμή και ζήτησε την επόμενη, 720 ρούβλια για υπηρεσίες προετοιμασίας τεκμηρίωσης. Κανείς δεν ενδιαφερόταν για τα έγγραφα εδώ, ήταν απλώς ένα πρόσχημα για να απαιτήσει χρήματα. Μας στάλθηκαν ξανά στο E-Pay.

Καταλάβαμε ότι τα υποσχεθέντα 131.269 ρούβλια δεν θα πληρωθούν σε εμάς. Αρχικά εξαπατήσαμε. Η δήλωση ότι όλες οι ενέργειες στον ιστότοπο προστατεύονται αποδείχθηκε ψευδής: δεν υπήρχε πρωτόκολλο https στον ιστότοπο, το οποίο προστατεύει τα δεδομένα και γνωστά αντιιικά αντιπροσώπευαν εικόνες χωρίς νόημα.

Αποτελέσματα στο Σύστημα Ελέγχου Ατελών Συναλλαγών:

  • οι πληροφορίες στον καθορισμένο ιστότοπο είναι ψευδείς.
  • δεν πρέπει να επισκεφτείτε αυτόν τον πόρο.

Για μια λεπτομερή επισκόπηση, δείτε το βίντεο:

δημοσιεύουμε αποδεδειγμένους τρόπους για να κερδίσετε χρήματα.

Οι απατεώνες γίνονται δημιουργικοί όταν καταλήγουν σε λόγους πληρωμής. Αλλά το να τα κάνετε, ελπίζοντας ότι θα πληρωθείτε, δεν έχει νόημα. Από τη λίστα αλληλογραφίας μας, μπορείτε να μάθετε για τις απάτες που έχουν προκύψει στο Διαδίκτυο, εάν εγγραφείτε. Η ομάδα μας έρχεται σε επαφή με -. Στείλτε μας τις προτάσεις σας για ιστότοπους δοκιμών.

Συνέχιση του θέματος:
Δρομολογητές

Τα τυποποιημένα gadgets εξαιρούνται άνευ όρων από τις σύγχρονες εκδόσεις των Windows OC. Όμως οι χρήστες δεν έχουν συνηθίσει να χάνουν κάτι καλό και επομένως χρησιμοποιούν ενεργά ανάλογα. Πολύ πριν ...

Νέα άρθρα
/
Δημοφιλής