News
DBA-Tipp: Easy Connect - Auf kurzem Weg zur Datenbank

Die Information ist ein schnelllebiges Gut. Jeden Tag werden wir mit hunderten Informationen zugemüllt. Deshalb sind wir bestrebt uns auf das Wesentliche zu konzentrieren und nur substantiell nachhaltige Informationen bereitzustellen.

Icon Unternehmen

Die wahrscheinlich gebräuchlichste und sicherlich nicht nur für DBAs bekannte Methode zur Namensauflösung für Datenbankverbindungen dürfte das „Local Naming“, also die Verwendung einer tnsnames.ora sein.

Für ad hoc Zugriffe auf Datenbanken, für die sich der Aufwand zur Einrichtung einer tnsnames.ora nicht lohnt, bietet sich hingegen „Easy Connect“ an. Hier erfolgt die Beschreibung der Verbindung im Stile eines URL. Das Verfahren ist ab Client Version 10g verfügbar.

Konfiguration

Die Konfiguration der unterstützten Namensauflösungsverfahren erfolgt in der

sqlnet.ora

des Clients mit dem Parameter

NAMES.DIRECTORY_PATH

Ab Version 11g ist Easy Connect per default erlaubt, in Version 10g musste Easy Connect noch explizit in den DIRECTORY_PATH aufgenommen werden. Das heißt, sofern der Wert EZCONNECT

  • im NAMES.DIRECTORY_PATH-Parameter enthalten ist oder
  • bei Clients ab Version 11g der NAMES.DIRECTORY_PATH nicht angegeben ist,

kann Easy Connect genutzt werden.

Syntax

Wie bereits erwähnt, arbeitet Easy Connect mit einer URL-ähnlichen Syntax, die laut Dokumentation folgendermaßen aussieht:

username@[//]host[:port][/[service_name][:server]][/instance_name]]

wobei die einzelnen Komponenten folgende Bedeutung haben:

usernameName des Datenbankaccounts
hostListener-Adresse
portListener-Port (default: 1521)
service_nameDatenbank-Servicename
serverConnectionmode (DEDICATED|SHARED|POOLED)
instance_nameDatenbank-Instanzname

Wenngleich sich obige Syntax hartnäckig über die letzten Releases in der Oracle Dokumentation gehalten hat, habe ich berechtigte Zweifel daran, dass sie korrekt ist. So gelingt es scheinbar in keiner der in den Manuals angegebenen Varianten, eine Easy Connect Verbindung ohne Angabe des Passwortes direkt im Connectstring aufzubauen. Selbst die dort angeführten Beispiele schlagen fehl. Auch das Weglassen des service_name ist nur erfolgreich, wenn in der listener.ora des Servers der DEFAULT_SERVICE_...-Parameter gesetzt ist; und auch dann nur, wenn im Connectstring die Portnummer des Listeners explizit angegeben ist, selbst wenn sie 1521 wäre.

Abgesehen davon ist bereits die Klammerung in ihrer Anzahl fehlerhaft, da eine schließende Klammer zu viel angegeben ist.

Tatsächlich kann man wohl davon ausgehen, dass folgende Syntax erfolgversprechender ist:

username/password@host[:port]/[service_name[:server][/instance_name]]

Weil davon auszugehen ist, dass das Passwort im Connectstring enthalten sein muss, verbietet es sich aus Sicherheitsgründen natürlich, diesen Connectstring direkt an der Console zu benutzen. Anstelle

sqlplus system/oracle@dbserver/orcl

verwendet man besser

sqlplus /nolog
connect system/oracle@dbserver/orcl

Beispiele

Nun zu einigen Beispielen, die die Bedeutung verschiedener Easy Connect Strings anhand des korrespondierenden tnsnames.ora-Eintrages verdeutlichen sollen:

Verbindung auf den Server „dbserver“, Port 1521, Datenbankservice orcl

connect system/oracle@dbserver/orcl

   BELIEBIG =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 52162))
       (CONNECT_DATA =
         (SERVICE_NAME = orclXDB)
         (SERVER = SHARED)
       )
     )

Anforderung einer SHARED-Server-Verbindung auf Server „dbserver“, Dispatcher-Port 52162, Datenbankservice orclXDB

connect system/oracle@dbserver:52162/orclXDB:shared

   BELIEBIG =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 52162))
       (CONNECT_DATA =
         (SERVICE_NAME = orclXDB)
         (SERVER = SHARED)
       )
     )

Verbindung auf eine RAC-Datenbank über den SCAN-Listener (SCAN-Name „cluster-scan“, Defaultport 1521), Ansprechen der Instanz orcl1 des RAC-Service orcl

connect system/oracle@cluster-scan/orcl/orcl1

   BELIEBIG =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = cluster-scan)(PORT = 1521))
       (CONNECT_DATA =
         (SERVICE_NAME = orcl)
         (INSTANCE_NAME = orcl1)
       )
     )

Fazit

Unter Zuhilfenahme des Easy Connect Naming kann man Verbindungen zu Oracle-Datenbanken schnell und ohne weitere Konfigurationsschritte aufbauen. Das ist insbesondere für Verbindungstests, Fehlersuche und ad hoc Abfragen interessant. Easy Connect kann für Single-Instance-, RAC- und Multitenant-Datenbanken gleichermaßen eingesetzt werden. Es kann im RAC mit Loadbalancing umgehen, aber auch direkt eine bestimmte RAC-Instanz ansprechen. Easy Connect ist jedoch in jedem Fall an die Nutzung von Database Services gebunden und es unterstützt aufgrund der Syntaxbeschränkung keine Failoverkonfigurationen, wie etwa Data Guard. Desweiteren ist Easy Connect strikt auf das TCP-Protokoll festgelegt. Lokale Verbindungen über IPC oder auf SSL-gesicherte TCPS-Endpunkte sind nicht möglich.

Im Umkehrschluss macht Easy Connect einmal mehr deutlich, wie wichtig die Einrichtung wirksamer Zugangsbeschränkungen auf Oracle-Datenbanken im Unternehmen ist. Auch in vermeintlich durch Windows-Domänen und -richlinien abgesicherten Infrastrukturen reichen eine Client-IP, ein Datenbanklogin und die Kenntnis der Server-IP und des Datenbank-Servicenamens für einen erfolgreichen Connect zur Datenbank aus.

 

Nachtrag zum Kapitel "Syntax"

Ein aufmerksamer Leser unserer DBA-Tipps hat uns einen hilfreichen Hinweis zukommen lassen. Der Passwordprompt erscheint bei Easy Connect Verbindungen, wenn folgende Syntax verwendet wird:

sqlplus system@\"dbserver/orcl\"

Es ist also entgegen meinem damaligen Kenntnisstand doch möglich, das Passwort verdeckt einzugeben.

Er verwies in diesem Zusammenhang auch auf die MOS Note ID 274757.1 How to configure “Easy Connect Naming Method” for TCP/IP Environments.