読者です 読者をやめる 読者になる 読者になる

Gblog

おもにTips

USERENV(関数)と SYS_CONTEXT

ORACLE

前回、セッション情報を取得するときに気付いたのですが 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 の方が、文字数が少なくて楽だったな。