Πώς μπορούμε να λαμβάνουμε email κάθε φορά που χάνεται ο συγχρονισμός μεταξύ βάσεων δεδομένων σε Oracle Data Guard

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που χάνεται ο συγχρονισμός μεταξύ βάσεων δεδομένων σε Oracle Data Guard
Πώς μπορούμε να λαμβάνουμε email κάθε φορά που χάνεται ο συγχρονισμός μεταξύ βάσεων δεδομένων σε Oracle Data Guard

Σε αυτό το άρθρο θα δούμε πώς φτιάχνουμε έναν μηχανισμό που θα μας ενημερώνει με email όταν κάποιες από τις standby βάσεις δεδομένων που κάνουν συγχρονισμό με την primary έχουν μείνει πίσω στο sequence number των logs είτε γιατί σταμάτησαν να στέλνονται τα logs είτε γιατί σταμάτησαν να γίνονται apply.

Τα βήματα

Σε προηγούμενο άρθρο είχαμε δει πως μπορούμε να ρυθμίσουμε έναν Linux server (Oracle Linux βασισμένο σε RHEL συγκεκριμένα) ώστε να λαμβάνουμε email κάθε φορά που εμφανίζεται ένα error στο Alert log του instance της βάσης δεδομένων. Αντίστοιχα τώρα θα δούμε τα βήματα για να λαμβάνουμε email όταν ένα κάποια replica είναι πίσω πάνω από ένα sequence number.

Δημιουργία SMTP relay με gmail της Google

Αν έχουμε δικό μας relay στον exchange server με ρυθμισμένο το smtp που θα στέλνει τα emails, αυτό το βήμα δεν το χρειαζόμαστε.

Θα δούμε τώρα όμως τι κάνουμε σε περίπτωση που θέλουμε να στέλνουμε τα emails μέσω Gmail.

Για αρχή θα πρέπει να συνδεθούμε στο gmail account security.

Εκεί θα πρέπει να ενεργοποιήσουμε το two factor authentication και έπειτα να δημιουργήσουμε application password.

Πώς μπορούμε να λαμβάνουμε email κάθε φορά που χάνεται ο συγχρονισμός μεταξύ βάσεων δεδομένων σε Oracle Data Guard

Αφού πάρουμε τον κωδικό από το gmail, πάμε στον server μας και προσθέτουμε στο mail configuration το email μας μαζί με τον κωδικό που πήραμε:

[oracle@dp-gr ~]$ sudo vi /etc/mail.rc 
account gmail {
    set smtp-use-starttls
    set ssl-verify=ignore
    set smtp-auth=login
    set smtp=smtp://smtp.gmail.com:587
    set from="info@dataplatform.gr"
    set smtp-auth-user=dataplatform.gr@gmail.com
    set smtp-auth-password="edw_vazoume_to_app_password"
    set ssl-verify=ignore
    set nss-config-dir=/etc/pki/nssdb
}

Είμαστε έτοιμοι να κάνουμε δοκιμή ότι μπορούμε να στείλουμε email:

[oracle@dp-gr ~]$ echo "Test" | /usr/bin/mail -A gmail -s "dokimastiko" ToEmailMas@outlook.com

Πώς βλέπουμε αν κάποια standby replica έχει σταματήσει τον συγχρονισμό και βρίσκεται κάποια sequences πίσω

Φτιάχνουμε το παρακάτω sql query που δημιουργεί το warning μήνυμα για την διαφορά σε sequence numbers που έχει σε περίπτωση που υπάρχει για πάνω από ένα (είτε λόγο το ότι δεν ελήφθησαν, είτε γιατί δεν έχουν γίνει apply τα logs):

[oracle@dp-gr ~]$ vi check_dg.sql
set heading off;
set feedback off;
set echo off;
set pagesize 0;


SELECT 'Warning: Data Guard Replication not working on '|| (select instance_name from v$instance) || '@' ||(select host_name from v$instance)||'!!! ~~~~~~~~~~~~~~~~ Received Sequence Difference is: '
 ||cast(LAST_SEQUENCE_RECEIVED-MAX_SEQUENCE as number) || ' and Applied Sequence Difference is: ' || cast(LAST_SEQUENCE_APPLIED-LAST_SEQUENCE_RECEIVED as number)
FROM
(SELECT DEST_ID, max(SEQUENCE#) LAST_SEQUENCE_RECEIVED
FROM V$ARCHIVED_LOG where resetlogs_change#=(select resetlogs_change# from v$database)
GROUP BY DEST_ID) ARCS
LEFT JOIN
(SELECT DEST_ID, max(SEQUENCE#) LAST_SEQUENCE_APPLIED
FROM V$ARCHIVED_LOG
where APPLIED='YES' AND DEST_ID not in (0,1) and resetlogs_change#=(select resetlogs_change# from v$database)
GROUP BY DEST_ID
UNION
SELECT 1 DEST_ID,max(SEQUENCE#) LAST_SEQUENCE_APPLIED
FROM V$LOG_HISTORY
where resetlogs_change#=(select resetlogs_change# from v$database)
) APPLIED ON APPLIED.DEST_ID=ARCS.DEST_ID
,
(SELECT max(SEQUENCE#) MAX_SEQUENCE
FROM V$LOG_HISTORY
where resetlogs_change#=(select resetlogs_change# from v$database))MAX
WHERE 1=1
and LAST_SEQUENCE_RECEIVED-MAX_SEQUENCE < -1
or LAST_SEQUENCE_APPLIED-LAST_SEQUENCE_RECEIVED < -1
;

exit;
/

Πώς στέλνουμε email όταν κάποια standby replica έχει μείνει πάνω από ένα sequence πίσω στον συγχρονισμό

Τώρα θα δημιουργήσουμε ένα εκτελέσιμο το οποίο θα τρέχει το παραπάνω query εξάγοντας τα αποτελέσματα σε ένα text file. Σε περίπτωση που το αρχείο είναι πάνω από μία γραμμή, τότε θα στείλει email με τον τίτλο “Oracle DB Alert ORCL” στα email που έχουμε ορίσει έχοντας ως κείμενο ένα warning που περιέχει το όνομα του server και του instance, μαζί με τον αριθμό των logs που δεν έχουν ληφθεί και τον αριθμό των logs που δεν έχουν γίνει apply.

Το email αποστέλεται μόνο αν μείνει πάνω από ένα log πίσω το replication.

Οπότε δημιουργούμε το εκτελέσιμο με τον παρακάτω κώδικα:

[oracle@dp-gr ~]$ vi check_dg.sh
#!/bin/bash
sqlplus -S "/as sysdba" @/home/oracle/check_tablespaces.sql > /home/oracle/check_dg.log
cnt=$(wc -l &lt;/home/opc/check_dg.log)
echo $cnt
if [ $cnt -ge "1" ]
then
        /usr/bin/mail -A gmail -s "Oracle DB Alert ORCL" \
                -r info@dataplatform.gr \
                dataplatform.gr@gmail.com \
         < /home/opc/check_dg.log

fi

Μπορούμε εναλλακτικά να το τρέχουμε απομακρυσμένα σε άλλο μηχάνημα με τον χρήστη SYS μέσω ezconnect:

#!/bin/bash
sqlplus -S "sys/Kwdikos@hostname:1521/ORCL as sysdba" @/home/oracle/check_dg.sql > /home/oracle/check_dg.log
cnt=$(wc -l &lt;/home/opc/check_dg.log)
echo $cnt
if [ $cnt -ge "2" ]
then
        /usr/bin/mail -A gmail -s "Oracle DB Alert ORCL" \
                -r info@dataplatform.gr \
                dataplatform.gr@gmail.com \
         < /home/opc/check_dg.log

fi

Δεν ξεχνάμε να έχουμε δώσει δικαίωμα execute πριν την εκτέλεση του:

[oracle@dp-gr ~]$ chmod +x check_dg.sh
[oracle@dp-gr ~]$ ./check_dg.sh


Πώς το κάνουμε schedule να γίνεται έλεγχος κάθε 5 λεπτά για Alerts

Αφού και το εκτελέσιμό μας είναι έτοιμο μπορούμε να προσθέσουμε μια γραμμή στο crontab στην οποία θα ορίσουμε να τρέχει και αυτή κάθε 5 λεπτά:

[oracle@dp-gr ~]$ crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * * . ~/.bash_profile && (/home/opc/check_dg_live.sh  >> /dev/null 2>&1)

Το αποτέλεσμα

Τώρα σε περίπτωση που κάποια standby replica είτε δεν έχει λάβει κάποια logs (Received Sequence Difference) είτε δεν τα έχει κάνει apply (Applied Sequence Difference) θα μας στείλει ένα email όπως το παρακάτω:

Warning: Data Guard Replication not working on ORCL@dp-gr!!! ~~~~~~~~~~~~ Received Sequence Difference is: -6 and Applied Sequence Difference is: -1
Πώς μπορούμε να λαμβάνουμε email κάθε φορά που χάνεται ο συγχρονισμός μεταξύ βάσεων δεδομένων σε Oracle Data Guard
Μοιράσου το

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