Η θερινή/χειμερινή ώρα και οι εξυπηρετητές ώρας δικτύου επηρεάζουν την τρέχουσα ώρα σε έναν εξυπηρετητή. Στις υπηρεσίες μεταφοράς δεδομένων, χρησιμοποιούνται αποτυπώματα χρόνου για να καθοριστεί το πότε οι εξυπηρετητές θα ελέγχουν για νέα δεδομένα και θα εκτελούν μεταφορά δεδομένων. Αλλαγές στο ρολόι του συστήματος επηρεάζουν τα λειτουργικά τμήματα υπηρεσιών δεδομένων και την απόδοσή τους.
Η μη αυτόματη μετακίνηση του ρολογιού του συστήματος επηρεάζει επίσης το χρόνο. Η συμπεριφορά του συστήματος επηρεάζεται με τον ίδιο τρόπο, ανεξάρτητα της μεθόδου που χρησιμοποιείται για τη μετακίνηση του ρολογιού. Οι ανεπιθύμητες καθυστερήσεις στις υπηρεσίες μεταφοράς δεδομένων προκύπτουν όταν το ρολόι συστήματος μετακινείται χρονικά προς τα πίσω. Οι καθυστερήσεις δεν προκύπτουν όταν το ρολόι συστήματος μετακινείται χρονικά προς τα εμπρός, παρόλο που τα λειτουργικά τμήματα υπηρεσιών μετακίνησης δεδομένων θα φτάσουν συντομότερα στα προγραμματισμένα διαστήματα.
Αποτέλεσμα αλλαγής ώρας στα λειτουργικά τμήματα
Αν το ρολόι συστήματος μετακινηθεί χρονικά προς τα πίσω, τα λειτουργικά τμήματα που επηρεάζονται θα έχουν ρυθμίσει τα εσωτερικά αποτυπώματα χρόνου τους χρονικά προς το μέλλον αλλά το ρολόι συστήματος θα είναι ρυθμισμένο στο παρελθόν. Το ρολόι συστήματος, αυτά τα εσωτερικά αποτυπώματα χρόνου και οι παράμετροι που δηλώνουν τα χρονικά διαστήματα θα επηρεαστούν από την αλλαγή του ρολογιού συστήματος.
Αν το ρολόι συστήματος μετακινηθεί χρονικά προς τα πίσω, τότε τα λειτουργικά τμήματα που επηρεάζονται θα έχουν ρυθμίσει τα εσωτερικά αποτυπώματα χρόνου τους στο παρελθόν και το τρέχον αποτύπωμα χρόνου του ρολογιού συστήματος έχει ρυθμιστεί στο μέλλον. Αυτό είναι παρόμοιο με την κανονική συμπεριφορά του ρολογιού συστήματος. Η διαφορά είναι ότι μερικές μετρήσεις χρόνου που περιλαμβάνουν τον καθορισμό της επόμενης προγραμματισμένης εκτέλεσης ή τον καθορισμό του κύκλου ζωής μιας καταχώρησης στη βάση δεδομένων θα επηρεαστούν. Ο πραγματικός χρόνος που μεσολάβησε θα είναι λιγότερος από τον υπολογισμένο χρόνο που μεσολάβησε.
Παράδειγμα: Μια καταχώρηση πρόκειται να παραμείνει στο σύστημα για 24 ώρες αφού εγκριθεί για διαγραφή. Έστω ότι μια καταχώρηση εγκρίνεται για διαγραφή την Τρίτη στις 3 μμ. Σε αυτό το σημείο, λόγω της πολιτικής διατήρησης για 24 ώρες, η καταχώρηση ενδέχεται να διαγραφεί ανά πάσα στιγμή μετά τις 3 μμ την Τετάρτη. Επίσης, έστω ότι την Τρίτη στις 3:01 μμ το ρολόι συστήματος ρυθμίζεται χρονικά προς τα εμπρός στις 3:01 μμ την επόμενη Παρασκευή. Αντίστοιχα, ακόμα και αν έχει περάσει μόνο 1 λεπτό σε πραγματικό χρόνο που έχει παρέλθει, ο χρόνος συστήματος που έχει παρέλθει θα είναι τρεις μέρες και 1 λεπτό, οπότε η περίοδος διατήρησης 24 ωρών για αυτή την καταχώρηση θα έχει ικανοποιηθεί. Αυτό σημαίνει ότι λόγω της αλλαγής ώρας η καταχώρηση μπορεί να αφαιρεθεί γρηγορότερα παρά αν το ρολόι συστήματος δεν είχε αλλάξει.
Άλλο παράδειγμα: Ένα συγκεκριμένο λειτουργικό τμήμα ETL εκτελείται κάθε 24 ώρες και αμέσως μετά το ρολόι συστήματος μετακινείται εμπρός 26 ώρες. Αντί να περιμένει 24 ώρες που απαιτούνται σε πραγματικό χρόνο πριν την επόμενη εκτέλεση, το λειτουργικό τμήμα ETL θα εκκινήσει ξανά το συντομότερο δυνατόν. Αυτό συμβαίνει λόγω του υπολογισμού του συστήματος ότι έχουν παρέλθει τουλάχιστον 26 ώρες από την τελευταία εκτέλεση. Στην πραγματικότητα, η μετακίνηση του ρολογιού προς τα εμπρός έχει μειώσει το διάστημα του ETL σε αυτή την περίπτωση. Το λειτουργικό τμήμα ETL θα συνεχίσει κανονικά μετά την εκτέλεση στο καθορισμένο διάστημα εφόσον δεν πραγματοποιηθούν άλλες αλλαγές στο ρολόι συστήματος.
Οι ενότητες που ακολουθούν εστιάζουν μόνο στη μετακίνηση του ρολογιού προς τα πίσω μετά την εκτέλεση των λειτουργικών τμημάτων πριν τη ρύθμιση του ρολογιού προς τα πίσω.
Το λειτουργικό τμήμα εφαρμογής διατηρεί επίσης ένα εσωτερικό αποτύπωμα χρόνου το οποίο καθορίζει το χρόνο αναζήτησης για νέες καταχωρήσεις. Σε αυτό το σενάριο το εσωτερικό αποτύπωμα χρόνου θα είναι μεγαλύτερο από το τρέχον αποτύπωμα χρόνου του συστήματος. Το λειτουργικό τμήμα εφαρμογής αναμένει μέχρι το αποτύπωμα χρόνου του συστήματος να καλύψει τη διαφορά με το εσωτερικό αποτύπωμα χρόνου, ακόμα και αν διατίθενται νέες καταχωρήσεις. Μόλις το τρέχον αποτύπωμα χρόνου καλύψει τη διαφορά, θα ξεκινήσει την αναζήτηση για καταχωρήσεις που διατίθενται για μετακίνηση δεδομένων.
Τα αποτυπώματα χρόνου δεν καθορίζουν ποιες σειρές θα αναπαραχθούν. Αυτό καθορίζεται από μια εσωτερική τιμή η οποία δεν επηρεάζεται από το ρολόι συστήματος. Τα λειτουργικά τμήματα κύκλου ζωής προέλευσης και προορισμού χρησιμοποιούν επίσης αποτυπώματα χρόνου για τον καθορισμό του χρόνου έναρξης και των καταχωρήσεων που πρόκειται να περικοπούν.
Το λειτουργικό τμήμα κύκλου ζωής προέλευσης στην υπηρεσία μετακίνησης δεδομένων κατάστασης σε εκτέλεσης χρησιμοποιεί μόνο αποτυπώματα χρόνου για τον καθορισμό του χρόνου εκκίνησης. Δεν χρησιμοποιεί αποτυπώματα χρόνου για τον καθορισμό των στοιχείων που θα περικοπούν. Αυτό το λειτουργικό τμήμα σε αυτή την υπηρεσία δεν υποστηρίζει τη λειτουργία πολιτικής διατήρησης που επιτρέπει στις επιλεγμένες για περικοπή πληροφορίες να υφίστανται για ορισμένη χρονική περίοδο πολιτικής διατήρησης. Ωστόσο, αυτή η λειτουργία υφίσταται στο λειτουργικό τμήμα κύκλου ζωής προέλευσης για την υπηρεσία μετακίνησης δεδομένων από τη βάση δεδομένων εκτέλεσης στη βάση δεδομένων ιστορικού. Ορισμένες καταχωρήσεις δεν πληρούν τα κριτήρια της πολιτικής διατήρησης μέχρι το τρέχον ρολόι συστήματος καλύψει τη διαφορά. Τα λειτουργικά τμήματα κύκλου ζωής προορισμού και στις δύο υπηρεσίες μετακίνησης δεδομένων υποστηρίζουν τον ορισμό της πολιτικής διατήρησης έτσι ώστε οποιαδήποτε αλλαγή στο χρόνο να επηρεάζει το χρόνο εκτέλεσής τους καθώς και το τι περικόπτουν.
Τα λειτουργικά τμήματα ETL χρησιμοποιούν αποτυπώματα χρόνου ως μέρος του εσωτερικού τους προγραμματισμού. Αφού ξεκινήσουν, αυτά τα λειτουργικά τμήματα αναμένουν αύξηση του χρόνου. Όταν το ρολόι συστήματος μετακινηθεί χρονικά προς το παρελθόν, επηρεάζεται ο προγραμματισμός του ETL και δεν εκτελείται κανένα ETL μέχρι να καλύψει το σύστημα τη διαφορά.
Αποκατάσταση
Η αποκατάσταση κατά τη διάρκεια αλλαγής που πραγματοποιήθηκε από εξυπηρετητή χρόνου δεν είναι απαραίτητη επειδή οι διαφορές ώρας είναι πολύ μικρές της τάξης των λίγων λεπτών. Το αποτέλεσμα θα είναι ένα μικρό πλαίσιο χρόνου όπου τίποτα δεν συμβαίνει ενώ τα λειτουργικά τμήματα καλύπτουν τη διαφορά. Κατά τη διάρκεια μιας αλλαγής χρόνου, λόγω της αλλαγής σε θερινή ώρα, η χρονική επαναφορά προς τα πίσω έχει ως αποτέλεσμα τα λειτουργικά τμήματα να διακόψουν την αναπαραγωγή για μια ώρα και με την πάροδό της τα λειτουργικά τμήματα θα χρειαστεί να καλύψουν τη διαφορά με το σύστημα. Αν αυτό αποτελεί πρόβλημα, εξαρτάται από το σύστημα.
Ένα σενάριο κατά το οποίο αυτή η αναμονή θα μπορούσε να είναι σημαντική είναι όταν λαμβάνει χώρα κάποιο σφάλμα και ο χρόνος του συστήματος ρυθμίζεται κατά πολύ προς τα εμπρός, ενώ εκτελούνται οι εξυπηρετητές λειτουργικών τμημάτων. Τότε (ανεξαρτήτως εάν εκτελούνται οι εξυπηρετητές) ο χρόνος επαναφέρεται στον τρέχοντα χρόνο. Σε αυτή την περίπτωση, τα λειτουργικά τμήματα θα έχουν ρυθμίσει τα εσωτερικά αποτυπώματα χρόνου τους στο μέλλον αλλά θα εκτελούνται στο τρέχον χρονικό πλαίσιο. θα υπάρχει μια μακρόχρονη καθυστέρηση πριν η υπηρεσία μετακίνησης δεδομένων επεξεργαστεί οποιαδήποτε άλλη σειρά ξανά. Αυτή η καθυστέρηση θα μπορούσε να προκαλέσει μια είδους συσσώρευση στο σύστημα η οποία θα επηρέαζε το χρόνο αποκατάστασης. Ο διαχειριστής ενδέχεται να χρειαστεί να πραγματοποιήσει διορθωτική ενέργεια.
Διορθωτική ενέργεια
connect to <source_database> SELECT PC.TABLE_NAME, PC.RETENTION_IN_MINUTES, PC.LAST_PRUNED, PC.PRUNE_INTERVAL, CURRENT TIMESTAMP as "CURRENT TIMESTAMP" FROM WBIRMADM.RMPRUNECTRL PC WHERE PC.TABLE_NAME LIKE 'APP%'
-- Για τιμή TO RUN το συντομότερο δυνατόν. UPDATE WBIRMADM.RMPRUNECTRL SET (LAST_PRUNED)=(CURRENT TIMESTAMP - PRUNE_INTERVAL MINUTES) WHERE TABLE_NAME LIKE 'APP%'; -- Για τιμή TO RUN κατά το επόμενο διάστημα UPDATE WBIRMADM.RMPRUNECTRL SET (LAST_PRUNED)=(current timestamp) WHERE TABLE_NAME LIKE 'APP%'; connect reset;
CONNECT TO <target_database> SELECT PC.TABLE_NAME, PC.RETENTION_IN_MINUTES, PC.LAST_PRUNED, PC.PRUNE_INTERVAL, CURRENT TIMESTAMP as "CURRENT TIMESTAMP" FROM WBIRMADM.RMPRUNECTRL PC WHERE PC.TABLE_NAME NOT LIKE 'APP%';
-- Για τιμή TO RUN το συντομότερο δυνατόν. UPDATE WBIRMADM.RMPRUNECTRL SET (LAST_PRUNED)=(CURRENT TIMESTAMP - PRUNE_INTERVAL MINUTES) WHERE TABLE_NAME NOT LIKE 'APP%'; -- Για τιμή TO RUN κατά το επόμενο διάστημα UPDATE WBIRMADM.RMPRUNECTRL SET (LAST_PRUNED)=(current timestamp) WHERE TABLE_NAME NOT LIKE 'APP%';
CONNECT TO <TARGET> -- Αυτό το ερώτημα εμφανίζει SELECT TARGETTABLE, TGT_RM_SPETL_NAME, ETL_0_MINUTES, NEXTSTARTTIME, LASTUPDATED, CURRENT TIMESTAMP as "CURRENT TIMESTAMP" FROM WBIRMADM.RMCONTROL;
-- Για τιμή TO Run κατά το επόμενο διάστημα UPDATE WBIRMADM.RMCONTROL SET (NEXTSTARTTIME, LASTUPDATED)= (CURRENT TIMESTAMP + ETL_0_MINUTES MINUTES, CURRENT TIMESTAMP); -- Για τιμή To Run το συντομότερο δυνατόν. UPDATE WBIRMADM.RMCONTROL SET (NEXTSTARTTIME, LASTUPDATED)= (CURRENT TIMESTAMP,CURRENT TIMESTAMP-ETL_0_MINUTES MINUTES); CONNECT RESET
Παράδειγμα:
db2cmd asncap CAPTURE_SERVER=STATE CAPTURE_SCHEMA=CAPTURE_1 CAPTURE_PATH="."Μετά:
db2cmd asncap CAPTURE_SERVER=STATE CAPTURE_SCHEMA=CAPTURE_1 CAPTURE_PATH="." STARTMODE=COLDΣτη συνέχεια εκκινήστε όλα τα σενάρια. Αυτή η πλήρης ανανέωση θα έχει ως αποτέλεσμα την επαναφορά όλων των εσωτερικών αποτυπωμάτων χρόνου για τα λειτουργικά τμήματα συλλογής και εφαρμογής αλλά θα συμπεριλάβει το επιπλέον κόστος για τη μετακίνηση και την επανεπεξεργασία των δεδομένων. Είναι σημαντικό να αναμένετε πιθανή μείωση της απόδοσης ενώ το σύστημα καλύπτει τη διαφορά.