Toad for Oracle, Mysql, Sql server

Το καλύτερο εργαλείο για την διαχείριση των βάσεων. Πλέον κάτω από την ομπρέλα της Dell.

Ανοίξτε λογαριασμό στο site υποστήριξης της ORACLE(MOS-Metalink).

Η Oracle προσφέρει support και χρήσιμες πληροφορίες σε προβλήματα και bugs μέσω του συγκεκριμένου site.

Μπορείτε από το eDelivery της Oracle να κατεβάσετε Μysql και Oracle λογισμικό

Mysql μια open source βάση με support πλέον επι πληρωμή, από την Oracle.

Το support της microsoft για όλα τα προιόντα της

Χρήσιμες πληροφορίες-guides που αφορούν τόσο προβλήματα όσο και τρόπους εγκατάστασης του database λογισμικού.

Oracle Documentation

Εδώ υπάρχει το επίσημο documentation της Oracle.

Εμφάνιση αναρτήσεων με ετικέτα Recovery. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Recovery. Εμφάνιση όλων των αναρτήσεων

Πέμπτη 7 Ιανουαρίου 2016

Oracle Recovery Manager - RMAN



Στο άρθρο αυτό θα μιλήσουμε για τον Oracle Recovery Manager (RMAN).Ο oracle recovery manager (RMAN) είναι ένας από τους δύο τρόπους που κάποιος μπορεί να κάνει Online hot backup την βάση δεδομένων. Ο RMAN είναι ένα κεφάλαιο από μονός του και εδώ θα προσπαθήσω να παρουσιάσω μια συνοπτική περιγραφή και λειτουργία του. Ο RMAN είναι ένας Oracle Database Client ο οποίος εκτελεί backup και recovery εργασίες στις βάσεις δεδομένων καθώς επίσης μπορεί και να αυτοματοποιήσει την διαχείριση των backup πολιτικών μας. Γενικά ο RMAN απλοποιεί το backup, το restore και το recovery των datafiles της βάσης.

Το περιβάλλον του RMAN αποτελείται από εφαρμογές και βάσεις που παίζουν συγκεκριμένο ρόλο στο backup των δεδομένων. Κατ’ ελάχιστον πρέπει να περιλαμβάνει τα παρακάτω κομμάτια: 
  • Μια βάση στόχο 
Η βάση στόχος είναι η βάση στην οποία ο RMAN εκτελεί backup και recovery λειτουργίες. Ο RMAN κρατάει metadata των ενεργειών του στο control file της βάσης. Τα metadata του RMAN είναι γνωστά σαν RMAN repository. To RMAN repository μπορεί να είναι και μια βάση δεδομένων oracle γνωστή σαν RMAN catalog. 
  • Έναν RMAN client
Ένα oracle database εκτελέσιμο το οποίο μεταγλωττίζει τις εντολές του RMAN, οδηγεί τα sessions του server στο να εκτελέσουν τις εντολές του RMAN και καταγράφει τις ενέργειές του RMAN στο control file της βάσης στόχου. Το εκτελέσιμο του RMAN εγκαθίσταται αυτόματα μαζί με την εγκατάσταση της βάσης και συνήθως βρίσκεται στον ίδιο φάκελο με τα άλλα εκτελέσιμα της βάσης. Για παράδειγμα ο RMAN client στο Linux βρίσκεται στο $ORACLE_HOME/bin.

Μερικά περιβάλλοντα χρησιμοποιούν και τα ακόλουθα προαιρετικά στοιχεία:
  • Μια γρήγορη recovery περιοχή
Μια περιοχή στον δίσκο στην οποία η βάση μπορεί να αποθηκεύσει και να διαχειριστεί αρχεία σχετικά με το backup και το recovery. Μπορεί κάποιος να ορίσει την περιοχή αυτή και το μέγεθος που θα έχει με τις παρακάτω μεταβλητές περιβάλλοντος DB_RECOVERY_FILE_DEST και DB_RECOVERY_FILE_DEST_SIZE. 
  • Έναν media manager
Μία εφαρμογή που απαιτείται από τον RMAN για να αλληλεπιδράσει με τα media devices και τα tape libraries. O media manager ελέγχει αυτές τις συσκευές κατά την διάρκεια του backup και του recovery, διαχειρίζεται τον φόρτο, βάζει ετικέτες, βγάζει τις ταινίες από το tape library. Οι συσκευές διαχείρισης ταινιών (media manager) μερικές φορές λέγονται SBT (system backup to tape) συσκευές.
  • Ένα recovery catalog
Μια ξεχωριστή βάση δεδομένων η οποία χρησιμοποιείται για να καταγράφει όλη την δραστηριότητα του RMAN απέναντι σε μία ή περισσότερες βάσεις στόχους. Η βάση αυτή έχει όλα τα metadata του RMAN έτσι ώστε να είναι πιο εύκολη η επαναφορά της βάσης σε περίπτωση που έχουμε απώλεια του control file αυτής. Η βάση μπορεί να γράψει πάνω σε παλαιότερες εγγραφές στο control file, αλλά ο RMAN κρατάει όλες τις εγγραφές για πάντα στην βάση εκτός και αν αυτές σβηστούν από τον χρήστη. Για βάσεις παραγωγής προτείνεται η χρήση RMAN catalog (συμβουλή μου είναι πάντα να υπάρχει rman catalog).

Στην συνέχεια θα παρουσιάσω τις εντολές που πρέπει κάποιος να τρέξει ώστε να πάρει backup μια βάση με την χρήση του RMAN όταν αυτή είναι σε archive log mode και όταν δεν είναι.

1) Παίρνοντας Backup μια βάση σε archive log mode (με την βάση πάνω):
Αν η βάση τρέχει σε archivelog mode τότε μπορούμε να την πάρουμε backup ενώ είναι ανοιχτή. Το backup τότε λέγεται μη ολοκληρωμένο (inconsistenet backup) γιατί τα redo χρειάζονται κατά την διάρκεια του recovery ώστε η βάση να είναι σε συνεπή κατάσταση (consistent state).

Για να πάρουμε backup ξεκινάμε τον rman client και συνδεόμαστε στην βάση  στόχο.
CMD>rman
RMAN>connect target sys@prod;

Τρέχουμε την εντολή του backup. Για παράδειγμα τρέχουμε την παρακάτω εντολή έτσι ώστε να πάρουμε backup την βάση και όλα τα archives στην default συσκευή backup.

RMAN>backup database plus archivelog;

2) Παίρνοντας Backup μια βάση σε noarchive log mode:

Αν η βάση τρέχει σε noarchivelog mode τότε το μόνο έγκυρο database backup είναι και συνεπή (consistent) backup. Για να είναι το backup συνεπή, η βάση πρέπει να είναι σε κατάσταση mount και όχι ανοιχτή, αφού πρώτα έχει γίνει shutdown.Σε αυτή την περίπτωση δεν χρειάζεται να γίνει κανένα recovery μετά την επαναφορά του backup.

Για να πάρουμε backup ξεκινάμε τον rman client και συνδεόμαστε στην βάση στόχο.
CMD>rman 
RMAN>connect target sys@prod;

Κλείνουμε την βάση και την ανεβάζουμε σε κατάσταση mount.

RMAN>shutdown immediate;
RMAN>startup force dba;
RMAN>shutdown immediate;
RMAN>startup mount;


Τρέχουμε την εντολή του backup. Για παράδειγμα τρέχουμε την παρακάτω εντολή έτσι ώστε να πάρουμε backup την βάση στην default συσκευή backup.

RMAN>backup database;

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

RMAN>alter database open;

3) Συντηρώντας RMAN backups:

Όλες οι πληροφορίες σχετικά με τα backups του RMAN αποθηκεύονται πάντοτε στο control file της βάσης στόχου (της βάσης που παίρνεται backup). Οι εντολές συντήρησης του RMAN χρησιμοποιούν τις πληροφορίες αυτές όταν διαχειρίζονται τα rman backups. Στην συνέχεια θα μιλήσουμε για δύο χρήσιμες εντολές συντήρησης την crosscheck και την delete. H crosscheck εντολή συγχρονίζει τις λογικές εγγραφές των RMAN backups με τα αρχεία στην συσκευή αποθήκευσης. Αν το backup είναι στον δίσκο τότε η εντολή crosscheck αποφασίζει εάν το Header του αρχείου backup είναι έγκυρο. Αν το backup είναι σε ταινία, τότε ο RMAN ρωτά το repository του RMAN για τα ονόματα και την τοποθεσίες των ταινιών που περιέχουν το backup. Μια καλή ιδέα είναι να κάνουμε crosscheck backups πριν να τα διαγράψουμε.

Για να κάνουμε crosscheck όλα τα backup που είναι αποθηκευμένα στον δίσκο ξεκινάμε τον rman client και συνδεόμαστε στην βάση στόχο.

CMD>rman
RMAN>connect target sys@prod;

Τρέχουμε την εντολή όπως φαίνεται στην συνέχεια:

RMAN>crosscheck backup;
RMAN>crosscheck copy;


Στην συνέχεια θα μιλήσουμε για την εντολή delete. Η εντολή αυτή αφαιρεί RMAN backups από τον δίσκο και τις ταινίες ενημερώνοντας καταλλήλως τόσο το control file όσο και τις εγγραφές στο recovery catalog (αν υπάρχει). Αν τρέχουμε τον RMAN διαδραστικά και δεν ορίσουμε την NOPROMPT επιλογή, η εντολή delete εμφανίζει την λίστα των αρχείων που θα σβήσει και ζητάει 
επιβεβαίωση πριν προχωρήσει στην οριστική διαγραφή τους. Η εντολή DELETE OBSOLETE είναι ιδιαίτερα χρήσιμη διότι ο RMAN σβήνει backups και data files τα οποία δεν χρειάζονται πλέον. Μπορεί να ορίσει κάποιος στην εντολή τι θεωρεί ότι δεν χρειάζεται ή να το ορίζει κεντρικά μέσω της μεταβλητής backup retention policy.

Για σβήσουμε όλα τα backup που δεν χρειάζονται ξεκινάμε τον rman client και συνδεόμαστε στην βάση στόχο.

CMD>rman
RMAN>connect target sys@prod;


Τρέχουμε στην συνέχεια την εντολή όπως φαίνεται στην συνέχεια:

RMAN>delete obsolete;

4) RECOVER με τον RMAN ολόκληρη βάση δεδομένων oracle:

Μπορούμε να χρησιμοποιήσουμε τις εντολές restore database και recover database ώστε να κάνουμε recover όλη την βάση. Πρέπει πριν από όλα να έχουμε πάρει πριν backup όλα τα απαιτούμενα αρχεία. Το σενάριο που περιγράφουμε προϋποθέτει την δυνατότητα επαναφοράς όλων των data files στην αρχική τοποθεσία τους. 

Για να κάνουμε recover ολόκληρη την βάση με την χρήση του RMAN,ξεκινάμε τον rman client και συνδεόμαστε στην βάση στόχο.

CMD>rman
RMAN>connect target sys@prod;


Βάζουμε την βάση σε κατάσταση mount. Η παρακάτω εντολή κατεβάζει την βάση αν ήδη είναι ανεβασμένη και την ξανά ανεβάζει σε mount κατάσταση.

RMAN>startup force mount;

Κάνουμε restore την βάση με το προ ορισμένο disk channel.
RMAN>restore database;

Κάνουμε recover την βάση
RMAN>recover database;

Ανοίγουμε την βάση κανονικά
RMAN>alter database open;

Ο oracle recovery manager (RMAN) είναι ένα μεγάλο κεφάλαιο για τις oracle βάσεις και η παράγραφος αυτή δεν είναι τίποτα άλλο από μια απλή παρουσίαση του τι μπορεί να κάνει κανείς με το συγκεκριμένο εργαλείο.


Δευτέρα 28 Δεκεμβρίου 2015

Redundancy Redo logs (Oracle DB)



Στο άρθρο αυτό θα περιγράψουμε το πως μπορούμε να προσθέσουμε επιπλέον redo logs σε μια βάση oracle ώστε να εξασφαλίσουμε μεγαλύτερο redundancy σε περίπτωση που δημιουργηθεί corruption στο κάποιο redo log file. 

Η oracle by default δημιουργεί κατά την δημιουργία νέου Instance 3 group redo logs που το καθένα περιέχει ένα redo log file. Σε αυτά τα redo logs files αποθυκεύοντε όλες οι αλλαγές που γίνοντε στην βάση ώστε σε περίπτωση προβλήματος η βάση να μπορεί να κάνει recover σε οποιαδήποτε χρονική στιγμή. Αν η βάση είναι σε archive log mode τότε μόλις τα αρχεία γεμίσουν αποθυκεύεται ένα αντιγραφό τους στο δίσκο (archives) και ξαναγράφοντε από την αρχή. Σε περίπτωση που γίνει corrupted ένα από τα redo logs η βάση θα κολλήσει και θα χαθεί η δυνατότητα recovery αυτής.

Για τον λόγο αυτό προτείνεται στις βάσεις παραγωγής σε κάθε group να υπάρχουν τουλάχιστον δύο logs ώστε αν υπάρχει ένα corruption αυτό να μην επιρεάζει το δεύτερο log του group και η βάση να συνεχίσει να δουλεύει κανονικά. Το μόνο μειονέκτημα αυτής της ρύθμισης είναι ο διπλασιασμός των archives. Καλύτερα όμως να έχουμε τον κεφάλη μας ήσυχο όταν έχουμε να κάνουμε με συστήματα παραγωγής δεν συμφωνείτε;.

Συνδεόμαστε στην βάση με sysdba λογαριασμό

CMD>sqlplus ‘sys/<password> as sysdba’
       
Εκτελούμε τις παρακάτω εντολές.

SQL> alter database add logfile member '/oradata/dbfiles/dbname/redo01b.log' to group 1;   
           alter database add logfile member '/oradata/dbfiles/dbname/redo02b.log' to group 2;
           alter database add logfile member '/oradata/dbfiles/dbname/redo03b.log' to group 3;


Χρήσιμα Views:

v$log              
(εμφανίζει πληροφορίες σχετικά με τα redo files)
v$logfile        
(εμφανίζει τα redo log group και τα μέλη τους καθώς και την καταστασή τους)
v$log_history
(εμφανίζει πληροφορίες για την ιστορικότητα των logs)













Τετάρτη 18 Νοεμβρίου 2015

Oracle Database - Cold Backup - Restore - Recovery




Στο άρθρο αυτό θα περιγράψουμε το Cold Backup-Restore, όπου απαιτείται για να είναι σωστό το backup η βάση να κατέβει (να γίνει δηλαδή shutdown). Αφού η βάση κατέβει είμαστε πλέον σε θέση να αντιγράψουμε όλο τον φάκελο με τα dbfiles της βάσης σε οποιοδήποτε μέσο επιθυμούμε. Αυτό το είδος του backup έχει down time ανάλογο με το μέγεθος της βάσης, αφού όσο διαρκεί το backup η βάση θα πρέπει να παραμείνει ανενεργή. Ενώ το cold backup είναι μια πολύ εύκολη διαδικασία το restore μπορεί να εξελιχθεί σε μια πιο περίπλοκη υπόθεση. Αν θέλουμε να επαναφέρουμε το backup στο ίδιο το μηχάνημα και στην ίδια τοποθεσία από όπου το πήραμε τα πράγματα είναι πολύ απλά, κάνουμε restore-copy από το backup τα dbfiles στην αρχική τοποθεσία. (πριν από αυτό σβήνουμε τα παλιά αρχεία). Τα πράγματα γίνονται πιο περίπλοκα αν θέλουμε να επαναφέρουμε την βάση σε συγκεκριμένη χρονική στιγμή, πριν ας πούμε από ένα corruption. Για να είναι δυνατόν αυτό η βάση πρέπει να είναι σε archive log mode και να γίνει χρήση τόσο του cold backup των datafiles όσο και των archives. 

Η διαδικασία είναι να κάνουμε πρώτα restore τόσο το τελευταίο cold backup της βάσης όσο και τα archives που έχουν παραχθεί μετά από αυτό. Θα πρέπει να γίνουν restore τα controlfiles, τα datafiles και τα archives στους αντίστοιχους φακέλους. Τα redo logs files θα πρέπει να σβηστούνε επειδή θα ξανά δημιουργηθούν με την εκτέλεση της εντολής resetlogs μετά την εφαρμογή των αλλαγών (archives) πάνω στην βάση. Επομένως μετά τις παραπάνω ενέργειες εκτελούμε με την σειρά τα παρακάτω:
         
Συνδεόμαστε στην βάση με sysdba λογαριασμό

CMD>sqlplus ‘sys/<password> as sysdba’
       
Ανεβάζουμε την βάση σε mount κατάσταση.

SQL> startup mount;

Εφαρμόζουμε όλες τις αλλαγές που βρίσκονται στα archives που έχουμε στον default Archive Destination (στο τέλος γράφουμε cancel για να τερματιστεί η συγκεκριμένη διαδικασία). Η παρακάτω εντολή θα εφαρμόσει όλες τις αλλαγές από όλα τα archives που υπάρχουν στο default archive destination.

SQL> recover automatic database using backup controlfile until cancel;

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

SQL> recover automatic database using backup controlfile until time 01-JAN;

ή

SQL> recover automatic database using backup controlfile until time '2009-10-21:06:00:00';

Ελέγχουμε την κατάσταση των datafiles και επιβεβαιώνουμε ότι βρίσκονται στην
επιθυμητή χρονική στιγμή

SQL>select status, checkpoint_change#,to_char(checkpoint_time, 'dd-mm-yyyy  hh24:mi:ss') as checkpoint_time,count(*) from v$datafile_header
group by status, checkpoint_change#, checkpoint_time
order by status, checkpoint_change#, checkpoint_time;

Ελέγχουμε αν υπάρχουν ασαφή-fuzzy αρχεία με το παρακάτω query. Αν επιστρέψει
κάτι ανάμεσα στο 0 και 8192 τότε είμαστε οκ.

SQL>select fhthr  thread, fhrba_seq sequence,fhscn scn, fhsta status,
count(*)from x$kcvfh
group by fhthr,fhrba_seq,fhscn,fhsta;

Τέλος είμαστε έτοιμοι να ανοίξουμε την βάση κάνοντας reset τα logs(η αρίθμησή τους ξεκινάει από την αρχή).

SQL>alter database open resetlogs;

Καλό είναι στην συνέχεια η βάση να κατέβει και να παρθεί ξανά backup.