通过v$session视图,不仅可以知道有哪些会话存在,还可以知道他们现在都在做什么。
--1.会话的标识(sid、serial#、saddr和audsid),会话是属于BACKGROUND会话还是USER会话(type),以及会话进行初始化的时间(logon_time)。
--saddr(session address):表示当前记录的内存地址;
--audsid由SYS.AUDSES$这个sequence产生,当有一个新的会话产生,其audsid的值即为这个sequence的nextval,是为了审计使用的产生值。
SYS@PROD1> select sid, serial#, saddr, audsid, type, logon_time from v$session;
SID SERIAL# SADDR AUDSID TYPE LOGON_TIM
---------- ---------- -------- ---------- ---------- ---------
1 9 4B31FE08 4294967295 USER 01-MAR-17
2 1 4B31D288 0 BACKGROUND 01-MAR-17
3 1 4B31A708 0 BACKGROUND 01-MAR-17
4 1 4B317B88 0 BACKGROUND 01-MAR-17
5 1 4B315008 0 BACKGROUND 01-MAR-17
6 1 4B312488 0 BACKGROUND 01-MAR-17
7 1 4B30F908 0 BACKGROUND 01-MAR-17
8 1 4B30CD88 0 BACKGROUND 01-MAR-17
9 1 4B30A208 0 BACKGROUND 01-MAR-17
10 1 4B307688 0 BACKGROUND 01-MAR-17
11 1 4B304B08 0 BACKGROUND 01-MAR-17
12 1 4B301F88 0 BACKGROUND 01-MAR-17
13 1 4B2FF408 0 BACKGROUND 01-MAR-17
14 1 4B2FC888 0 BACKGROUND 01-MAR-17
15 1 4B2F9D08 0 BACKGROUND 01-MAR-17
16 1 4B2F7188 0 BACKGROUND 01-MAR-17
18 5 4B2F1A88 0 BACKGROUND 01-MAR-17
20 3 4B2EC388 0 BACKGROUND 01-MAR-17
21 1 4B2E9808 0 BACKGROUND 01-MAR-17
22 1 4B2E6C88 0 BACKGROUND 01-MAR-17
23 1 4B2E4108 0 BACKGROUND 01-MAR-17
29 1 4B2D3C08 0 BACKGROUND 01-MAR-17
30 1 4B2D1088 0 BACKGROUND 01-MAR-17
32 3 4B2CB988 0 BACKGROUND 01-MAR-17
36 35 4B2C0B88 0 BACKGROUND 01-MAR-17
40 3 4B2B5D88 0 BACKGROUND 01-MAR-17
41 7 4B2B3208 0 BACKGROUND 01-MAR-17
43 59 4B2ADB08 0 BACKGROUND 01-MAR-17
28 rows selected.
--2.打开会话的用户的标识(username和user#),当前模式(schemaname)和用于连接到数据库引擎的服务名称(service_name)。
--USER#: session's user id。等于dba_users中的user_id。Oracle内部进程的user#为0。
SCOTT@PROD1> select username, user#, schemaname, service_name from v$session;
USERNAME USER# SCHEMANAME SERVICE_NAME
-------------------- ---------- ---------- --------------------
SCOTT 83 SCOTT SYS$USERS
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$BACKGROUND
0 SYS SYS$USERS
0 SYS SYS$USERS
--3.使用会话的应用(program),启动会话所在的机器(machine),会话的进程ID(process)以及启动会话的操作系统用户的名称(osuser)。
SCOTT@PROD1> select program, machine, process, osuser from v$session;
PROGRAM MACHINE PROCESS OSUSER
------------------------------ ---------- ------------------------ ----------
sqlplus@ocm1 (TNS V1-V3) ocm1 4844 oracle
oracle@ocm1 (PMON) ocm1 3726 oracle
oracle@ocm1 (PSP0) ocm1 3728 oracle
oracle@ocm1 (VKTM) ocm1 3730 oracle
oracle@ocm1 (GEN0) ocm1 3734 oracle
oracle@ocm1 (DIAG) ocm1 3736 oracle
oracle@ocm1 (DBRM) ocm1 3738 oracle
oracle@ocm1 (DIA0) ocm1 3740 oracle
oracle@ocm1 (MMAN) ocm1 3742 oracle
oracle@ocm1 (DBW0) ocm1 3744 oracle
oracle@ocm1 (LGWR) ocm1 3746 oracle
oracle@ocm1 (CKPT) ocm1 3748 oracle
oracle@ocm1 (SMON) ocm1 3750 oracle
oracle@ocm1 (RECO) ocm1 3752 oracle
oracle@ocm1 (MMON) ocm1 3754 oracle
oracle@ocm1 (MMNL) ocm1 3756 oracle
oracle@ocm1 (RVWR) ocm1 3790 oracle
oracle@ocm1 (ARC0) ocm1 3794 oracle
oracle@ocm1 (ARC1) ocm1 3796 oracle
oracle@ocm1 (ARC2) ocm1 3798 oracle
oracle@ocm1 (ARC3) ocm1 3800 oracle
oracle@ocm1 (VKRM) ocm1 3802 oracle
oracle@ocm1 (QMNC) ocm1 3804 oracle
oracle@ocm1 (Q001) ocm1 3818 oracle
oracle@ocm1 (SMCO) ocm1 3876 oracle
oracle@ocm1 (Q000) ocm1 3816 oracle
oracle@ocm1 (CJQ0) ocm1 3822 oracle
oracle@ocm1 (W000) ocm1 4892 oracle
28 rows selected.
--4.服务器端进程的类型(server)以及服务器端进程的地址。
--可以通过paddr与v$process的addr连接进行查询
SCOTT@PROD1> select p.pname, p.addr, s.server from v$process p, v$session s where p.addr = s.paddr;
PNAME ADDR SERVER
----- -------- ---------
PMON 4BBD2CA4 DEDICATED
PSP0 4BBD37C8 DEDICATED
VKTM 4BBD42EC DEDICATED
GEN0 4BBD4E10 DEDICATED
DIAG 4BBD5934 DEDICATED
DBRM 4BBD6458 DEDICATED
DIA0 4BBD6F7C DEDICATED
MMAN 4BBD7AA0 DEDICATED
DBW0 4BBD85C4 DEDICATED
LGWR 4BBD90E8 DEDICATED
CKPT 4BBD9C0C DEDICATED
SMON 4BBDA730 DEDICATED
RECO 4BBDB254 DEDICATED
MMON 4BBDBD78 DEDICATED
MMNL 4BBDC89C DEDICATED
4BBE6494 DEDICATED
RVWR 4BBE6FB8 DEDICATED
ARC0 4BBE7ADC DEDICATED
ARC1 4BBE8600 DEDICATED
ARC2 4BBE9124 DEDICATED
ARC3 4BBE9C48 DEDICATED
VKRM 4BBEA76C DEDICATED
QMNC 4BBEB290 DEDICATED
Q000 4BBEBDB4 DEDICATED
SMCO 4BBEC8D8 DEDICATED
CJQ0 4BBED3FC DEDICATED
W000 4BBEDF20 DEDICATED
Q001 4BBEEA44 DEDICATED
28 rows selected.
--5.当前活动事务的地址(taddr)
--taddr(transation address):当前有活动事务的地址,关联v$transaction表的addr,通过这个字段关联查出当前session正在使用的回滚段的情况,以及当前事务的大小等信息
SCOTT@PROD1> select t.name, t.addr from v$transaction t, v$session s where t.addr=s.taddr;
--6.会话状态(status)以及这个状态持续了多少秒(last_call_et)。
SCOTT@PROD1> select sid, serial#, status, last_call_et from v$session;
SID SERIAL# STATUS LAST_CALL_ET
---------- ---------- -------- ------------
1 11 ACTIVE 0
2 1 ACTIVE 5900
3 1 ACTIVE 5900
4 1 ACTIVE 5900
5 1 ACTIVE 5897
6 1 ACTIVE 5897
7 1 ACTIVE 5897
8 1 ACTIVE 5897
9 1 ACTIVE 5897
10 1 ACTIVE 5897
11 1 ACTIVE 5897
12 1 ACTIVE 5897
13 1 ACTIVE 5897
14 1 ACTIVE 5897
15 1 ACTIVE 5897
16 1 ACTIVE 5897
18 5 ACTIVE 5891
20 3 ACTIVE 5883
21 1 ACTIVE 5882
22 1 ACTIVE 5882
23 1 ACTIVE 5882
29 1 ACTIVE 5873
30 1 ACTIVE 5868
32 3 ACTIVE 5858
36 35 ACTIVE 5552
40 3 ACTIVE 5858
41 7 ACTIVE 5857
43 61 ACTIVE 741
47 111 INACTIVE 251
29 rows selected.
--7.正在执行的SQL语句的类型(command)、与SQL语句相关的游标的标识(sql_address、sql_hash_value、sql_id和sql_child_number)
执行的开始时间(sql_exec_start)以及SQL语句的执行ID(sql_exec_id)。
执行ID是一个整数值,与sql_exec_start一起标识出某个特定执行。由于同样的游标每秒会被执行多次,所以会很重要。
SYS@PROD1> select command, sql_address, sql_hash_value, sql_id, sql_child_number, sql_exec_start, sql_exec_id from v$session;
COMMAND SQL_ADDR SQL_HASH_VALUE SQL_ID SQL_CHILD_NUMBER SQL_EXEC_ SQL_EXEC_ID
---------- -------- -------------- ------------- ---------------- --------- -----------
3 465D7604 754717924 9dtw6q8qgs574 0 02-MAR-17 16777216
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0
0 00 0
0 00 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0 0
0 00 0
0 00 0 0
0 00 0
0 00 0
0 00 0 0
0 00 0
0 00 0 0
28 rows selected.
--8.执行过的前一个游标的标识(prev_sql_addr、prev_hash_value、prev_sql_id、prev_child_number)、前一个执行的开始时间和执行ID(prev_exec_start、prev_exec_id)
SYS@PROD1> select prev_sql_addr, prev_hash_value, prev_sql_id, prev_child_number, prev_exec_start, prev_exec_id from v$session;
PREV_SQL PREV_HASH_VALUE PREV_SQL_ID PREV_CHILD_NUMBER PREV_EXEC PREV_EXEC_ID
-------- --------------- ------------- ----------------- --------- ------------
44E39AC8 45038246 6sz4ct01ayfp6 0 02-MAR-17 16777216
00 0 0
00 0 0
00 0 0
00 0 0
00 0 0
4B4BEC28 1129083356 8wxxddd1nswfw 0 02-MAR-17 16777216
00 0 0
00 0 0
00 0 0
00 0 0
00 0 0
465719DC 4052085454 chsyr0gssbuqf 0 02-MAR-17 16777216
4666BDE0 2886642122 1ptv0pqq0xafa 0 02-MAR-17 16777216
4B59FDB4 3489409389 aykvshm7zsabd 0 02-MAR-17 16777232
4B51199C 1570213724 bsa0wjtftg3uw 0 02-MAR-17 16777239
00 0 0
00 0 0
00 0 0
00 0 0
00 0 0
4B48B1CC 2230961768 79w2cqu2gmjm8 0 02-MAR-17 16777218
00 0 0
4677C88C 139075864 cv959u044n88s 0 02-MAR-17 16777216
4B483EC8 352822532 3rw49yhahg984 0 02-MAR-17 16777218
44E3A188 2754365971 1att0guk2skhm 0 02-MAR-17 16777216
465D40B8 3679126745 5ms6rbzdnq16t 0 02-MAR-17 16777311
00 0 0
28 rows selected.
--9.如果执行的是PL/SQL调用,那么该信息包括,被调用的顶层程序与子程序的标识(plsql_entry_object_id和plsql_entry_subprogram_id),
以及当前执行的顶层程序和自程序(plsql_object_id和plsql_subprogram_id)。
如果当前会话正在执行某个SQL语句,则会将plsql_object_id和plsql_subprogram_id设置为NULL。
--10.会话属性(client_identifier、module、action、client_info),如果会话设置了这些属性才显示。
SYS@PROD1> select client_identifier, module, action, client_info from v$session where module is not null;
CLIENT_IDENTIFI MODULE ACTION CLIENT_INFO
--------------- ---------------------------- -------------------- ---------------
sqlplus@ocm1 (TNS V1-V3)
Streams QMON Coordinator
Streams QMON Slave
Streams QMON Slave
KTSJ KTSJ Slave
KTSJ KTSJ Slave
KTSJ KTSJ Slave
KTSJ KTSJ Slave
KTSJ KTSJ Coordinator
9 rows selected.
--11.如果当前会话正在等待,则包含以下信息:
会话正在等待的等待时间的名称(event)、其等待级别(wait_class和wait_class#),
关于等待事件的详细信息(p1text、p1、p1raw、p2text、p2、p2raw、p3text、p3、p3raw、),
以及会话已经等待该等待事件的时间(seconds_in_wait,自11.1起为wait_time_micro),
如果state不是WAITING,那么表示会话在使用CPU,这种情况下,与等待事件相关的列会包含关于上一次的等待的信息。
SYS@PROD1> select event, wait_class, wait_class# from v$session;
EVENT WAIT_CLASS WAIT_CLASS#
---------------------------------------------------------- ------------------------- -----------
SQL*Net message to client Network 7
pmon timer Idle 6
rdbms ipc message Idle 6
VKTM Logical Idle Wait Idle 6
rdbms ipc message Idle 6
DIAG idle wait Idle 6
rdbms ipc message Idle 6
DIAG idle wait Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
smon timer Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
rdbms ipc message Idle 6
Streams AQ: qmn coordinator idle wait Idle 6
VKRM Idle Idle 6
Streams AQ: qmn slave idle wait Idle 6
Streams AQ: waiting for time management or cleanup tasks Idle 6
Space Manager: slave idle wait Idle 6
rdbms ipc message Idle 6
Space Manager: slave idle wait Idle 6
Space Manager: slave idle wait Idle 6
Space Manager: slave idle wait Idle 6
rdbms ipc message Idle 6
31 rows selected.
--12.会话是否被另一个会话阻止(如果是,则会将blocking_session_status设置为VALID),
如果会话正在等待,那么是哪个会话正在组织它(blocking_instance和blocking_session)
--13.如果会话当前被组织并且在等待某个特定行,那么该信息是会话当前正在等待的行的标识
(row_wait_obj#,row_wait_file#,row_wait_block#,row_wait_row#)。
如果会话未在等待某个被锁定的行,那么row_wait_obj#列等于值-1。