SQLPlusが起動すると、glogin.sqlスクリプトが自動的に動作します。このファイルは主に各ユーザー共通の環境設定用に用いられます。
Oracle Database 12c Release 2に付属するSQLPlusを使って、どのディレクトリに保存されたglogin.sqlが使われるかを検証しました。
標準設定の場合
ORACLE_HOMEとPATHのみ指定された環境でSQL*Plusを起動した場合、どのディレクトリのglogin.sqlを検索するか確認しました。
ORACLE_HOME/sqlplus/adminディレクトリを検索しています。マニュアル通りの動きです。
$ strace sqlplus scott/tiger
(略)
stat("/u01/app/oracle/product/12.2.0/dbhome_1/sqlplus/admin/glogin.sql", 0x7ffde7a6b200) = -1 ENOENT (No such file or directory)
(略)
SQLPATHを指定
SQL*Plusユーザーズ・ガイドおよびリファレンス・マニュアル にはSQLPATHは以下のように説明されています。
SQLスクリプトの位置を指定する環境変数またはWindowsレジストリ・エントリ。SQL*Plusでは、SQLPATHで指定されたディレクトリおよびSQLPATHディレクトリのサブディレクトリに、SQLスクリプト(login.sqlを含む)が検索されます。
glogin.sqlが検索されるかを確認します。
$ export SQLPATH=/home/oracle/dir1:/home/oracle/dir2:/home/oracle/dir3
$ strace sqlplus scott/tiger
(略)
stat("/u01/app/oracle/product/12.2.0/dbhome_1/sqlplus/admin/glogin.sql", 0x7ffd69385180) = -1 ENOENT (No such file or directory)
brk(0) = 0x2042000
brk(0x207a000) = 0x207a000
stat("/home/oracle/dir1/?/sqlplus/admin/glogin.sql", 0x7ffd6937f1b0) = -1 ENOENT (No such file or directory)
stat("/home/oracle/dir2/?/sqlplus/admin/glogin.sql", 0x7ffd6937f1b0) = -1 ENOENT (No such file or directory)
stat("/home/oracle/dir3/?/sqlplus/admin/glogin.sql", 0x7ffd6937f1b0) = -1 ENOENT (No such file or directory)
write(1, "SQL> ", 5SQL> ) = 5
(略)
なぜかSQLPATHに指定されたディレクトリを検索し、それぞれのディレクトリ以下の「?/sqlplus/admin/glogin.sql」を検索していることがわかります。
ORACLE_PATHを指定
SQL*Plusユーザーズ・ガイドおよびリファレンス・マニュアル にはORACLE_PATHは以下のように説明されています。
SQLスクリプトの位置を指定する環境変数。SQL*PlusがORACLE_PATHでスクリプト・ファイルを検出できない場合、またはORACLE_PATHが設定されていない場合は、現行の作業ディレクトリが検索されます。
glogin.sqlが検索されるかを確認します。
$ export ORACLE_PATH=/home/oracle/dir1
$ strace sqlplus scott/tiger
(略)
access("/home/oracle/dir1/login.sql", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/dir1/login.sql", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 143360, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa5c6152000
munmap(0x7fa5c6152000, 143360) = 0
stat("/u01/app/oracle/product/12.2.0/dbhome_1/sqlplus/admin/glogin.sql", 0x7ffd43ec0000) = -1 ENOENT (No such file or directory)
(略)
login.sqlが検索されていますが、glogin.sqlはデフォルトのみ検索されています。
両方を設定してみる
ORACLE_PATHとSQLPATHを別々のディレクトリに指定して、glogin.sqlが検索されるか確認しました。
export SQLPATH=/home/oracle/dir1:/home/oracle/dir2
export ORACLE_PATH=/home/oracle/dir3
strace sqlplus scott/tiger
(略)
access("/home/oracle/dir3/login.sql", F_OK) = -1 ENOENT (No such file or directory)
access("/home/oracle/dir3/login.sql", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 143360, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbdc8a30000
munmap(0x7fbdc8a30000, 143360) = 0
stat("/u01/app/oracle/product/12.2.0/dbhome_1/sqlplus/admin/glogin.sql", 0x7ffee6774900) = -1 ENOENT (No such file or directory)
brk(0) = 0x21d5000
brk(0x220d000) = 0x220d000
stat("/home/oracle/dir1/?/sqlplus/admin/glogin.sql", 0x7ffee676e930) = -1 ENOENT (No such file or directory)
stat("/home/oracle/dir2/?/sqlplus/admin/glogin.sql", 0x7ffee676e930) = -1 ENOENT (No such file or directory)
(略)
両方設定してもglogin.sqlを検索するのはSQLPATHで指定したディレクトリのみでした。マニュアルには環境変数SQLPATHとglogin.sqlスクリプトの関係について記述が無いため検証してみました。