DBA Community - August 2011
|
Housekeeping der Oracle Datenbank: Freien Plattenplatz schaffen
von Ralf Durben, ORACLE Deutschland B.V. & Co. KG
Oracle Datenbanken haben in der Regel lange Laufzeiten, in denen sich viele nicht mehr benötigte Log- und Traceinformationen ansammeln. Das macht sich durch ein stetiges Wachstum von verbrauchtem Festplattenplatz bemerkbar und kann dazu führen, dass auf Storage-Ebene Konfigurationsanpassungen notwendig sind. Doch statt der Datenbank immer mehr Festplattenplatz zu gönnen ist es auch möglich, die nicht mehr benötigten Log- und Traceinformationen zu löschen.
Automatic Diagnostic Repository (ADR)Mit Oracle Datenbank 11g wurde das Automatic Diagnostic Repository (ADR) eingeführt. Damit wurden die wichtigten Log- und Tracedateien in eine Verzeichnisstruktur zusammengeführt. Dieses vereinfacht das Housekeeping stark, dennoch gibt es weitere Orte, an denen man fündig wird. Doch betrachten wir zunächst das ADR näher.Im ADR, welches üblicherweise im Verzeichnis $ORACLE_BASE liegt, wird für jede Komponente der installierten Oracle Datenbank Software ein eigener Bereich angelegt, wie das Beispiel zeigt. [oracle@host]$ ls -l $ORACLE_BASE/diag total 36 drwxrwxr-x 2 oracle oinstall 4096 Nov 30 2009 asm drwxrwxr-x 3 oracle oinstall 4096 Dec 2 2009 clients drwxrwxr-x 2 oracle oinstall 4096 Nov 30 2009 crs drwxrwxr-x 2 oracle oinstall 4096 Nov 30 2009 diagtool drwxrwxr-x 2 oracle oinstall 4096 Nov 30 2009 lsnrctl drwxrwxr-x 2 oracle oinstall 4096 Nov 30 2009 netcman drwxrwxr-x 2 oracle oinstall 4096 Nov 30 2009 ofm drwxrwxr-x 3 oracle oinstall 4096 Nov 30 2009 rdbms drwxrwxr-x 3 oracle oinstall 4096 Nov 30 2009 tnslsnrStatt jetzt die Verzeichnisse einzeln zu durchsuchen, können Sie sich zum Beispiel unter Linux (Kommando für Solaris siehe weiter unten) einen schnellen Überblick über das ADR verschaffen mit [oracle@host]$ ls -lahS $(find $ORACLE_BASE/diag -type f -size +1) -rw-r----- 1 oracle oinstall 7.0M Aug 3 07:31 /oracle/installations/diag/rdbms/radu1/radu1/alert/log.xml -rw-r----- 1 oracle oinstall 2.4M Aug 3 09:38 /oracle/installations/diag/tnslsnr/radu1/listener/alert/log.xml -rw-r----- 1 oracle oinstall 944K Jun 29 14:12 /oracle/installations/diag/clients/user_oracle/host_521977988_11/alert/log.xml -rw-r----- 1 oracle oinstall 64K Dec 2 2009 /oracle/installations/diag/clients/user_oracle/host_521977988_11/metadata/ADR_CONTROL.ams -rw-r----- 1 oracle oinstall 64K Dec 2 2009 /oracle/installations/diag/clients/user_oracle/host_521977988_11/metadata/ADR_INVALIDATION.ams -rw-r----- 1 oracle oinstall 64K Dec 2 2009 /oracle/installations/diag/clients/user_oracle/host_521977988_11/metadata/INC_METER_IMPT_DEF.ams -rw-r----- 1 oracle oinstall 64K Dec 2 2009 /oracle/installations/diag/clients/user_oracle/host_521977988_11/metadata/INC_METER_PK_IMPTS.ams -rw-r----- 1 oracle oinstall 64K Jul 31 11:38 /oracle/installations/diag/rdbms/radu1/radu1/metadata/ADR_CONTROL.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/ADR_INVALIDATION.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/AMS_XACTION.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/DDE_USER_ACTION.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/DDE_USER_ACTION_DEF.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/DDE_USER_ACTION_PARAMETER.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/DDE_USER_ACTION_PARAMETER_DEF.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/DDE_USER_INCIDENT_ACTION_MAP.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/DDE_USER_INCIDENT_TYPE.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/EM_DIAG_JOB.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/EM_TARGET_INFO.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/EM_USER_ACTIVITY.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/HM_FDG_SET.ams -rw-r----- 1 oracle oinstall 64K Jul 31 11:38 /oracle/installations/diag/rdbms/radu1/radu1/metadata/HM_FINDING.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/HM_INFO.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/HM_MESSAGE.ams -rw-r----- 1 oracle oinstall 64K Jul 31 11:38 /oracle/installations/diag/rdbms/radu1/radu1/metadata/HM_RECOMMENDATION.ams -rw-r----- 1 oracle oinstall 64K Jul 31 11:38 /oracle/installations/diag/rdbms/radu1/radu1/metadata/HM_RUN.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INCCKEY.ams -rw-r----- 1 oracle oinstall 64K Jul 31 11:38 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INCIDENT.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INCIDENT_FILE.ams -rw-r----- 1 oracle oinstall 64K Aug 3 09:06 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INC_METER_CONFIG.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INC_METER_IMPT_DEF.ams -rw-r----- 1 oracle oinstall 64K Aug 3 09:06 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INC_METER_INFO.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INC_METER_PK_IMPTS.ams -rw-r----- 1 oracle oinstall 64K Aug 3 09:06 /oracle/installations/diag/rdbms/radu1/radu1/metadata/INC_METER_SUMMARY.ams -rw-r----- 1 oracle oinstall 64K Oct 28 2010 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_CONFIGURATION.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_FILE_COPY_LOG.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_FILE_METADATA.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_PACKAGE.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_PACKAGE_FILE.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_PACKAGE_HISTORY.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_PACKAGE_INCIDENT.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/IPS_REMOTE_PACKAGE.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/PROBLEM.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/SWEEPERR.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/tnslsnr/radu1/listener/metadata/ADR_CONTROL.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/tnslsnr/radu1/listener/metadata/ADR_INVALIDATION.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/tnslsnr/radu1/listener/metadata/INC_METER_IMPT_DEF.ams -rw-r----- 1 oracle oinstall 64K Nov 30 2009 /oracle/installations/diag/tnslsnr/radu1/listener/metadata/INC_METER_PK_IMPTS.ams -rw-r----- 1 oracle oinstall 64K Aug 3 09:38 /oracle/installations/diag/tnslsnr/radu1/listener/trace/listener.log -rw-r----- 1 oracle oinstall 40K Nov 30 2009 /oracle/installations/diag/rdbms/radu1/radu1/metadata/ADR_INTERNAL.mif -rw-r----- 1 oracle oinstall 1.5K Aug 3 09:20 /oracle/installations/diag/rdbms/radu1/radu1/trace/radu1_m000_32045.trc -rw-r----- 1 oracle oinstall 1.5K Aug 3 09:30 /oracle/installations/diag/rdbms/radu1/radu1/trace/radu1_m000_1154.trc -rw-r----- 1 oracle oinstall 1004 Aug 3 09:37 /oracle/installations/diag/rdbms/radu1/radu1/trace/radu1_lgwr_1692.trcDas ADR hält eine Utility mit dem Namen ADRCI bereit, mit dem Sie im ADR auch "aufräumen" können. Diese Utility wird aufgerufen mit [oracle@host]$ adrci ADRCI: Release 11.1.0.7.0 - Production on Wed Aug 3 09:58:44 2011 Copyright (c) 1982, 2007, Oracle. All rights reserved. ADR base = "/oracle/installations" adrci>Jede einzelne Komponente hat ein eigenes "ADR-Home" und Sie lassen sich alle ADR-Homes anzeigen mit adrci> show homes ADR Homes: diag/rdbms/radu1/radu1 diag/tnslsnr/radu1/listener diag/clients/user_oracle/host_521977988_11Das ADR arbeitet mit zwei PURGE-Policies, nach denen bestimmte Daten automatisch gelöscht werden.
adrci> set homepath diag/rdbms/radu1/radu1 adrci> show control ADR Home = /oracle/installations/diag/rdbms/radu1/radu1: ************************************************************************* ADRID SHORTP_POLICY LONGP_POLICY LAST_MOD_TIME LAST_AUTOPRG_TIME -------------------- -------------------- -------------------- ---------------------------------------- ------------------------------------- 2509119399 720 8760 2010-10-28 15:30:09.310921 +02:00 2011-07-31 11:38:03.080256 +02:00 LAST_MANUPRG_TIME ADRDIR_VERSION ADRSCHM_VERSION ADRSCHMV_SUMMARY ADRALERT_VERSION CREATE_TIME ---------------------------------------- -------------------- -------------------- -------------------- -------------------- ------------ 2011-08-03 10:02:11.401378 +02:00 1 2 65 1 2009-11-30 1 rows fetchedMit dem Kommando SET_CONTROL können Sie diese Policies ändern, wobei auch hier die Zeit in Stunden angegeben wird: adrci> set homepath diag/rdbms/radu1/radu1 adrci> set control (SHORTP_POLICY = 240) adrci> set control (LONGP_POLICY = 2400)Sie können die alten Informationen aber auch direkt löschen mit dem Kommando PURGE, welches auch für ein einzelnes ADR-Home angewendet wird. Sie müssen auch hier für jeden PURGE-Durchgang vorher ein ADR-Home explizit auswählen: adrci> set homepath diag/rdbms/radu1/radu1 adrci> purge -age 14400 adrci> set homepath diag/tnslsnr/radu1/listener adrci> purge -age 14400 adrci> set homepath diag/clients/user_oracle/host_521977988_11 adrci> purge -age 14400Im obigen Beispiel werden Log- und Tracedateien, die älter sind als 14400 Minuten (also 10 Tage), gelöscht. Der Parameter "-age" wird also in Minuten spezifiziert. Das PURGE-Kommando kann auch auf einzelne Datei- und Informationsarten eingeschränkt werden. Dieses wird detailliert im Handbuch "Oracle Database Utilities" beschrieben. Eines macht das PURGE-Kommando aber nicht: Dateien verkleinern, die Daten über einen großen Zeitraum gesammelt haben. Es gibt Dateien im ADR, die stetig wachsen. Dazu gehören die Alert-Datei und vor allem die listener.log-Datei. Gerade Letztere kann über die Zeit bei regelmäßiger Nutzung der Datenbank über SQL*Net recht groß werden. Das PURGE-Kommando des ADRCI löscht aber keine Einträge aus dieser Datei. Daher empiehlt es sich auch hin und wieder die Datei zu leeren, zum Beispiel mit einem echo 0 > $ORACLE_BASE/diag/tnslsnr/radu1/listener/trace/listener.logZuvor können Sie die Datei zur Sicherung der Informationen auf einen anderen Speicherort kopieren. Audit-DatenDie Oracle Datenbank 11g auditiert alle Datenbankanmeldungen, die mit SYSDBA-Rechten erfolgen. Pro Datenbankanmeldung mit SYSBDA-Rechten wird dabei eine eigene Datei erzeugt, die ungefähr 700 Byte groß ist. Sicherlich ist das für sich genommen keine relevante Größe, im Laufe der Zeit können aber sehr viele solcher Dateien zusammenkommen! Audit-Daten haben natürlich ihren Sinn und bevor daran manipuliert wird, sollte geklärt werden, ob und wie weit zurück diese analysiert werden. Auch die Aufbewahrung sollte klar geregelt sein. So empfiehlt es sich unter Umständen, den Speicherort dieser Dateien nicht auf dem Datenbankserver, sondern direkt an einer zentralen Stelle zu wählen.Der Speicherort für diese Auditdaten wird mit dem Instanzparameter AUDIT_FILE_DEST festgelegt [oracle@host]$ sqlplus / as sysdba : SQL> show parameter audit NAME TYPE VALUE ------------------------------------ ----------- --------------------------------------- audit_file_dest string /oracle/installations/admin/radu1/adump audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string NONEund mit rm /oracle/installations/admin/radu1/adump/*sind diese schnell gelöscht. Database ControlOracle Enterprise Manager Database Control dient zur Verwaltung einer dedizierten Datenbank. Dazu wird im Oracle Home der Datenbank eine OC4J-Instanz verwendet. Wenn mit DBCA eine Datenbank erstellt wird, ist im entsprechenden Dialog die Verwendung von Database Control als Default voreingestellt. Wenn dieses nicht verändert wird, wird für diese neue Datenbank eine eigene Database Control Instanz eingerichtet.Database Control hat eigene Log-Dateien, die sich auch füllen, wenn auf Database Control selbst gar nicht groß zugegriffen wird.
Sie finden diese Datei im Verzeichnis $ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_<host>_<sid>/logund kann recht leicht geleert werden mit echo 0 > $ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_<host>_<sid>/log/em-application.logalso zum Beispiel echo 0 > $ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_radu1.de.oracle.com_radu1/log/em-application.log Sie finden diese Dateien im Verzeichnis $ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_<host>_<sid>/sysman/logDie Log- und Tracedateien werden automatisch geteilt, wenn eine gewisse Größe erreicht wird und so entstehen alte Log- und Tracedateien mit den Namen emoms.trc.* emoms.log.* emagent.trc.* emagent.log.*die dann einfach gelöscht werden können mit rm $ORACLE_HOME/<host>_<sid>/sysman/log/emoms.trc.* rm $ORACLE_HOME/<host>_<sid>/sysman/log/emoms.log.* rm $ORACLE_HOME/<host>_<sid>/sysman/log/emagent.trc.* rm $ORACLE_HOME/<host>_<sid>/sysman/log/emagent.log.* Wenn Database Control Core Dumps erzeugt, finden sich diese in $ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole_<host>_<sid>/sysman/emdund können gelöscht werden mit rm $ORACLE_HOME/<host>_<sid>/sysman/emd/core* Ein letzter prüfender BlickNachdem Sie die obigen Punkte geprüft haben, verschaffen Sie sich am besten noch einen globalen Blick auf ein Oracle Home. Schließlich können ja auch Fremdanwendungen aus der Datenbank heraus Dateien erzeugen. Im ersten Schritt lassen Sie sich alle Dateien, die größer sind als 10MB der Größe nach auflisten. Auf Linux-Systemen zum Beispiel gibt es dazu das Kommandols -lahS $(find $ORACLE_HOME -type f -size +10000k)Und für Solaris-Systeme nutzen Sie ls -lah $(find $ORACLE_HOME -type f -size +10000k) | sort +4rnDas Ergebnis sollte überschaubar sein. Log- und Tracedateien erkennen Sie leicht an ihrer Endung. Auch Core-Dumps sind leicht auffindbar. Im zweiten Schritt lassen Sie sich alle Dateien auflisten, die in den letzten 4 Tagen verändert wurden: Linux: ls -lahS $(find $ORACLE_HOME -type f -ctime -4) Solaris: ls -lah $(find $ORACLE_HOME -type f -ctime -4) | sort +4rnSollte es ein Verzeichnis geben, in dem ständig neue Dateien erstellt werden, können Sie dieses mit diesem Kommando leicht ausfindig machen. FazitDie Oracle Datenbank erzeugt Log- und Tracedateien, die im Fehlerfall hilfreich sind, bei längerem Betrieb einer Datenbank aber auch signifikanten Festplattenplatz belegen können. Mit wenigen Schritten können Sie unter Umständen genügend Storage wiedergewinnen und damit eine Konfigurationsänderung vermeiden. |