das ist mein erstes python-script. Es soll bei einer Oracle-Datenbank die Partition der Redologs überwachen. Wenn die Partition voll läuft dann sollen die Redologs gelöscht werden und per "rman" wird die DB wieder geradegezogen.
Email soll auch noch verschickt werden...
Soweit bin ich mal gekommen:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
# Import smtplib for the actual sending function
import smtplib
# Import the email modules we'll need
from email.MIMEText import MIMEText
#wie voll ist das oraarch?
disk = os.statvfs("/oracle/SID/oraarch")
#berechnen von capacity, available, used
capacity = disk.f_bsize * disk.f_blocks
available = disk.f_bsize * disk.f_bavail
used = disk.f_bsize * (disk.f_blocks - disk.f_bavail)
# print information in Megabytes
print used/1.048576e6, available/1.048576e6, capacity/1.048576e6
# print information in Gigabytes
print used/1.073741824e9, available/1.073741824e9, capacity/1.073741824e9
#available oraarch in MB
oraarch = available/1.048576e6
if oraarch < 29000:
#Loeschen aller LOGS
print os.system('du -cmsh /tmp/oraarch')
os.system('rm -rf /tmp/oraarch/*')
print os.system('du -cmsh /tmp/oraarch')
#Email-Part
msg = MIMEText('/oracle/SID/oraarch fast vollgelaufen - Redologs geloescht - Bitte ')
msg['Subject'] = 'Redologs auf gloescht!!!'
msg['From'] = 'root@server.de'
msg['To'] = 'admin@email.de'
server = smtplib.SMTP('localhost')
#server.set_debuglevel(1)
server.sendmail("root@server.de", ["admin@email.de",""], msg.as_string())
server.quit()
os.system('rman')
connect target
allocate channel for maintenance type disk;
CROSSCHECK ARCHIVELOG ALL;
delete expired archivelog until logseq = <letze LOG-Nummer>; release channel;
quit
Im Moment mach ich das per Hand und setze dann "delete expired archivelog until logseq = <letze LOG-Nummer>; release channel;" mit entsprechender LOG-Nummer ein.
"delete expired archivelog all;" wäre vielleicht noch eine vereinfachte Variante um nicht die LOG-Nummer auslesen zu müssen.
Ausserdem könnte ich die Befehle in ein seperates Script schreiben und das dann so ausführen lassen...
rman @rman-script
....aber vielleicht kennt jemand noch ne "schönere Lösung"
Merci