Oracle Database 12c Release 2に付属するSQLcl (12.2.0.1) が実行時に参照し、動作を変更できる環境変数を調べてみました。調査はRed Hat Enterprise Linux 7 Update 3にOracle Database 12c Release 2 Enterprise Editionをインストールし、最新のPSUを適用した状態で実施しました。
SQLclの起動
日本語環境でSQLclを起動すると以下のようなメッセージが出力されます。
$ sql / as sysdba
SQLcl: 月 5 21 10:47:40 2018のリリース12.2.0.1.0 RC
Copyright (c) 1982, 2018, Oracle. All rights reserved.
接続先:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
環境変数
LANG
SQLclの起動メッセージのエンコードは環境変数NLS_LANGではなく、LANGで指定したコードが使用されます。セッションのNLS関連パラメーターのデフォルト値も変更されます。起動パラメーターとしてOCIインターフェースを用いる-ociを指定した場合でも同じ動作をするようです。
LANGを日本語に設定した例。
$ export LANG=ja_JP.utf8
$ sql / as sysdba
SQLcl: 月 5 21 10:51:27 2018のリリース12.2.0.1.0 RC
Copyright (c) 1982, 2018, Oracle. All rights reserved.
接続先:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> SHOW PARAMETER nls
NAME TYPE VALUE
----------------------- ------ --------------------------
nls_calendar string GREGORIAN
nls_comp string BINARY
nls_currency string \
nls_date_format string RR-MM-DD
nls_date_language string JAPANESE
nls_dual_currency string \
nls_iso_currency string JAPAN
nls_language string JAPANESE
nls_length_semantics string BYTE
nls_nchar_conv_excp string FALSE
nls_numeric_characters string .,
nls_sort string BINARY
nls_territory string JAPAN
nls_time_format string HH24:MI:SSXFF
nls_time_tz_format string HH24:MI:SSXFF TZR
nls_timestamp_format string RR-MM-DD HH24:MI:SSXFF
nls_timestamp_tz_format string RR-MM-DD HH24:MI:SSXFF TZR
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
--------
18-05-21
SQL>
LANGを英語にした例。
$ export LANG=en_US.utf8
$ sql / as sysdba
SQLcl: Release 12.2.0.1.0 RC on Mon May 21 10:52:21 2018
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> SHOW PARAMETER nls
NAME TYPE VALUE
----------------------- ------ ----------------------------
nls_calendar string GREGORIAN
nls_comp string BINARY
nls_currency string $
nls_date_format string DD-MON-RR
nls_date_language string AMERICAN
nls_dual_currency string $
nls_iso_currency string AMERICA
nls_language string AMERICAN
nls_length_semantics string BYTE
nls_nchar_conv_excp string FALSE
nls_numeric_characters string .,
nls_sort string BINARY
nls_territory string AMERICA
nls_time_format string HH.MI.SSXFF AM
nls_time_tz_format string HH.MI.SSXFF AM TZR
nls_timestamp_format string DD-MON-RR HH.MI.SSXFF AM
nls_timestamp_tz_format string DD-MON-RR HH.MI.SSXFF AM TZR
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
---------
21-MAY-18
SQL>
JAVA_HOME
SQLclはJavaを使って開発されているため、内部ではjavaコマンドが動作します。インストールされた Java Runtimeのディレクトリを指定する環境変数がJAVA_HOMEです。
この環境変数が指定されていない場合、環境変数JAVA_HOMEにはORACLE_HOME/jdkが使用されます。
以下の例はRed Hat Enterprise Linuxのパッケージに含まれるOpenJDK 1.8を指定する例です。
$ export JAVA_HOME=/usr
$ sql / as sysdba
SQLcl: 月 5 21 10:58:54 2018のリリース12.2.0.1.0 RC
Copyright (c) 1982, 2018, Oracle. All rights reserved.
接続先:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> ! ps -ef|grep java
oracle 8421 8416 65 10:58 pts/0 00:00:03 /usr/bin/java -Djava.awt.headless=true -Dapple.awt.UIElement=true -Xss10M -Djava.net.useSystemProxies=true -client -cp /u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/lib/extensions/*:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc8.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc8.jar:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc7.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc7.jar:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc6.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc6.jar:/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/lib/oracle.sqldeveloper.sqlcl.jar: oracle.dbtools.raptor.scriptrunner.cmdline.SqlCli / as sysdba
oracle 8465 8421 0 10:58 pts/0 00:00:00 bash -c SQLCLTERM=`stty -g 2>/dev/null` ; stty sane 2>/dev/null; export PATH="/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/bin:$PATH" && ps -ef|grep java; SQLCLEXIT=$? ; if test "M$SQLCLTERM" != "M" ; then stty "$SQLCLTERM" 2>/dev/null ; fi; exit $SQLCLEXIT
oracle 8470 8465 0 10:58 pts/0 00:00:00 grep java
SQL>
Java Runtimeとして/usr/bin/javaコマンドが実行されていることがわかります。
DEBUG
Java Runtimeのデバッグモードを設定するオプションを指定します。
以下の例はDEBUGに-Xdebugを指定しています。環境変数DEBUGが指定されると、SQLcl起動時に環境変数の値が表示されるようになります。
ただし、JAVA_HOMEは表示されず、コマンドのパスがJAVAとして表示されます。
$ export DEBUG=-Xdebug
$ sql / as sysdba
JAVA=/usr/bin/java
STD_ARGS=-Djava.awt.headless=true -Dapple.awt.UIElement=true -Xss10M -Djava.net.useSystemProxies=true
JAVA_OPTS=
DEBUG=-Xdebug
CPLIST=/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/lib/extensions/*:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc8.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc8.jar:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc7.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc7.jar:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc6.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc6.jar:/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/lib/oracle.sqldeveloper.sqlcl.jar:
SQLcl: 月 5 21 11:03:17 2018のリリース12.2.0.1.0 RC
Copyright (c) 1982, 2018, Oracle. All rights reserved.
接続先:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
JAVA_OPTS
標準以外のJava Runtimeのオプションを指定する場合に使います。
デフォルトでは以下のオプションが指定されます。
- -Djava.awt.headless=true
- -Dapple.awt.UIElement=true
- -Djava.net.useSystemProxies=true
- -Xss10M
- -client
- -cp {ORACLE_HOME}sqldeveloper/sqlcl/lib/extensions/*,
{ORACLE_HOME}/jdbc/lib/ojdbc8.jar
{ORACLE_HOME}/ojdbc8.jar
{ORACLE_HOME}/jdbc/lib/ojdbc7.jar
{ORACLE_HOME}/ojdbc7.jar
{ORACLE_HOME}/jdbc/lib/ojdbc6.jar
{ORACLE_HOME}/ojdbc6.jar
{ORACLE_HOME}/sqldeveloper/sqlcl/lib/oracle.sqldeveloper.sqlcl.jar
JAVA_OPTSに指定されたオプションは、-clientと${DEBUG}の間に指定されます。下記の例は-Xincgcを指定しています。
$ export DEBUG=-Xdebug
$ export JAVA_OPTS=-Xincgc
$ sql / as sysdba
JAVA=java
STD_ARGS=-Djava.awt.headless=true -Dapple.awt.UIElement=true -Xss10M -Djava.net.useSystemProxies=true
JAVA_OPTS=-Xincgc
DEBUG=-Xdebug
CPLIST=/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/lib/extensions/*:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc8.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc8.jar:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc7.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc7.jar:/u01/app/oracle/product/12.2.0/dbhome_1/jdbc/lib/ojdbc6.jar:/u01/app/oracle/product/12.2.0/dbhome_1/ojdbc6.jar:/u01/app/oracle/product/12.2.0/dbhome_1/sqldeveloper/sqlcl/lib/oracle.sqldeveloper.sqlcl.jar:
OpenJDK 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
SQLcl: 月 5 21 11:13:28 2018のリリース12.2.0.1.0 RC
Copyright (c) 1982, 2018, Oracle. All rights reserved.
接続先:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
ORACLE_HOME
ORACLE_HOMEはJava Runtimeの検索に使用されます。ORACLE_HOMEが指定され、JAVA_HOMEが指定されていない場合、
JAVA_HOMEとしてORACLE_HOME/jdk/jreが指定されます。
また、ORACLE_HOMEが指定されている場合、JDBC Driverの検索パスとしてORACLE_HOMEとORACLE_HOME/jdbc/libが追加され、
LD_LIBRARY_PATHも変更されます。