RMAN Skript Ausgabeumleitung

gurbelunder

SQL-Guru
Beiträge
136
Hallo zusammen,

ich habe ein kleines Skript gebastelt, dass obsolete Backups im RMAN löschen soll. Damit ich im Nachhinein nachvollziehen kann, welche Backups gelöscht wurden, möchte ich erst den "report obsolete" Befehl aufrufen und diesen in eine Datei umleiten lassen. Wie mache ich das in diesem Fall am günstigsten?

Hier das Skript:

Code:
#!/bin/ksh
 
export ORACLE_SID=dbtest2
export ORACLE_HOME=/home/oracle/srv/ora/product/11.2.0/dbtest_2
export ORACLE_BIN=/home/oracle/srv/ora/product/11.2.0/dbtest_2/bin
alias RMAN=$ORACLE_BIN/rman
 
RMAN target / <<EOI
 
    report obsolete;     <--- hier müsste dann ja die Ausgabeumleitung hin, aber ein einfaches " > datei" nimmt er mir hier nicht...
    delete obsolete;
 
    quit
EOI
 
Werbung:
So, Ausgabeumleitung habe ich jetzt selbst herausgefunden. Nun überlege und suche ich allerdings, wie ich dem Befehl "delete obsolete" automatisch ein YES mitgebe. Hier das Script im neuen Zustand:

Code:
#!/bin/ksh
 
export ORACLE_SID=dbtest2
export ORACLE_HOME=/home/oracle/srv/ora/product/11.2.0/dbtest_2
export ORACLE_BIN=/home/oracle/srv/ora/product/11.2.0/dbtest_2/bin
alias RMAN=$ORACLE_BIN/rman
 
RMAN target / > report_del_obsolete 2>&1 <<EOI
 
    delete expired backup;
    delete obsolete;
    quit
 
EOI
Danke euch!
Gruß,
David
 
Habs, dank direktem Oracleforum, gefunden. Hier für jeden, der sich daran interessiert:

Code:
#!/bin/ksh   <----- hier bitte eure jeweilige Shell anpassen
 
export ORACLE_SID=dbtest2   <----- Hier eure SID eintragen
export ORACLE_HOME=/home/oracle/srv/ora/product/11.2.0/dbtest_2   <----- Pfad zum $ORACLE_HOME, sollte hier explizit neu definiert werden, da auf keine .profile zugegriffen wird
export ORACLE_BIN=/home/oracle/srv/ora/product/11.2.0/dbtest_2/bin   <----- Pfad zu $ORACLE_HOME/bin, sodass auf die executable "rman" zugegriffen werden kann
alias RMAN=$ORACLE_BIN/rman   <----- Ein Sicherheitstick von mir, somit ist innerhalb des Skriptes der Befehl angepasster
 
RMAN target / > report_del_obsolete 2>&1 <<EOI     <----- Mit rman verbinden (RMAN target /) und die gesamte Ausgabe in dem Block in die Datei report_del_obsolete schreiben (> report_del_obsolete 2>&1)
   
    delete noprompt obsolete;   <----- obsolete Backups löschen, Bestätigung wird nicht benötigt (=> noprompt)
    delete noprompt expired backup;   <----- abgelaufene (expired) Backups löschen, Bestätigung wird nicht benötigt (=> noprompt)
    quit   <----- rman Verbindung beenden
 
EOI   <--- Befehlsblock beenden

Man kann dieses Skript nun per DBMS_SCHEDULER als Job einrichten und nach belieben ablaufen lassen, so wird der Speicherplatz auf dem Backupmedium nicht zu schnell voll. Des Weiteren könnte man über das Linuxtool "mail" sich die report_del_obsolete per Mail zusenden lassen, um diese immer auf dem aktuellen Stand gleich zu besitzen.
 
Werbung:
Habs sogar noch was weiterbearbeitet ;) :

Code:
#!/bin/ksh   #an die eigene Shell anpassen
 
###############################################################################
 
# description:
# this script deletes all obsolete and expired backups from Oracle RMAN and send a report about that
# to entered email address
 
# AUTHOR : xxx
# VERSION: 0.1
 
###############################################################################
 
# *****************************************************************************
# declarations
# *****************************************************************************
 
export ORACLE_SID=<SID hier eintragen>
export ORACLE_HOME=<Pfad zu $ORACLE_HOME hier eintragen>
export ORACLE_BIN=$ORACLE_HOME/bin
export ORACLE_REPORT=$ORACLE_HOME/reports #Ordner muss erstellt werden!
 
alias RMAN=$ORACLE_BIN/rman
 
host=$( /bin/hostname -s )
mail=<hier Mailadresse eintragen>
 
# *****************************************************************************
# functions
# *****************************************************************************
 
usage() {   #Eine usage() Funktion sollte in jedem Linuxscript vorhanden sein
    print -u2 "\nusage ${0##*/} with no options\n"
    exit 1
}
 
program_arguments_ok() {   #Wird das Skript mit den richtigen (keinen) Parametern aufgerufen???
    [ $# -eq 0 ] || return 1
}
 
delete_obsolete_backups() {   # das eigentliche Löschen der Backups
    RMAN target / > $ORACLE_REPORT/report_del_obsolete 2>&1 <<EOI
        delete noprompt obsolete;
        delete noprompt expired backup;
        quit
EOI
}
 
send_report_mail() {    # Email mit dem Report senden
    report=$( cat $ORACLE_REPORT/report_del_obsolete )
    echo "$report" | mail -s "$host: abgelaufene Backups geloescht!" "$mail"
}
 
# *****************************************************************************
# main
# *****************************************************************************
 
program_arguments_ok || usage   # Programmaufruf testen, wenn nicht korrekt, dann usage() werfen
 
delete_obsolete_backups   # Löschen ausführen
 
send_report_mail   # Email senden

Sollten Fragen zum Skript sein, einfach hier im Thread melden oder PN an mich.

Ich habe dieses Skript auch auf das erstellen eines Fullbackups und eines inkrementellen Backups angepasst, bei Interesse => Frage an mich ;)

Gruß,
David
 
Zurück
Oben