5
8

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.

Oracle11g Oracleセッション一覧表示 + 各サーバからの接続セッション数表示スクリプト

Last updated at Posted at 2015-01-25

はじめに

Linuxサーバ上に構築したOracle 11gサーバ(11.1.0.7.2)において、Oracleデータベースに接続している各セッションの一覧、Oracleに接続している各接続元サーバ(以下:接続元サーバと表記します)のセッション数を表示するスクリプトです。

ざっくりとしたイメージで言うと、MySQLの「SHOW PROCESSLIST」コマンドのようなものになります。

Oracleデータベースに接続中のセッション一覧やセッション数について、手軽に確認したい時に利用しております。

スクリプトを実行している環境

・Oracle 11g (11.1.0.7.2)

Oracleセッション一覧と接続元サーバごとのセッション数表示スクリプト

Oracle 11gサーバの任意のディレクトリに、以下のようなスクリプトを作成します。

[oracle@example-oracle-11g-active ~]$ vi show_oracle_session_list.sh
show_oracle_session_list.sh
# !/bin/sh

export NLS_DATE_FORMAT="YYYY/MM/DD HH24:MI:SS"

SQL_TEXT="/任意のディレクトリ/show_oracle_session_list.sql"

if [ -r ${SQL_TEXT} ] ; then

        sqlplus / as sysdba @${SQL_TEXT}

fi

スクリプトに実行権限を設定します。

[oracle@example-oracle-11g-active ~]$ chmod 754 show_oracle_session_list.sh

スクリプト内で実行するSQLファイルを作成します。
SQLファイルにはchmod 754のような実行権限付与は不要です。

[oracle@example-oracle-11g-active ~]$ vi /任意のディレクトリ/show_oracle_session_list.sql
show_oracle_session_list.sql
set echo on
set colsep |
set pages 1000
set lines 1000

column MACHINE format a30
column SID format 999999
column SERIAL# format 999999
column STATUS format a10
column USERNAME format a10
column OSUSER format a10
column EXECUTIONS format 999999999999
column CPU_TIME format 999999999999
column ELAPSED_TIME format 999999999999
column SQL_ID format a15
SELECT
  SS.SID,
  SS.SERIAL#,
  SQ.EXECUTIONS,
  SQ.CPU_TIME,
  SQ.ELAPSED_TIME,
  SS.STATUS,
  SS.USERNAME,
  SS.OSUSER,
  SS.MACHINE,
  SS.LOGON_TIME,
  SS.PROGRAM,
  SS.SQL_ID,
-- SS.SQL_CHILD_NUMBER,
-- SQ.SQL_FULLTEXT,
  SQ.SQL_TEXT
FROM
  V$SESSION SS, V$SQL SQ
WHERE
  SS.SQL_ID = SQ.SQL_ID
AND
  SS.SQL_CHILD_NUMBER = SQ.CHILD_NUMBER
ORDER BY
  SQ.CPU_TIME DESC;

SELECT machine, count(machine) "SESSION_COUNT", status, count(status) FROM v$session group by machine, status order by SESSION_COUNT desc;

SELECT machine, count(machine) "SESSION_COUNT" FROM v$session group by machine order by SESSION_COUNT desc;

SELECT * FROM v$resource_limit;

SELECT status, count(status) FROM v$session group by status;

SELECT count(1) FROM v$session;


exit

Oracle 11gサーバでのスクリプト実行例

Oralce 11gサーバにoracleユーザでログインして、先ほど作成したスクリプトを実行します。以下のようにOracleデータベースに接続中の各セッション一覧、接続元サーバのセッション数を表示出来ます。

なお、以下に記載しているスクリプト実行結果のユーザ名等の表示はサンプル用に修正しております。

[oracle@example-oracle-11g-active ~]$ ./show_oracle_session_list.sh
SQL> set colsep |
SQL> set pages 1000
SQL> set lines 1000
SQL>
SQL> column MACHINE format a30
SQL> column SID format 999999
SQL> column SERIAL# format 999999
SQL> column STATUS format a10
SQL> column USERNAME format a10
SQL> column OSUSER format a10
SQL> column EXECUTIONS format 999999999999
SQL> column CPU_TIME format 999999999999
SQL> column ELAPSED_TIME format 999999999999
SQL> column SQL_ID format a15
SQL> SELECT
  2    SS.SID,
  3    SS.SERIAL#,
  4    SQ.EXECUTIONS,
  5    SQ.CPU_TIME,
  6    SQ.ELAPSED_TIME,
  7    SS.STATUS,
  8    SS.USERNAME,
  9    SS.OSUSER,
 10    SS.MACHINE,
 11    SS.LOGON_TIME,
 12    SS.PROGRAM,
 13    SS.SQL_ID,
 14  -- SS.SQL_CHILD_NUMBER,
 15  -- SQ.SQL_FULLTEXT,
 16    SQ.SQL_TEXT
 17  FROM
 18    V$SESSION SS, V$SQL SQ
 19  WHERE
 20    SS.SQL_ID = SQ.SQL_ID
 21  AND
 22    SS.SQL_CHILD_NUMBER = SQ.CHILD_NUMBER
 23  ORDER BY
 24    SQ.CPU_TIME DESC;

    SID|SERIAL#|   EXECUTIONS|     CPU_TIME| ELAPSED_TIME|STATUS    |USERNAME      |OSUSER    |MACHINE                       |LOGON_TIME         |PROGRAM                                     |SQL_ID           |SQL_TEXT
-------|-------|-------------|-------------|-------------|----------|--------------|----------|------------------------------|-------------------|--------------------------------------------|-----------------|-------------------
   6368|   5673|        61556|   8955532602|  10577027750|ACTIVE    |EXAMPLE_USER  |example   |server1.example.com           |2015/01/22 15:18:25|php@server1.example.com (TNS V1-V3)         |7y6sf3sfphth5    |SELECT **, **, ** FROM example_table WHERE ** = :"SYS_B_00" AND ** = :"SYS_B_01"
   8326|  20334|        22639|   1395539776|   1260076576|ACTIVE    |EXAMPLE_USER  |example   |server2.example.com           |2015/01/22 15:18:28|httpd@server2.example.com (TNS V1-V3)       |d017uxnx03gnx    |(そのセッションが実行中のSQLテキストの一部が表示される)
   7244|  64455|      2105647|    525433923|   2182350485|INACTIVE  |EXAMPLE_USER  |example   |server3.example.com           |2015/01/22 15:18:28|php@server3.example.com (TNS V1-V3)         |f71a536g85g7q    |(そのセッションが実行中のSQLテキストの一部が表示される)

  (途中省略)

XX rows selected.

SQL>
SQL> SELECT machine, count(machine) "SESSION_COUNT", status, count(status) FROM v$session group by machine, status order by SESSION_COUNT desc;

MACHINE                       |SESSION_COUNT|STATUS    |COUNT(STATUS)
------------------------------|-------------|----------|-------------
example-oracle-11g-active     |           37|ACTIVE    |           37
server1.example.com           |           33|INACTIVE  |           33
server2.example.com           |           27|INACTIVE  |           27
server3.example.com           |           19|INACTIVE  |           19
server3.example.com           |            1|ACTIVE    |            1

  (途中省略)

XX rows selected.

SQL>
SQL> SELECT machine, count(machine) "SESSION_COUNT" FROM v$session group by machine order by SESSION_COUNT desc;

MACHINE                       |SESSION_COUNT
------------------------------|-------------
example-oracle-11g-active     |           50
server1.example.com           |           33
server2.example.com           |           27
server3.example.com           |           20

  (途中省略)

XX rows selected.

SQL>
SQL> SELECT * FROM v$resource_limit;

RESOURCE_NAME                 |CURRENT_UTILIZATION|MAX_UTILIZATION|INITIAL_ALLOCATION            |LIMIT_VALUE
------------------------------|-------------------|---------------|------------------------------|------------------------------
processes                     |                324|            527|      7000                    |      7000
sessions                      |                514|           4551|      7805                    |      7805
enqueue_locks                 |                640|           4627|    104630                    |    104630
enqueue_resources             |                208|            233|     38360                    | UNLIMITED

  (途中省略)

XX rows selected.

SQL>
SQL> SELECT status, count(status) FROM v$session group by status;

STATUS    |COUNT(STATUS)
----------|-------------
ACTIVE    |           58
INACTIVE  |          444

SQL>
SQL> SELECT count(1) FROM v$session;

  COUNT(1)
----------
       502

SQL>
SQL> exit
[oracle@example-oracle-11g-active ~]$

ご参考になりましたら幸いです。
以上になります。

5
8
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
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?