Πώς μπορούμε να δούμε την ιστορική εικόνα ενός πίνακα σε Oracle Database με Flashback Query

Πώς μπορούμε να δούμε την ιστορική εικόνα ενός πίνακα σε Oracle Database με Flashback Query
Πώς μπορούμε να δούμε την ιστορική εικόνα ενός πίνακα σε Oracle Database με Flashback Query

Πολλές φορές θα χρειαστεί να δούμε τι εγγραφές είχε ο πίνακας κάποια ώρα πριν. Μπορεί ακόμα να πρέπει να τον επαναφέρουμε από ένα λάθος 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; 

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση