X

Technologie - Trends - Tipps&Tricks
in deutscher Sprache

Was geht ab? SQL*Net Tracing, erste Schritte bei der Fehlersuche.

Marcus Schroeder
Master Principal Sales Consultant

Man kann es nicht of genug betonen: Wenn der SQL Client sich nicht gegen die Datenbank verbinden kann, ist man oft geneigt den "Trial and Error" Ansatz zu fahren. Es werden willkürlich Parameter verändert, Umgebungsvariablen gesetzt und die tnsnames.ora, sqlnet.ora oder ähnliche Konfigurationsdateien editiert. Die strukturierte Lösung ist dagegen das Verwenden der Trace-Funktionalität des Oracle Server/Clients.

Ich selbst habe vor kurzem eine ähnliche Erfahrung machen müssen. Bei einer Kerberos-Authentifizierungs-Konfiguration funktionierte nichts, weder konnte der Client eine Verbindung zur Datenbank aufbauen, noch konnte ich mit den üblichen Methoden eine Fehlerursache finden. Die ausgegebenen Fehlermeldungen brachten mich nicht weiter. Nach Aktivierung des SQL*Net -Tracing auf der Server-Seite, konnte ich zwar Fehlermeldungen sehen, jedoch waren diese nicht hilfreich auch nach längerer Ursachen Recherche. Dann versuchte ich das SQL*Net -Tracing des Clients zu aktivieren, doch leider geht beim schnellen Ausprobieren und das damit verbundene Doku-Lesen wertvolle Zeit verloren, bis ich die richtige und minimale Kombination von Konfigurations-Parametern gefunden habe, die das gewünschte Trace-File an die gewünschte Stelle schreibt.

Deshalb stellt dieser Artikel die grundlegenden, minimalen Parameter dar und erklärt, wie man sowohl mit den Instant-Client, wie auch dem Oracle Client das Tracing aktivieren kann. Der erfahrene DBA wird natürlich nur müde lächeln, alle aufgeführten Parameter kann er im Schlaf. Daher richtet sich dieser Artikel an den Oracle DB Nutzer, der diese Funktion eher selten verwendet und nicht etliche Seiten Dokumentation wälzen möchte.

Am Ende ermöglichten mir die Tracing-Informationen den Fehler zu beheben und die Ursache klar auszumachen. Denn es muss nicht immer ein Fehler der Oracle Konfigurationen sein, es ist auch möglich das auf Betriebssystem-Ebene nicht ausreichende Rechte vorhanden sind, eine Umgebungsvariable fehlt oder Dateien nicht lesbar sind. Dies alles sieht man nur, wenn man das SQL*Net -Tracing des Clients aktiviert und eine ausreichende Tracing-Tiefe (Tracing Level) einstellt. Die aufgeführten Parameter gelten ab der Oracle DB Version 11g.

SQL*Net -Tracing in der Datenbank

Dieses Thema dürften den meisten bekannt sein, in der sqlnet.ora werden einige Parameter gesetzt und schon erhält man ein Bild, was beim Datenbank-Server nicht richtig läuft. Allerdings bekommt man wenig Informationen über den SQL Client, selbst wenn er auf der gleichen Maschine läuft, wie der Datenbank-Server. Der Vollständigkeit halber werde ich die Konfiguration des SQL*Net -Tracing für Datenbanken aufführen. In der aktiven sqlnet.ora fügt man folgende Parameter hinzu:

TRACE_LEVEL_SERVER = SUPPORT

TRACE_DIRECTORY_SERVER = /tmp/db_server_trace

Diese beiden Befehle reichen, um ein SQL*Net Server Tracefile zu erzeugen. Allerdings wird es nicht in das Verzeichnis /tmp/db_server_trace geschrieben, dazu benötigt man einen zusätzlichen Parameter:

DIAG_ADR_ENABLED = OFF

Wenn der Parameter DIAG_ADR_ENABLED auf OFF gesetzt ist, wird ein Nicht-ADR- Tracing verwendet. Für eine schnelle Ursachen-Analyse empfehle ich die Verwendung eines eigens dafür angelegten Verzeichnisses und die Nutzung des ADR_BASE=OFF Parameters.

Zusammenfassend wird man mit den folgenden drei Parametern in der sqlnet.ora ein aussagekräftiges Trace File im gewünschten Verzeichnis bekommen:

DIAG_ADR_ENABLED = OFF

TRACE_LEVEL_SERVER = SUPPORT

TRACE_DIRECTORY_SERVER = /tmp/db_server_trace

Durch Auskommentieren oder Setzen von TRACE_LEVEL_SERVER = OFF wird das Tracing ausgeschaltet. Allerdings sollte man dann auch den Parameter DIAG_ADR_ENABLED = ON setzen, sonst werden alle ADR Dateien in das TRACE_DIRECTORY_SERVER Verzeichnis geschrieben. Wenn man herausfinden möchte welches Verzeichnis das Default-Verzeichnis für die ADR und Trace Files sind kann man das mit folgender SQL-Query:

SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

Hinweis: Bei den Oracle Cloud Datenbanken funktioniert das beschriebene Vorgehen natürlich auch. Ausnahme: Alle Oracle Datenbank-Service auf denen man nicht Zugriff auf die Konfigurations-Dateien hat. Zum Beispiel bei der Autonomous Database kann das Server Tracing nicht aktiviert werden.

SQL*Net -Tracing im Client

Der Client verhält sich im Prinzip nicht anders, ob es sich dabei um einen SQL*Plus Full Client oder den Oracle Instant Client handelt. An dieser Stelle noch kurz ein Anmerkung zum Thema Oracle Instant Client. Wenn man schnell eine Verbindung zu einer Oracle Datenbank aufbauen möchte oder nur bestimmte Funktionen braucht (zum Beispiel SQL*Plus) kann man eigentlich immer den Instant Client verwenden Der Instant Client hat einen wesentlich geringeren Installations-Footprint. Man benötigt keinen Installer, denn der Instant Client wird als ZIP-Datei oder Linux-RPM ausgeliefert. Daher gibt es momentan nur wenige Gründe einen Full Client zu verwenden. Ausserdem benötigt der Instant Client nur die TNS_ADMIN-Umgebungs-Variable (ausser bei Windows) das macht das Handling wesentlich einfacher.

Das Aktiveren des Tracing im Instant Client erfolgt ähnlich wie beim Datenbank Server. In der sqlnet.ora werden folgende Parameter gesetzt

DIAG_ADR_ENABLED = OFF

# ADR_BASE = OFF

TRACE_LEVEL_CLIENT = SUPPORT

TRACE_DIRECTORY_CLIENT = /tmp/db_client_trace

Setzt man den DIAG_ADR_ENABLED = OFF Parameter nicht, werden die Traces in das $TNS_ADMIN Verzeichnis geschrieben bzw. es kann auch vorkommen, das kein Trace-File geschrieben wird.

Übrigens: Das funktioniert auch mit der undokumentierten Parameter-Einstellung ADR_BASE = OFF.

Bei SQL*Plus im Full Client verhält es sich genauso wie beim Instant Client. Wer sich nun für das Thema Tracing erwärmt hat und mehr erfahren möchte kann sich unter folgenden Link weitere Informationen besorgen.

Fazit

Das Tracing für Oracle Datenbank Server und Clients stellt eine hervorragende Möglichkeit dar, nach Fehlerursachen zu suchen. Für Nicht-Geübte ist es allerdings schwer die richtigen Parameter zu setzen und zu verstehen, daher werden die Fehler oft nach der "Trial and Error" Methode gesucht. Ich hoffe dieser Artikel ermöglicht den Leser ohne "Doku-Wälzen" schnell den Trace-Modus einzuschalten und sich der drei Parameter stets zu erinnern...

 

 

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.