Πώς γυρνάμε πίσω στο χρόνο μία βάση δεδομένων της Oracle (Flashback Database)

Πώς γυρνάμε πίσω στο χρόνο μία βάση δεδομένων της Oracle (Flashback Database)
Πώς γυρνάμε πίσω στο χρόνο μία βάση δεδομένων της Oracle (Flashback Database)

Σε προηγούμενο άρθρο είχαμε αναλύσει πως κάνουμε flashback database σε guarantee restore point σε βάση δεδομένων της Oracle. Σε αυτό το άρθρο θα δούμε πως γίνεται μέσω της τεχνολογίας flashback database χωρίς τη χρήση restore point να γυρίσουμε χρονικά πίσω τη βάση δεδομένων.

Τι σημαίνει flashback database;

Το flashback database ανήκει στην κατηγορία της προστασίας δεδομένων και παρέχει τη δυνατότητα να επιστρέψουμε γρήγορα στην εικόνα που είχε η βάση σε ένα χρονικό σημείο.

Γιατί όμως να θέλουμε να κάνουμε flashback database;

Με την λειτουργία του flashback database μπορούμε να επαναφέρουμε τη βάση δεδομένων σε πολύ λίγο χρόνο σε περίπτωση που κάτι πάει στραβά χωρίς να χρειάζεται να γίνει restore.

Πως ενεργοποιήμε την λειτουργία του flashback database

Για αρχή θα πρέπει να ορίσουμε το μέγεθος και η τοποθεσία που θέλουμε να έχει η flash recovery area. Από τη ενεργοποίηση του flashback database και έπειτα θα δημιουργηθούν recovery files. Όσο γίνονται αλλαγές στη βάση το μέγεθος των αρχείων αυτών θα αυξάνετε ανάλογα με τον μέγεθος των δεδομένων που έχει μεταβληθεί.

Για να ορίσουμε το μέγεθος σε gigabytes:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alter system set DB_RECOVERY_FILE_DEST_SIZE ='megethos'G scope=both;
alter system set DB_RECOVERY_FILE_DEST_SIZE ='megethos'G scope=both;
alter system set DB_RECOVERY_FILE_DEST_SIZE ='megethos'G scope=both;

Για να ορίσουμε που θα αποθηκεύονται τα recovery files:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alter system set db_recovery_file_dest='path';
alter system set db_recovery_file_dest='path';
alter system set db_recovery_file_dest='path';

Μπορούμε να επιλέξουμε μέχρι πόσα λεπτά πίσω θέλουμε να μπορούμε να γυρίσουμε χρονικά τη βάση. Το default είναι μία μέρα πίσω (1440 λεπτά):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alter system set DB_flashback_Retention_target = 'MINUTES' scope=both;
alter system set DB_flashback_Retention_target = 'MINUTES' scope=both;
alter system set DB_flashback_Retention_target = 'MINUTES' scope=both; 

Σε αυτό το σημείο πρέπει να ελέγξουμε ότι η βάση λειτουργεί σε archived log mode δηλαδή ότι τα logs κρατούνται ως archived αλλιώς δεν θα μπορούμε να ενεργοποιήσουμε το flashback:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
select log_mode,flashback_on from v$database;
select log_mode,flashback_on from v$database;
select log_mode,flashback_on from v$database;

Για να ενεργοποιήσουμε το flashback:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
alter database flashback on;
alter database flashback on;
alter database flashback on;

Πως επαναφέρουμε τη βάση σε περασμένο χρονικό σημείο

Σε περίπτωση single instance
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
shutdown immediate;
startup mount;
flashback database to timestamp TO_TIMESTAMP( '2020-05-29 08:00:00','YYYY-MM-DD HH24:MI:SS');
alter database open resetlogs;
shutdown immediate; startup mount; flashback database to timestamp TO_TIMESTAMP( '2020-05-29 08:00:00','YYYY-MM-DD HH24:MI:SS'); alter database open resetlogs;
shutdown immediate;
startup mount;
flashback database to timestamp TO_TIMESTAMP( '2020-05-29 08:00:00','YYYY-MM-DD HH24:MI:SS');
alter database open resetlogs;
Σε περίπτωση RAC (Real Application Cluster)

Σε περίπτωση που έχουμε πολλαπλά instances για τη βάση (RAC) θα πρέπει να κατέβει η βάση και να ανέβει μόνο ένα instance της. Αντίστοιχα μετά το flashback θα πρέπει να κατέβει το instance και να ανέβει η βάση με όλα της τα instance:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
srvctl stop database -db db1 -stopoption immediate
srvctl start instance -db db1 -instance instance1 -startoption mount
flashback database to timestamp TO_TIMESTAMP( '2020-05-29 08:00:00','YYYY-MM-DD HH24:MI:SS');
alter database open resetlogs;
srvctl stop database -db db1 -stopoption immediate
srvctl start database -db db1
srvctl stop database -db db1 -stopoption immediate srvctl start instance -db db1 -instance instance1 -startoption mount flashback database to timestamp TO_TIMESTAMP( '2020-05-29 08:00:00','YYYY-MM-DD HH24:MI:SS'); alter database open resetlogs; srvctl stop database -db db1 -stopoption immediate srvctl start database -db db1
srvctl stop database -db db1 -stopoption immediate
srvctl start instance -db db1 -instance instance1 -startoption mount
flashback database to timestamp TO_TIMESTAMP( '2020-05-29 08:00:00','YYYY-MM-DD HH24:MI:SS');
alter database open resetlogs;
srvctl stop database -db db1 -stopoption immediate
srvctl start database -db db1

Αν έχουμε πολλά services θα πρέπει να ανέβουν:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
srvctl start service -d db1 -s service_tade
srvctl start service -d db1 -s service_tade
srvctl start service -d db1 -s service_tade

Πηγές:

Μοιράσου το

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