Skip to Main Content

 

Auswahl  

Komplett Übersicht aller Oracle Tipps

Überwachung der Alert-Datei unter Linux 

Oracle
DBA
RDBMS 11.x
21.06.18 (MP)
05.07.23(MD)
DBA

Passende Schulungen zum Thema

Hier nun die Ergänzung für die Überwachung der Alert-Datei unter Linux-Systemen.

Damit E-Mails verschickt werden können, muss zunächst noch SMTP unter Linux eingerichtet werden. Dazu editieren Sie als Root-User die Datei mail.rc unter /etc und setzen den Parameter smtp auf Ihren Ihren Mail-Server.

$> su -
$> vi /etc/mail.rc

-- Tragen Sie folgende Zeile ein und speichern die Änderung ab
set smtp=<name_oder_ip_des_mail_servers>

-- Zum Testen führen Sie folgenden Befehl aus
$> echo "Dies ist ein Test" | mailx -r <absender_mail_adresse> -s "Betreff: Fehler in Alertlog" <empfänger_mail_adresse>
 

Wie Sie sehen können, nutzen wir mailx als E-Mail-Programm. Sie können natürlich auch ein beliebiges anderes Programm verwenden, müssen evtl. nur den Aufruf zum E-Mail versenden anpassen.

Das folgende Shell-Skript (alertlog_check.sh) stellt das Pendant zum Powershell-Skript unter Windows dar. Auch dieses dient nur als Vorlage und kann an die Wünsche und Bedürfnisse des ausführenden DBAs angepasst werden. Die fettgedruckten Parameter sind an Ihre jeweilige Umgebung anzupassen.

# pattern to search for
regex_err='ORA-|TNS-|Checkpoint not|WARNING|Starting ORACLE instance|Shutting down instance|Resize operation|alter database|ALTER SYSTEM SET'
# timerange in minutes to search for patterns
timerange=15
# fullpath of alertlog
alertfile="<$ORACLE_BASE>/diag/rdbms/<$ORACLE_UNQNAME>/<$ORACLE_SID>/trace/alert_<$ORACLE_SID>.log"
# number of lines each block has
maxblocklines=50
# mail - from
from="<sender_mail_adresse>"
# mail - to
to="<empfänger_mail_adresse>"

rgx_date_12_1='^[A-Z]{1}[a-z]{2} [A-Z]{1}[a-z]{2}'
rgx_date_12_2='^[0-9]{4}-[0-9]{2}-[0-9]{2}'
found=1
triggered=0
blocklength=2
maxlines=$(sed -n '$=' $alertfile)

get_date() {
    date --date="$1" +"%Y-%m-%d %H:%M:%S"
}

while (( $found )) ;
do
    block=$(tail -n $blocklength $alertfile)
    while IFS= read -r line
    do
        if [[ $line =~ $rgx_date_12_1 ]] || [[ $line =~ $rgx_date_12_2 ]] ;
        then
            if [[ $(get_date "$line") < $(date -d "${timerange} minutes ago" '+%Y-%m-%d %H:%M:%S') ]] ;
            then
                found=0
                continue
            fi
            if (( ! $found )) ;
            then
                if [[ $(get_date "$line") > $(date -d "${timerange} minutes ago" '+%Y-%m-%d %H:%M:%S') ]] ;
                then
                    alert_date="$line"
                    triggered=1
                    continue
                else
                    triggered=0
                fi
            fi
        fi
        if (( $triggered )) ;
        then
            if [[ $line =~ $regex_err ]] ;
            then
                err_out+=$'\n'
                err_out+="$alert_date $line"
            fi
        fi
    done <<< "$block"
    blocklength=$[$blocklength+$maxblocklines]
    if [[ $blocklength -gt $maxlines ]] ; then break; fi
done

if [ ! -z "$err_out" ] ; then echo "$err_out" | mailx -r "$from" -s "$(hostname) - Error in alertlog" "$to"; fi
 

Zum zeitgesteuerten Aufruf dieses Skripts werden im Folgenden zwei Alternativen vorgestellt:

  • über einer DBMS_SCHEDULER-Job (analog zur Windows-Variante)
  • als Cronjob über die Crontab von Linux

VARIANTE 1: ÜBER EINEN DBMS_SCHEDULER-JOB

Da auf eine Betriebssystemdatei zugegriffen werden soll, muss zunächst ein Oracle Credential eingerichtet werden. Hier wird der OS-User oracle verwendet.


SQL> conn system

SQL> BEGIN 
  DBMS_CREDENTIAL.CREATE_CREDENTIAL( 
    credential_name => 'oracle_alert_cred', 
    username        => 'oracle', 
    password        => '<ihr_passwort>',
    enabled         => TRUE);
END; 
/
 

Nun werden über das Package DBMS_SCHEDULER ein Progamm, ein Scheduler und ein Job erzeugt, so dass alle 15 Minuten das Check-Skript aufgerufen werden soll.


SQL> BEGIN
  DBMS_SCHEDULER.CREATE_PROGRAM (
    program_name        => 'alertlog_prog',
    program_type        => 'executable',
    program_action      => '/home/oracle/scripts/alertlog_check.sh',
    number_of_arguments => 0,
    enabled             => TRUE,
    comments            => 'Alertdatei-Monitoring');
END;  
/

SQL> BEGIN
  DBMS_SCHEDULER.CREATE_SCHEDULE (
    schedule_name   => 'alertlog_schedule',
    start_date      => systimestamp,
    repeat_interval => 'FREQ=minutely; interval=15',
    comments        => 'Alertlog-Monitoring');
END;
/

SQL> BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'alertlog_job',
    program_name    => 'alertlog_prog',
    schedule_name   => 'alertlog_schedule',
    enabled         => TRUE,
    credential_name => 'oracle_alert_cred'); 
  COMMIT;
END;
/

-- Falls Sie den Job sofort ausführen wollen, dann hiermit
SQL> exec dbms_scheduler.run_job(job_name=>'alertlog_job');
 

Hier noch einige nützliche Abfragen zu dem, was Sie gerade eingerichtet haben:


SQL> SELECT * FROM user_scheduler_credentials;

SQL> SELECT program_name, enabled FROM user_scheduler_programs;

SQL> SELECT schedule_name, start_date, repeat_interval, comments 
       FROM dba_scheduler_schedules;

SQL> SELECT job_name, program_name, schedule_name, last_start_date,
            next_run_date, enabled, state, run_count 
       FROM dba_scheduler_jobs;

SQL> SELECT * FROM user_scheduler_job_run_details 
      ORDER BY log_date DESC;
 


VARIANTE 2: ÜBER EINEN CRONTAB-JOB

Der Nachteil der ersten Variante ist, dass das Überwachungsskript aus der Datenbank heraus aufgerufen werden soll. Ist diese nicht verfügbar, kann der Job auch nicht gestartet werden und es wird keine E-Mail verschickt.
Aus diesem Grund ist die zweite Variante sinnvoller, bei der ein Cronjob über die Tabelle Crontab eingerichtet wird. Somit werden Sie auch dann benachrichtigt, wenn die Instanz abgestürzt sein sollte.

$> su - oracle
$> crontab -e

# Das folgende Skript soll alle 15 Minuten aufgerufen werden
*/15 * * * * /home/oracle/scripts/alertlog_check.sh
 

 

Bei Fragen oder weiterer Unterstützung dürfen Sie uns gerne kontaktieren. Viel Spaß beim Überwachen!

Weitere Interessante Kurs-Tipps zum Thema

Überwachung der Alert-Datei unter Windows
Automatischer Start einer Oracle Datenbank unter LINUX/UNIX
Oracle XE 18c Installation (Linux)
Filterung der Alert.log mittels SQL
TomCat Logfiles mittels External Table lesen

Besuchen Sie uns doch bei einer unsere über 50 Oracle Schulungen in München - Unterhaching, oder verfolgen Sie die Training per Videostreaming bequem vom Home Office oder Büro aus.