0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL*Plusがロードするglogin.sqlが検索されるパスを探る

Posted at

SQLPlusが起動すると、glogin.sqlスクリプトが自動的に動作します。このファイルは主に各ユーザー共通の環境設定用に用いられます。
Oracle Database 12c Release 2に付属するSQL
Plusを使って、どのディレクトリに保存された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スクリプトの関係について記述が無いため検証してみました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?