Logo Oracle Deutschland   DBA Community  -  Juni 2014
Diagnose Daten einfach sammeln mit dem Oracle Trace File Analyzer
von Sebastian Solbach ORACLE Deutschland B.V. & Co.KG

Die Prozesse im Umfeld einer Oracle Datenbank schreiben sehr viele Log- und Traceinformationen. Die wichtigsten Informationen finden sich auch im alert.log der Datenbank wieder. Solange eine Datenbank einwandfrei funktioniert, sind die aufgezeichneten Informationen für den normalen Betrieb eher uninteressant, ausser vielleicht beim Housekeeping. Wenn allerdings doch mal im Zuge einer Analyse diese Informationen zum Beispiel vom Oracle Support angefordert werden, steht man nicht selten vor dem Problem alle relevanten Informationen zusammenzutragen. Dies bedeutet aber nicht selten einen immensen Zeitaufwand beim Zusammensuchen und Hochladen der Informationen. Genau hier setzt der Oracle Trace File Analyzer (TFA) an und automatisiert das Suchen und Verpacken aller relevanten Informationen.

Wer schon mit der Oracle Clusterware zu tun hatte, kennt den Vorgänger des Trace File Analyzer: Das Perl Skript "diagcollection.pl". Dieses Skript ist automatisch bei einer Grid Infrastuktur Installation enthalten und übernimmt eben genau die Aufgabe, alle Clusterinformationen zu sammeln und zu packen. Bei der Grid Infrastruktur war dies in der Vergangenheit auch immens wichtig, da die Anzahl der Loginformationen um etliches größer ist als bei einer Single Instanz Datenbank.

Hier ist dann auch gleich der größte Unterschied: TFA funktioniert für Single Instanz genauso wie für ein Cluster, und es sammelt eben nur die relevanten Informationen und nicht alle, wie das mit diagcollection.pl der Fall war. Damit sind die hochzuladenen Daten um ein Vielfaches geringer (10% gegenüber diagcollection oder einer manuellen Sammlung). Daher empfiehlt es sich auch schon ab 11.2.0.2 TFA zu installieren und zu verwenden, egal ob SI oder RAC.

Oracle Trace File Analyzer (TFA)

Eine weitere Neuerung gegenüber den bisherigen Methoden ist, dass TFA auch automatisch die relevanten Daten packetieren kann. Dies ist besonders wichtig, da immer mehr Oracle Logdateien rollierend sind und damit nach einiger Zeit überschrieben werden. Hat man also nicht darauf geachtet, gleich alle relevanten Informationen zu sichern, besteht die Gefahr das wichtigste Log nicht mehr zu besitzen. Daher kann TFA auch automatisch beim Auftreten eines sogenannten Incidents (wie diese auch im Umfeld vom Automatic Diagnostic Repository kurz ADRCI bekannt sind) angestartet werden und die Informationen sichern, damit auch später darauf zugegriffen werden kann.

Daneben bietet TFA noch einige weitere Funktionalitäten, wie Datenanonymisierung (zum Beispiel von Hostnamen) und eine Userverwaltung, damit etwa auch nicht root User auf die relevanten Systemlogdateien Zugriff haben.

Die Verwendung von TFA spart aber nicht nur Ihnen Zeit, sondern erweitert auch die Funktionalitäten für den Oracle Support: Denn Oracle hat bei Clustern so die Möglichkeit, die Informationen aller Clusterknoten parallel zu sichten und diese Logdateien selbst bei unterschiedlichen Zeitstempeln der Knoten richtig zu korrelieren. Einen kleinen Teil der Analysemöglichkeiten sehen Sie mit der "analyze" Funktion, die in der letzten Version des TFAs hinzugefügt wurde.

TFA Installation

Die Grid Infrastruktur 11.2.0.4 beinhaltet TFA bereits. TFA und muss nicht separat installiert werden.

In allen anderen Fällen wie zum Beispiel bei einer Single Instanz 11.2.0.4 oder selbst bei Grid Infrastruktur 12.1.0.1 kann TFA leicht nachinstalliert werden. Dabei empfiehlt es sich in diesen Fällen, TFA ausserhalb der Oracle Homes zu installieren, da es eben nicht mit der Oracle Datenbank beziehungsweise Grid Infrastruktur automatisch mit ausgeliefert wird und gegebenenfalls überschrieben werden könnte.

Die aktuelle Version von TFA findet man für alle gängigen Plattformen in folgender My Oracle Support Note:
TFA Collector - Tool for Enhanced Diagnostic Gathering (Doc ID 1513912.1). TFA ist im Moment leider noch nicht für Windows verfügbar.

Zur Installation wird einfach das heruntergeladene Zipfile entpackt und der enthaltene Installer vom Administrationsbenutzer "root" aufgerufen. Adminstrationsrechte sind notwendig, da TFA auf Systemlogfiles zugreifen muss, und TFA automatisch beim Systemstart gestartet wird. Man wird interaktiv durch die Installation geleitet und wählt für eine Single Instanz Umgebung einfach "lokale" Installation aus. Im Falle einer laufenden Grid Infrastruktur kann TFA gleich auf alle Knoten verteilt werden. Die getätigten Eingaben sind dabei rot gekennzeichnet. Als Java Umgebung nimmt man einfach die der Datenbank:

[root@sccloud005 tmp]# unzip TFALite_3202.zip
Archive:  TFALite_3202.zip
  inflating: installTFALite
  inflating: TFACollectorDocV3202.pdf

[root@sccloud005 tmp]# ./installTFALite

Starting TFA installation

Enter a location for installing TFA (/tfa will be appended if not supplied) [/tmp/tfa]: /u01/app
Enter a Java Home that contains Java 1.5 or later : /opt/oracle/product/11.2.0/dbhome_1/jdk

Running Auto Setup for TFA as user root...

Would you like to do a [L]ocal only or [C]lusterwide installation ? [L|l|C|c] [C] : L

Installing TFA now...

Discovering Nodes and Oracle resources

Checking whether CRS is up and running

List of nodes in cluster
1. sccloud005

Checking Status of Oracle Software Stack - Clusterware, ASM, RDBMS

. . . . . . . . .


TFA Will be Installed on sccloud005...

TFA will scan the following Directories
++++++++++++++++++++++++++++++++++++++++++++

.---------------------------------------------------------------.
|                           sccloud005                          |
+----------------------------------------------------+----------+
| Trace Directory                                    | Resource |
+----------------------------------------------------+----------+
| /opt/oracle/cfgtoollogs                            | CFGTOOLS |
| /opt/oracle/diag/rdbms/orcl/orcl/trace             | RDBMS    |
| /opt/oracle/diag/tnslsnr/sccloud005/listener/trace | TNS      |
| /opt/oracle/oraInventory/ContentsXML               | INSTALL  |
| /opt/oracle/oraInventory/logs                      | INSTALL  |
| /opt/oracle/product/11.2.0/dbhome_1/cfgtoollogs    | CFGTOOLS |
| /opt/oracle/product/11.2.0/dbhome_1/install        | INSTALL  |
'----------------------------------------------------+----------'

Installing TFA on sccloud005:
HOST: sccloud005        TFA_HOME: /u01/app/tfa/sccloud005/tfa_home

.--------------------------------------------------------------------------.
| Host       | Status of TFA | PID   | Port | Version | Build ID           |
+------------+---------------+-------+------+---------+--------------------+
| sccloud005 | RUNNING       | 30158 | 5000 | 3.2.0.2 | 320220140522043950 |
'------------+---------------+-------+------+---------+--------------------'

Running Inventory in All Nodes...

Enabling Access for Non-root Users on sccloud005...

Summary of TFA Installation:
.--------------------------------------------------------.
|                       sccloud005                       |
+---------------------+----------------------------------+
| Parameter           | Value                            |
+---------------------+----------------------------------+
| Install location    | /u01/app/tfa/sccloud005/tfa_home |
| Repository location | /u01/app/tfa/repository          |
| Repository usage    | 0 MB out of 1627 MB              |
'---------------------+----------------------------------'


TFA is successfully installed...
Die Installation auf einem Knoten geht sehr schnell und ist in deutlich unter 5 Minuten zu erledigen. Wie man bei der Installation feststellt, gibt TFA auch gleich an, in welchen Oracle Logverzeichnissen der Oracle Installationen TFA in Zukunft nach Tracedateien suchen wird. Selbstverständlich kann TFA auch "silent" installiert werden, die Details stehen ebenfalls in TFA Collector - Tool for Enhanced Diagnostic Gathering (Doc ID 1513912.1) bezwiehungsweise in dem darin verknüpften PDF Dokument "TFA User Guide".

TFA Administration

Der Oracle Trace File Analyzer lässt sich über tfactl (TFA Control) steuern. Gibt man dabei tfactl ohne Befehl ein, erhält man die Hilfe:

# /u01/app/tfa/bin/tfactl

Usage : /u01/app/tfa/bin/tfactl  [options]
 =
          start        Starts TFA
          stop         Stops TFA
          enable       Enable TFA Auto restart
          disable      Disable TFA Auto restart
          print        Print requested details
          access       Add or Remove or List TFA Users and Groups
          purge        Delete collections from TFA repository
          directory    Add or Remove or Modify directory in TFA
          host         Add or Remove host in TFA
          diagcollect  Collect logs from across nodes in cluster
          analyze      List events summary and search strings in alert logs.
          set          Turn ON/OFF or Modify various TFA features
          uninstall    Uninstall TFA from this node

For help with a command: /u01/app/tfa/bin/tfactl  -help
Die Befehle "start"/"stop"/"enable" und "disable" steuern dabei den Hintergrundagenten von TFA. Der Befehl "print" gibt über den aktuellen Status und die aktuelle Konfiguration Auskunft, die über die Befehle "host", "directory" und "set" verändert werden können. Hier sieht man dann auch, dass direkt nach der Installation die automatische Erzeugung eines Logdatei-Archives im Falle eines Incidents nicht aktiviert ist.
# /u01/app/tfa/bin/tfactl print config
.------------------------------------------------------.
|                      sccloud005                      |
+--------------------------------------------+---------+
| Configuration Parameter                    | Value   |
+--------------------------------------------+---------+
| TFA version                                | 3.2.0.2 |
| Automatic diagnostic collection            | OFF     |
| Trimming of files during diagcollection    | ON      |
| Repository current size (MB) in sccloud005 | 0       |
| Repository maximum size (MB) in sccloud005 | 1627    |
| Inventory Trace level                      | 1       |
| Collection Trace level                     | 1       |
| Scan Trace level                           | 1       |
| Other Trace level                          | 1       |
| Max Size of TFA Log (MB)                   | 50      |
| Max Number of TFA Logs                     | 10      |
'--------------------------------------------+---------'
Die Aktivierung der automatischen Generierung von Logdatei-Archiven würde dabei über den Befehl '/u01/app/tfa/bin/tfactl set autodiagcollect=ON' erfolgen.

Im Unterscheid zur Installation gibt der Befehl 'print directories' nun auch die Betriebssystemverzeichnisse an, in denen nach Logfiles gesucht wird und wer Berechtigungen hat, diese Logfiles zu sammeln.
# /u01/app/tfa/bin/tfactl print directories

.---------------------------------------------------------------------------.
|                                 sccloud005                                |
+------------------------------------+--------------+------------+----------+
| Trace Directory                    | Component    | Permission | Added By |
+------------------------------------+--------------+------------+----------+
...
+------------------------------------+--------------+------------+----------+
| /opt/oracle/diag/rdbms/orcl/orcl/t | RDBMS : orcl | public     | root     |
| race                               |              |            |          |
| Collection policy : Exclusions     |              |            |          |
+------------------------------------+--------------+------------+----------+
...
+------------------------------------+--------------+------------+----------+
| /var/log                           | OS           | public     | root     |
| Collection policy : Exclusions     |              |            |          |
+------------------------------------+--------------+------------+----------+
...
"Exclusions" gibt dabei an, ob in diesen Verzeichnissen und Logfiles mit Hilfe von Zeitstempeln nur Dateiausschnitte archiviert werden. Diese Informationen werden mit 'tfactl directories' verändert und erlauben so auch das Hinzufügen und Entfernen von Verzeichnissen, wobei der Default im Normalfall für Oracle Support am sinnvollsten ist. Wäre der OSWatcher auch auf dem System installiert, würden diese Verzeichnisse hier ebenfalls auftauchen.

Anmerkung: Nach der Installation von TFA hat erst einmal nur der Administrationsbenutzer 'root' die Berechtigungen die Logfiles zu sammeln. Da in einer standard Datenbank Umgebung aber eher der Benutzer oracle beziehungsweise grid derjenige ist, der Oracle Logfiles an den Support hochladen sollte, empfiehlt es sich, diese Benutzer für die TFA Benutzung freizuschalten. Dies geschieht unter der Verwendung des Befehls 'tfactl access' :
# /u01/app/tfa/bin/tfactl access add -user oracle

Sucessfully added 'oracle' to TFA Access list.

---------------------------------.
|            TFA Users            |
+-----------+-----------+---------+
| User Name | User Type | Status  |
+-----------+-----------+---------+
| oracle    | USER      | Allowed |
'-----------+-----------+---------'

Daten sammeln

Die Hauptaufgabe von TFA besteht darin, die wichtigen Log- und Trace-Dateien zu sammeln, zu filtern und zu packen. Dies geschieht manuell über den Befehl 'tfactl diagcollect' oder automatisch bei Auftreten eines Incidents, sofern konfiguriert. Wird der Befehl 'diagcollect' ohne Parameter aufgerufen, sammelt TFA nur die Daten der letzten 4 Stunden.

# /u01/app/tfa/bin/tfactl diagcollect

Collecting data for the last 4 hours for all components...
Collecting data for all nodes

Repository Location in sccloud005 : /u01/app/tfa/repository
2014/06/25 20:56:18 : Running an inventory clusterwide ...
2014/06/25 20:56:18 : Collection Name : tfa_Wed_Jun_25_22_56_14_CEST_2014.zip
2014/06/25 20:56:18 : Waiting for inventory to complete ...
2014/06/25 20:56:23 : Run inventory completed locally ...
2014/06/25 20:56:23 : Getting list of files satisfying time range [16:56:18 GMT, 20:56:23 GMT]
2014/06/25 20:56:23 : Collecting storage metrics...
2014/06/25 20:56:23 : sccloud005: Zipping File: /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_mmon_7622.trc
2014/06/25 20:56:23 : sccloud005: Zipping File: /opt/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
2014/06/25 20:56:23 : sccloud005: Zipping File: /var/log/messages
2014/06/25 20:56:23 : sccloud005: Zipping File: /opt/oracle/diag/tnslsnr/sccloud005/listener/trace/listener.log
2014/06/25 20:56:23 : sccloud005: Zipping File: /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbrm_7606.trc
2014/06/25 20:56:23 : Collecting ADR incident files...
2014/06/25 20:56:23 : Waiting for collection of extra files
2014/06/25 20:56:27 : Completed collection of extra files...
2014/06/25 20:56:28 : Completed Zipping of all files
2014/06/25 20:56:28 : Total Number of Files checked : 34
2014/06/25 20:56:28 : Total Size of all Files Checked : 512kB
2014/06/25 20:56:28 : Number of files containing required range : 5
2014/06/25 20:56:28 : Total Size of Files containing required range : 295kB
2014/06/25 20:56:28 : Number of files trimmed : 0
2014/06/25 20:56:28 : Total Size of data prior to zip : 352kB
2014/06/25 20:56:28 : Saved 0kB by trimming files
2014/06/25 20:56:28 : Zip file size : 41kB
2014/06/25 20:56:28 : Total time taken : 10s
2014/06/25 20:56:28 : Completed collection of zip files on local node.

Logs are being collected to:
/u01/app/tfa/repository/collection_Wed_Jun_25_22_56_14_CEST_2014_node_all/
sccloud005.tfa_Wed_Jun_25_22_56_14_CEST_2014.zip

Collection may still be processing  : use 'tfactl print actions' to confirm completion.
Dies kann natürlich auf bestimmte Logdateien und ein bestimmtes Zeitinterwall beschränkt werden:
# ./tfactl diagcollect -h

Options:
  -all       Collect all logs (If no time is given for collection then files
             for the last 4 hours will be collected)
  -crs       Collect CRS logs
  -dbwlm     Collect DBWLM logs
  -acfs      Collect ACFS logs
  -asm       Collect ASM logs
  -database  Collect database logs from databases specified
  -os        Collect OS files such as /var/log/messages
  -install   Collect Oracle Installation related files
  -cfgtools  Collect CFGTOOLS logs
  -chmos     Collect CHMOS files (Note that this data can be large for
             longer durations)
  -nochmos   Do not collect CHMOS data when it would normally have been
             collected
  -sundiag   Collect sundiag logs
  -node      Specify comma separated list of host names for collection
  -nocopy    Does not copy back the zip files to initiating node from all nodes
  -notrim   Does not trim the files collected
  -nomonitor This option is used to submit the diagcollection as a background
             process
  -collectalldirs Collect all files from a directory marked "Collect All"
                  flag to true
  -collectdir Specify comma separated list of directories and collection will
              include all files from these irrespective of type and time constraints
              in addition to components specified

  -since     Files from past 'n' [d]ays or 'n' [h]ours
  -from "MMM/dd/yyyy hh:mm:ss"    From 
Das Sammeln der Daten kann bei einem Cluster länger dauern, da hier auf die Daten der anderen Knoten gewartet werden muss. Daher auch die Empfehlung, den aktuellen Status des Jobs mit dem Befehl 'print actions' abzufragen. Hierüber erfährt man auch den Dateinamen und das Verzeichnis, sofern dies nicht explizit angegeben war.
]# /u01/app/tfa/bin/tfactl print actions
.-------------------------------------------------------------------------------------------------------------.
| HOST       | START TIME      | END TIME        | ACTION         | STATUS              | COMMENTS            |
+------------+-----------------+-----------------+----------------+---------------------+---------------------+
| sccloud005 | Jun 25 20:56:18 | Jun 25 20:56:18 | Run inventory  | COMPLETE            | -c:RDBMS            |
|            |                 |                 |                |                     | all:ASM:CRS:DBWLM:A |
|            |                 |                 |                |                     | CFS:OS:INSTALL:CFGT |
|            |                 |                 |                |                     | OOLS:TNS:CHMOS      |
+------------+-----------------+-----------------+----------------+---------------------+---------------------+
| sccloud005 | Jun 25 20:56:18 | Jun 25 20:56:28 | Collect traces | COMPLETE            | Collection details: |
|            |                 |                 | & zip          |                     |                     |
|            |                 |                 |                | Zip file:           |                     |
|            |                 |                 |                | tfa_Wed_Jun_25_22_5 |                     |
|            |                 |                 |                | 6_14_CEST_2014.zip  |                     |
|            |                 |                 |                | Tag:                |                     |
|            |                 |                 |                | collection_Wed_Jun_ |                     |
|            |                 |                 |                | 25_22_56_14_CEST_20 |                     |
|            |                 |                 |                | 14_node_all         |                     |
'------------+-----------------+-----------------+----------------+---------------------+---------------------'
Im Zipfile sollten alle zur Verfügung stehenden Informationen für den Oracle Support vorhanden sein, und es reicht, dieses an einen SR hochzuladen. Einzig zusätzliche noch nicht vorhandene Logdateien (wie zum Beispiel durch die zusätzliche Installation von OSWatcher oder ein höheres Tracing) sind darin nicht enthalten. Ein Nachfordern bestimmer Logfiles sollte damit viel seltener notwendig sein.

TFA weitere Funktionalitäten

Ein paar weiterführende Funktionalitäten von TFA sollten noch erwähnt werden:

  • Housekeeping
  • Eine sehr wichtige Funktion ist das Housekeeping der erzeugten Archive. Gerade wenn TFA automatisch Archive auf Basis von Incidents erzeugt, sollte der Füllgrad des Repository Verzeichnisses im Auge behalten werden und unter gegebenen Umständen die alten Archive gelöscht werden. Dies kann mit Hilfe des Befehls 'purge' unter Angabe eines Zeitraumes geschehen. Hierdurch werden die älteren Archive gelöscht.
    # ./tfactl purge -h                                                                                                                                                     
    Usage: /u01/app/oracle/tfa/bin/tfactl purge -older x[h|d]
    
       Remove file(s) from repository that are older than the time specified.
    


  • Datenanonymisierung
  • Eine weitere interessannte Konfiguration ist die Möglichkeit, Daten mit TFA zu maskieren, so dass Hostnamen oder Instanznamen verändert werden. Hierzu wird einfach im Verzeichnis in <hostname>/tfa_home/resource (/u01/app/tfa/sccloud005/tfa_home/resources) eine Datei mask_strings.xml erzeugt.
    <mask_strings>
      <mask_string>
            <original>sccloud005</original>
            <replacement>Node1</replacement>
      </mask_string>
      <mask_string>
            <original>10.165.244.154</original>
            <replacement>XX.XX.XX.154</replacement>
      </mask_string>
    </mask_strings>
    
    Damit das Masking greift, muss TFA mit dem Befehl 'tfactl stop' und 'tfactl start' neu gestartet werden! Dies sorgt nun dafür, dass sowohl der erzeugte Archivname als auch in den Logfiles die entsprechenden Zeichenfolgen durch die Alternativen ersetzt werden.

  • Einfache Analysefunktionen
  • Leider ist die Analysefunktion in der momentan verfügbaren Version 3.2.0 noch fehlerhaft und erst mit dem Release 12.1.0.2 verfügbar, welches dann auch mit dem 12.1.0.2 Patch ausgeliefert wird. Funktioniert diese, kann TFA alle Logfiles nach Fehlern durchsuchen. Wer wollte nicht schon immer eine Übersicht über alle ORA- Fehlermeldungen in allen Logdateien aller Datenbankknoten in den letzten 2 Tagen? Aber auch eine Suche nach generischen Zeichenfolgen, generellen 'Errors' bzw. 'Warnings' sind damit möglich.
    # /u01/app/tfa/bin/tfactl  analyze -comp db -type error -since 1d
    INFO: analyzing db (DB Alert Logs) logs for the last 1440 minutes...  Please wait...
    INFO: analyzing host: sccloud005
    
                          Report title: DB Alert Logs
                     Report date range: last ~1 day(s)
            Report (default) time zone: CET - Central European Time
                   Analysis started at: 26-Jun-2014 10:47:54 AM CEST
                 Elapsed analysis time: 0 second(s).
                    Configuration file: /u01/app/tfa/sccloud005/tfa_home/ext/tnt/conf/tnt.prop
                   Configuration group: db
                   Total message count:            111, from 25-Jun-2014 02:31:47 PM CEST to 26-Jun-2014 04:44:25 AM
      Messages matching last ~1 day(s):            111, from 25-Jun-2014 02:31:47 PM CEST to 26-Jun-2014 04:44:25 AM
            last ~1 day(s) error count:              1, from 26-Jun-2014 12:18:50 AM CEST to 26-Jun-2014 12:18:50 AM
    last ~1 day(s) ignored error count:              0
     last ~1 day(s) unique error count:              1
    
    Message types for last ~1 day(s)
       Occurrences percent  server name          type
       ----------- -------  -------------------- -----
               110   99.1%  sccloud005           generic
                 1    0.9%  sccloud005           ERROR
       ----------- -------
               111  100.0%
    
    Unique error messages for last ~1 day(s)
       Occurrences percent  server name          error
       ----------- -------  -------------------- -----
                 1  100.0%  sccloud005           GEN0 (ospid: 7602): terminating the instance due to error 472
                                                 Dumping diagnostic data, summary=[abnormal instance termination].
                                                 Instance terminated by GEN0, pid = 7602
    
       ----------- -------
                 1  100.0%
    
    Die Details über den kompletten Funktionsumfang sind im TFA User Guide enthalten. Neu mit 12.1.0.2 ist auch die Integration von oratop in den TFA. Hierzu mehr im nächsten Tipp.

Fazit

Nützliche Links und Referenzen

  • TFA Collector - Tool for Enhanced Diagnostic Gathering (Doc ID 1513912.1)
  • Housekeeping 11gR2 RAC
  • RAC and DB Support Tools Bundle (Doc ID 1594347.1)
  • Zurück zur Community-Seite