[Oracle]SYS_CONTEXTでセッション情報(IP、プログラム名など)を取得

OracleDBでセッション情報を扱った操作はSYS_CONTEXTを使いこなす必要がある。

SYS_CONTEXTの使い方あれこれを書いていこう思います。

目次

SYS_CONTEXTって何?

マニュアルには

SYS_CONTEXTは、現在のコンテキストnamespaceに関連付けられたparameterの値を戻します。このファンクションは、SQL文およびPL/SQL文で使用できます。SYS_CONTEXTはローカルに実行する必要があります。

とかいてあります。 ?ってなりますよね笑

まずコンテキストnemespaceとはなに?

簡単に説明すると表とは違うデータの持ち方です(正確には違うが) データをコンテキスト、文脈として扱います。

「ごはんを食べる。」というように、「ごはん」に続くワードは「食べる」だったり「炊く」だったり決まってますよね?

「〇〇と△△する。」という文脈の考え方をOracleDBでも利用できます。

これがOracleDB上でのコンテキストです。

で、SYS_CONTEXTってなに?

SYS_CONTEXTとはこのコンテキストNamespaceを利用することができるファンクションです。

OracleDBではSYS_CONTEXTを使用しないとコンテキストNamespaceを利用できません。

SYS_CONTEXTを使用する

SYS_CONTEXTを使用しましょう。

OracleDBでSYS_CONTEXTを使用すると言ったら基本的に 事前定義済のコンテキストを指します。ではでは紹介します。

USERENV

この記事のメイン!!**セッション情報を取得する方法です!!!**

接続元IPアドレスを取得

↓が利用方法です。

select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual; 

実際の実行ログは↓です。

TEST001@orcl > select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual;
SYS_CONTEXT('USERENV','IP_ADDRESS')
--------------------------------------------------------------------------------
192.168.56.115

こんな感じで接続元IPが取得できます。

接続元プログラム名を取得

↓が利用方法です。

select SYS_CONTEXT('USERENV','MODULE') from dual; 

実際の実行ログは↓です。

TEST001@orcl > select SYS_CONTEXT('USERENV','MODULE') from dual;

SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus

こんな感じでプログラム名が取得できます。

その他の取得

↓のマニュアルを確認しよう。 https://docs.oracle.com/cd/E16338_01/server.112/b56299/functions184.htm

SYS_SESSION_ROLES

接続しているユーザに該当するロールが付与されているか確認。

select SYS_CONTEXT('SYS_SESSION_ROLES', 'ROLE_NAME') from dual ; 

実際の実行ログは↓です。

TEST001@orcl > select SYS_CONTEXT('SYS_SESSION_ROLES', 'DBA') from dual;
SYS_CONTEXT('SYS_SESSION_ROLES','DBA')
--------------------------------------------------------------------------------
TRUE

TEST001@orcl >
TEST001@orcl >
TEST001@orcl > select SYS_CONTEXT('SYS_SESSION_ROLES', 'TEST_ROLE') from dual;

SYS_CONTEXT('SYS_SESSION_ROLES','TEST_ROLE')
--------------------------------------------------------------------------------
FALSE

TEST001@orcl >

TRUE”ならば付与されており、”FALSE”ならば付与されていないです。

SYS_CONTEXTでできること

SYS_CONTEXTを利用すれば現在のセッション情報を取得できる。

これを利用してサンプルをつくってみました。

SYS_CONTEXTを使用してOSのプロセスIDを取得

SYS_CONTEXTだけでは直接OSのプロセスIDは取得できない。

↓にも書いてあるので確認くださいませ。

あわせて読みたい
[Oracle]接続しているDBユーザのOSプロセスIDを取得 OracleのDBユーザのセッション情報を表示するためにはSYS_CONTEXTを利用することが多い。 しかし、SYS_CONTEXT単体だと接続している”OSのプロセスID”を取得することがで...
よかったらシェアしてね!
  • URLをコピーしました!
目次