29
TNSNAMES.ORA beherrschen TNSNAMES.ORA beherrschen Michael A. Istinger EDV-Beratung Istinger

TNSNAMES.ORA beherrschen - doag.org · Beispiele von TNSNAMES.ORA Dateien reichen mir nicht aus, um Aussagen über Stabilität und Robustheit von NETCHECK zu machen. Sollten Sie Interesse

  • Upload
    buidang

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

TNSNAMES.ORA beherrschenTNSNAMES.ORA beherrschen

Michael A. Istinger

EDV-Beratung Istinger

Gestatten Sie, dass ich mich Gestatten Sie, dass ich mich vorstelle:vorstelle:

– Name: Michael A. Istinger

– Firma: EDV-Beratung Istinger

– In der IT-Branche tätig seit 1977

– Erste bewusst erlebte Oracle-Version: 5.1.22

– Ein „klassischer“ freiberuflicher Oracle-Berater

– Ich biete Dienstleistungen im Datenbank-Umfeld an

� Datenbank-Design, Datenbank-Implementierung, Design Reviews, PL/SQL-Entwicklung, Performance-Tunings, Datenbank-Administration…

– Enge Zusammenarbeit mit Herrmann & Lenz Services GmbH

AgendaAgenda

� Warum dieser Vortrag?

� Struktur TNSNAMES.ORA

� Probleme – ein Beispiel aus der Praxis

� Lessons learned

� Tools zur Bearbeitung von TNSNAMES.ORA

� Scripts zur Bearbeitung von TNSNAMES.ORA

� Mögliche Vorgehensweise bei Problemen

� NETCHECK – ein geplantes Analysetool.

Warum dieser Vortrag?Warum dieser Vortrag?

� Die TNSNAMES.ORA ist eine der ältesten Mechanismen zur Auflösung von Net Service Names und damit bei vielen Installationen ein unverzichtbares Hilfsmittel zum Zugriff auf nicht-lokale Datenbanken.

� In der Praxis gibt es immer wieder Probleme bei Modifikationen an dieser Datei.

� Ich möchte hier aufzeigen, wodurch solche Probleme entstehen, und welche Vorgehensweisen es zur Analyse dieser Probleme gibt.

Struktur TNSNAMES.ORA (1)Struktur TNSNAMES.ORA (1)

� Prinzipieller Aufbau eines TNSNAMES.ORA Eintrags:net_service_name= (DESCRIPTION= (ADDRESS=(protocol_address_information))(CONNECT_DATA=

(SERVICE_NAME=service_name)))

� Nur der net_service_name darf auf Spalte 1 beginnen

� Zeilen, in denen in Spalte 1 ein Blank steht, werden als logische Folgezeilen der vorhergehenden Zeile interpretiert.

� Der Connect-Descriptor besteht aus einer Folge von Angaben der Form: PARAMETER=VALUE

� Verschachtelte Angaben sind möglich:(ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=1630))

Struktur TNSNAMES.ORA (2)Struktur TNSNAMES.ORA (2)

� Nur eingeschränkter Zeichensatz in TNSNAMES.ORA zulässig

– A-Z a -z

– 0-9

– ( ) < > / \

– , . : ; ' "=- _

– $ + * # & ! % ? @

– <Space> <Tab> <Carriage Return> <Newline>

Auftretende ProblemeAuftretende Probleme

� Syntaxfehler werden oft nicht an der Stelle erkannt, an der der Fehler liegt– fehlende schliessende Klammer

� Net Service Name beginnt nicht in Spalte 1

� Ein Teil eines Connect-Descriptors beginnt in Spalte 1.

� Ungültige Zeichen in TNSNAMES.ORA lösen schwer erklärbare Effekte aus.

Ein Problem aus der Praxis (1)Ein Problem aus der Praxis (1)

� Datenbank-Server Linux (Red Hat)

� Oracle 10gR2 Datenbank

� TNSNAMES.ORA wurde über Windows XP „Zwischenstation“ auf dem Server installiert

� Merkwürdige Phänomene bei Zugriff auf remote liegende Datenbanken:sqlplus a/b@biums

SQL*Plus: Release 10.2.0.3.0 - Production on Fr Nov 16 14:02:14 2007

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

ERROR: ORA-12169: TNS: Der als Connect Identifier angegebene Net Service Name ist zu lang

Ein Problem aus der Praxis (2)Ein Problem aus der Praxis (2)

� Der entsprechende TNSNAMES.ORA Eintrag lautet:BIUMS =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = anonzitevip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = anonzitfvip)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA = ... )

)

� Der Net Service Name ist sicher nicht länger als 255 Zeichen

Ein Problem aus der Praxis (3)Ein Problem aus der Praxis (3)

� Ergebnis von tnsping BIUMS...

Adapter TNSNAMES zur Auflösung des Alias benutzt

)DELAY = 5)180))BIUMS) TCP)(HOST = anonzitfvip)(PORT = 1521))

TNS-12545: CONNECT nicht erfolgreich, da Ziel-Host oder -Objekt nicht vorhanden

� Andere Fehlermeldung wegen Test im eigenen Netzwerk.� Interessant: „Verstümmelte“ Anzeige des Connect-

Descriptors.

Ein Beispiel aus der Praxis (4)Ein Beispiel aus der Praxis (4)

� Metalink-Suche liefert in Dokument 361843.1 Hinweis auf Carriage-Returns in TNSNAMES.ORA.

� Das wirkt glaubhaft, da die Datei von einer Windows XP Workstation übertragen wurde.

� Versuch diese störenden CR's mittels vi zu löschen liefert:

Ein Beispiel aus der Praxis (5)Ein Beispiel aus der Praxis (5)

� Untersuchung mittels od zeigt

Ein Problem aus der Praxis (6)Ein Problem aus der Praxis (6)

� vi versucht seit einigen Versionen einen „intelligenten“Ansatz zur Behandlung von Zeilenenden.

� Deshalb erkennt vi die <carriage returns> nicht mehr, da sie für den Editor Teil des Zeilenendes geworden sind.

� Utilities, mit denen wir seit mehr als 20 Jahren arbeiten, können bei neuen Versionen ihr Verhalten in unvorhersehbarer Weise ändern.

� Lösung des beschriebenen Problems: Die <carriage returns> wurden mit sed entfernt:sed --in-place 's/^M//' tnsnames.ora

Lessions learnedLessions learned

� Vorsicht beim Transport von TNSNAMES.ORA Dateien zwischen unterschiedlichen Betriebssystemen. Der Transfer sollte nie binär erfolgen wegen unterschiedlicher Zeilenende-Behandlung

� Metalink hat sich auch in diesem Fall als exzellente Sammlung von Dokumenten zu unterschiedlichsten Probemfällen bewiesen.

� Leider war in diesem Fall eine vorgeschlagene Vorgehensweise nicht zielführend, da sich das Verhalten des verwendeten Tools geändert hat.

� Es müssen immer ALLE Hinweise berücksichtigt werden (tnsping-Ausgabe!)

Tools zur Bearbeitung von Tools zur Bearbeitung von TNSNAMES.ORA (1)TNSNAMES.ORA (1)

� Mir sind keine kommerziell erhältlichen Tools zur Bearbeitung von TNSNAMES.ORA bekannt.

� Meistens werden solche Funktionalitäten im Rahmen von umfangreicheren, kommerziell erhältlichen Tools mit angeboten:– netmgr von Oracle– TNSNAMES Editor ist Bestandteil von TOAD für

Oracle der Firma Quest.

� Ich möchte hier untersuchen, ob – und wie gut – diese Tools zur Analyse von Problemen in TNSNAMES.ORA verwendet werden können.

Tools zur Bearbeitung von Tools zur Bearbeitung von TNSNAMES.ORA (2)TNSNAMES.ORA (2)

� <cr>'s stören nicht und werden beim Spei-chern von netmgr ent-fernt.

� Problem: net service name nicht in Spalte 1

� Problem: Connect Descriptor in Spalte 1

Tools zur Bearbeitung von Tools zur Bearbeitung von TNSNAMES.ORA (3)TNSNAMES.ORA (3)

� Tool arbeitet nur am Client.

� Deshalb <cr>-Problem nicht feststellbar

� net service names müssen nicht in Spalte 1 beginnen.

� Problem: Connect-Descriptor in Spalte 1.

Tools zum Bearbeiten von Tools zum Bearbeiten von TNSNAMES.ORA (4)TNSNAMES.ORA (4)

� Sowohl der NetMgr als auch der TNSNAMES Editor in TOAD sind leistungsfähige Tools zur Erstellung/Wartung der TNSNAMES.ORA

� Die Anwendungsbereiche sind unterschiedlich (NetMgr sowohl am Server als auch am Client, TNSNAMES Editor nur am Client).

� Keines der beiden Tools ist wirklich dazu geeignet um Probleme in TNSNAMES.ORA zu analysieren:– manchmal zu laxe Prüfung (TNSNAMES Editor)– Syntax-Fehler führen bei beiden Tools häufig zu

schweren Funktionsfehlern.

Skripts zum Bearbeiten von Skripts zum Bearbeiten von TNSNAMES.ORA (1)TNSNAMES.ORA (1)

� Es muss nicht immer ein großes Tool mit graphischer Oberfläche sein!

� Die hier vorgestellten kleinen Skripte wurden unter Linux entwickelt und getestet.

� Unter Windows können diese Skripte eingesetzt werden, wenn Zusatzsoftware wie z.B. cygwin (www.cygwin.com) installiert wurde.

Skripte zum Bearbeiten von Skripte zum Bearbeiten von TNSNAMES.ORA (2)TNSNAMES.ORA (2)

� Beispiel: Das folgende „Skript“ liefert alle net service namen, die in einer TNSNAMES.ORA enthalten sind:awk '/^[A-Za-z0-9]/ {i = index($0, "="); print substr($0,1,i-1);}' $TNSNAMES

� Die Ausgabe dieses Skripts kann bei Fehlersuche sehr hilfreich sein:– Was ist der letzte richtig reportete net service

name?– Fehlen net service names, die erwartet werden?

Skripte zum Bearbeiten von Skripte zum Bearbeiten von TNSNAMES.ORA (3)TNSNAMES.ORA (3)

� TNSNAMES.ORA kann häufig verwendet werden, um Code zu erzeugen, der „für alle definierten Net Service Names“ verwendet werden soll:– Erzeugen von Datenbank-Links auf alle Datenbanken,

für die Net Service Names definiert sind– Erzeugen von Connection-Informationen für

SqlDeveloper für alle definierten Net Service Names.

� Die genannten Skripte können Sie bei Interesse von mir erhalten. Allerdings ohne jede Gewähr!

MMöögliche Vorgehensweise bei gliche Vorgehensweise bei Problemen (1)Problemen (1)

� Bei Problemanalysen mit Low-Level Utilities beginnen

� tnsping

� Alle Ausgaben der Utilities genau analysieren. Selbst kleinste Details können wichtige Hinweise enthalten.

� Sollten tnsping-Ausgaben nicht verständlich sein, kann es helfen, für tnsping ein Tracing einzuschalten. Setzen Sie dazu die folgenden Parameter in SQLNET.ORA:

– TNSPING.TRACE_LEVEL

– TNSPING.TRACE_DIRECTORY

MMöögliche Vorgehensweise bei gliche Vorgehensweise bei

Problemen (2)Problemen (2)

� Beachten Sie, dass oft der Text der Fehlermeldung viel

darüber aussagt, wo die Fehlerursache zu suchen sein

könnte:

� ORA-12169: TNS: Der als Connect Identifier angegebene Net Service Name ist zu lang

– Dieser Fehler hat sicher mit dem Inhalt der TNSNAMES.ORA zu tun.

� ORA-12705: invalid or unknown NLS parameter value specified

– Diese Fehlermeldung bezieht sich fast immer auf den Server!

NETCHECK NETCHECK –– ein Analysetool im ein Analysetool im Entstehen (1)Entstehen (1)

� Ich kenne kein einziges Tool, dass verlässlich alle Probleme, die in TNSNAMES.ORA auftreten können, sinnvoll reporten kann.

� Ich arbeite privat an einem Tool (Codename NETCHECK), das genau diese Analysen vornehmen soll.

� Das Tool wird nie kommerziell verwendet werden. Wenn es Produktionsreife erreicht hat, so werde ich das Tool über die DOAG kostenlos (und ohne Gewährleistung) zur Verfügung stellen

NETCHECK NETCHECK –– Ein Analysetool im Ein Analysetool im Entstehen (2)Entstehen (2)

� Geplant ist ein reines Kommandozeilen-Tool.

� Sowohl syntaktische als auch semantische Überprüfung der TNSNAMES.ORA.

� Robustes Tool, das auch bei schwerwiegenden Fehlern in der TNSNAMES.ORA vernünftig reagiert.

� Fehler sollen so nahe wie möglich an der Stelle, an der sie auftreten, gemeldet werden

� Fehlermeldungen sollen so klar wie möglich sein, um es auch weniger geschulten Personal zu ermöglichen, gefundene Probleme mit vertretbarem Aufwand zu beheben.

NETCHECK NETCHECK –– Ein Analysetool im Ein Analysetool im Entstehen (3)Entstehen (3)

� Derzeit ist das Tool definitiv pre-alpha.

� Vor allem semantische Analysen sind noch nicht wirklich gelöst:– Änderung der Semantik zwischen Oracle-Releases

� Ich benötige dringend Testmaterialien. Die mir vorliegenden Beispiele von TNSNAMES.ORA Dateien reichen mir nicht aus, um Aussagen über Stabilität und Robustheit von NETCHECK zu machen.

� Sollten Sie Interesse an der Idee von NETCHECK haben, wäre ich Ihnen dankbar, wenn Sie mir Kopien Ihrer TNSNAMES.ORA Dateien zukommen lassen könnten.

NETCHECK NETCHECK –– Ein Analysetool Ein Analysetool im Entstehen (4)im Entstehen (4)

� Ich werde solche mir zugesendeten TNSNAMES.ORA Dateien selbstverständlich vertraulich und ausschliesslich zu Tests von NETCHECK verwenden.

� Mir zugesendete TNSNAMES.ORA Dateien werden prinzipiell anonymisiert (anonymisierte Hostnamen).

� Selbstverständlich können Sie mir auch bereits von Ihnen selbst anonymisierte TNSNAMES.ORA Dateien zusenden.

� Die Dateien müssen auch nicht fehlerfrei sein. TNSNAMES.ORA Dateien mit „exotischen“ Fehlern helfen mir sehr bei der Beurteilung des Reifezustands von NETCHECK.

NETCHECK NETCHECK –– ein Analysetool ein Analysetool im Entstehen (5)im Entstehen (5)

� Sollten Sie mir Beispiel-Dateien zusenden wollen/können/dürfen, so bitte an die Email-Adresse

[email protected]

Zum AbschlussZum Abschluss

� Ich hoffe, ich konnte Ihnen hier einige nützliche Informationen zum Umgang mit TNSNAMES.ORA liefern.

� Es würde mich freuen, wenn die eine oder andere der hier gezeigten Ideen Ihre Arbeit in Zukunft erleichtern könnte.