Skip to Main Content

Breadcrumb

SQL*Plus 12cR2 liest die login.sql nicht mehr!

Seit es SQL*Plus gibt, hat Oracle einen einfachen Mechanismus eingebaut, um automatisch Variablen/Header/sonstwas zu setzen. Die Funktionsweise ist denkbar einfach: Sobald SQL*Plus gestartet wird, liest es zuerst ein File login.sql im lokalen Ordner, anschließend das File $ORACLE_HOME/sqlplus/admin/glogin.sql  - vorausgesetzt, die Files existieren.

Optional konnte man noch die Variable SQLPATH auf eine durch ":" separierte Liste von Directories setzen, die jedes einzelne der Reihenfolge nach dem File login.sql durchsucht wurden.

Seit 12cR2 ist alles anders

Plötzlich wird SQLPATH aber nicht mehr nach login.sql durchsucht - und, schlimmer noch: auch ein lokales login.sql wird plötzlich ignoriert. Betroffen davon sind nicht nur Neuinstallationen der Version 12cR2, sondern auch Systeme, auf denen ein neuerer PSU eingespielt wurde - bis hinunter zu 11.2.0.4.
Der offizielle Grund: "Security". Schön  - wieder einmal Komfortverlust durch Sicherheitsmaßnahmen.

Wie kann man das reparieren?

Die Variabel SQLPATH eignet sich nicht mehr - dafür gibt es jetzt eine Variable ORACLE_PATH, die genauso aus einer Liste aus Directories bestehen kann. Und mit der geht es:

export ORACLE_PATH=$PWD
sqlplus ...

und schon wird die gute alte login.sql (falls sie sich wie in diesem Beispiel im lokalen Verzeichnis befindet) wieder ausgeführt.

Leider lügt die Oracle-Doku über diesen Mechanismus ordentlich, und gäbe es nicht Franck Pachot, der es in seinem Blog (hier) akribisch untersucht hat, würden wir noch immer an uns zweifeln.

Kleines Detail am Rande: Das von den Entwicklern des SQLDevelopers entworfene Kommandozeilen-Werkzeug SQLcl vertraut noch immer (Stand: 16.11.2020) auf SQLPATH und ignoriert ORACLE_PATH. Da reden die Leute verschiedener Abteilungen wohl nicht miteinander ...

Fazit

Wer eine login.sql weiterhin automatisch ausgeführt haben will, muss die Environment-Variable ORACLE_PATH setzen.