Πώς μπορούμε να δούμε την ιστορική εικόνα ενός πίνακα σε Oracle Database με Flashback Query
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
- Πώς ρυθμίζουμε το replication του GoldenGate ώστε να διαβάζει από το Standby του Oracle Data Guard - 2 Αύγουστος 2024
Πολλές φορές θα χρειαστεί να δούμε τι εγγραφές είχε ο πίνακας κάποια ώρα πριν. Μπορεί ακόμα να πρέπει να τον επαναφέρουμε από ένα λάθος update ή ακόμα και drop. Στην Oracle αυτό γίνεται εύκολα με τη χρήση flashback query και flashback table.
Πώς ενεργοποιείται
Η λειτουργία αυτή είναι ενεργοποιήμενη εξαρχής και το πόσο πίσω μπορούμε να πάμε εξαρτάτε από το undo retention.
Για να αλλάξουμε σε για πόσα δευτερόλεπτα θα κρατιέται η πληροφορία στο undo tablespace:
alter system set undo_retention = 86400 scope = both;
Πώς βλέπουμε τις εγγραφές του πίνακα πίσω στο χρόνο (flashback query)
Για να δούμε τι εγγραφές είχε ο πίνακας 1 ώρα πριν:
select * from pinakas as of timestamp systimestamp - interval '1' hour;
Και με άλλο τρόπο:
select * from pinakas as of timestamp (systimestamp -1/24)
Αντίστοιχα αν θέλαμε να δούμε τις εγγραφές 20 λεπτά πριν:
select * from pinakas as of timestamp systimestamp - interval '20' minute;
Αν θέλουμε να δούμε τι τιμή είχε πριν την τελευταία τροποποίηση, με το παρακάτω query θα βρούμε την ημερομηνία και ώρα που τροποιήθηκε η κάθε εγγραφή:
select SCN_TO_TIMESTAMP(ORA_ROWSCN), id from pinakas;
Στη συνέχεια βάζοντας λίγο πιο πίσω την ημερομηνία και ώρα που πήραμε από το προηγούμενο query θα δούμε την τιμή που είχε τότε:
select * from pinakas as of timestamp to_timestamp('2020-09-10 13:00:00','YYYY-MM-DD HH24:MI:SS');
Πώς επαναφέρουμε διεγραμένους πίνακες (flashback table)
Όποιος πίνακας γίνεται drop, δεν διαγράφεται κατευθείαν αλλά μεταφέρεται για κάποιο διάστημα στο recycle bin.
Για να δούμε τους πίνακες που έχουν διαγραφεί:
show recyclebin
Για να επαναφέρουμε τον πίνακα που σβήσαμε:
Προσοχή αν τον έχουμε κάνει εκτός από drop, purge θα έχει σβήστεί και από το recycle bin.
flashback table pinakas to before drop;
Για να επαναφέρουμε τον πίνακα όπως ήτανε 1 ώρα πριν:
flashback table pinakas to timestamp systimestamp - interval '1' hour;
Αν μας εμφανίσει το σφάλμα ORA-08189: Cannot Flashback The Table Because Row Movement Is Not Enabled, τότε τρέχουμε το παρακάτω:
alter table pinakas enable row movement;
Πώς μπορούμε να κρατάμε την ιστορικότητα του πίνακα για πάντα
Σε περίπτωση που δεν θέλουμε να γεμίζουμε το undo tablespace ή σε περίπτωση που θέλουμε να μπορούμε να κρατάμε την ιστορικότητα ενός πίνακα για πάντα, φτιάχνουμε ένα flashback archive.
Για να φτιάξουμε το flashback archive σε ένα συγκεκριμένο tablespace:
create flashback archive rescue tablespace ts_tade retention 1 year;
Για ενεργοποιήσουμε το flashback archive που φτιάξαμε σε συγκεκριμένο πίνακα:
alter table pinakas flashback archive rescue;
Για να το άπενεργοποιήσουμε:
alter table pinakas no flashback archive;