前回、セッション情報を取得するときに気付いたのですが USERENV は非推奨なんですね・・・。
Oracle Database SQL言語リファレンス(12.1)
注意:
USERENVは、下位互換用に保持されるレガシー・ファンクションです。現行の機能に対して組込みUSERENVネームスペースとともにSYS_CONTEXTファンクションを使用することをお薦めします。詳細は、「SYS_CONTEXT」を参照してください。
SYS_CONTEXT で NAMESPACE=USERENV を指定するといろんな情報がとれるみたいです。自分が便利かも、と思うものをいくつか紹介。
SESSIONID | 監査セッション識別子。v$session.audsid と等しい。 |
SID | セッションID |
SESSION_USER | ログオン時のデータベース・ユーザーの名前。 |
AUTHENTICATION_METHOD | 認証方式を戻します。 |
ISDBA | DBA権限をもっているかどうか。 |
LANG | 言語名の略称 |
LANGUAGE | 現行のセッションで使用している言語および地域。language_territory.characterset |
HOST | 接続中のクライアントのホスト・マシン名を戻します。 |
IP_ADDRESS | 接続中のクライアントのマシンのIPアドレスを戻します。 |
MODULE | DBMS_APPLICATION_INFOパッケージまたはOCIを使用して設定されたアプリケーション名(モジュール)を戻します。 |
OS_USER | クライアント・プロセスのオペレーティング・システム・ユーザー名 |
SERVER_HOST | インスタンスを実行しているマシンのホスト名。 |
結果は、こんな感じ。
SQL> select sys_context('USERENV','SESSIONID') SESSIONID, 2 sys_context('USERENV','SID') SID, 3 sys_context('USERENV','SESSION_USER') SESSION_USER, 4 sys_context('USERENV','AUTHENTICATION_METHOD') AUTH_METHOD, 5 sys_context('USERENV','ISDBA') ISDBA 6 from dual; SESSIONID SID SESSION_USER AUTH_METHOD ISDBA ---------- ---------- ------------ ----------- ---------- 22756574 200 charlie PASSWORD FALSE SQL> select sys_context('USERENV','LANG') LANG, 2 sys_context('USERENV','LANGUAGE') LANGUAGE 3 from dual; LANG LANGUAGE ----- ----------------------- JA JAPANESE_JAPAN.AL32UTF8 SQL> select sys_context('USERENV','HOST') HOST, 2 sys_context('USERENV','IP_ADDRESS') IP_ADDRESS, 3 sys_context('USERENV','MODULE') MODULE, 4 sys_context('USERENV','OS_USER') OS_USER 5 from dual; HOST IP_ADDRESS MODULE OS_USER -------------------- -------------------- -------------------- ---------- client01 XXX.XXX.XXX.XXX SQL*Plus ora11204 SQL> select sys_context('USERENV','SERVER_HOST') SERVER_HOST from dual; SERVER_HOST ----------- server01
便利そうに見えるだけで、あまり役に立たない気もします。
ただ、いろいろな情報がとれるので押さえておくと役に立つ日がくるかもしれません。
ちなみに、USERENV もまだ 12.1 のマニュアルに書いてあるので使えます。
SELECT USERENV('SESSIONID') FROM DUAL;
USERENV の方が、文字数が少なくて楽だったな。