从Oracle10gR1开始,Oracle在V$SESSION中增加关于等待事件的字段,实际上也就是把原来V$SESSION_WAIT视图中的所有字段全部整合到了V$SESSION视图中,开始的时候我还以为ASH是依赖联合查询来获取信息的,仔细一看才发现现在V$SESSION已经发生了变化。(如果进一步研究你会发现,实际上V$SESSION的底层查询语句及X$表已经有了变化)
这一变化使得我们的查询得以简化,但是也使得V$SESSION_WAIT开始变得多余,此外V$SESSION中还增加了BLOCKING_SESSION等字段,以前我们需要通dba_waiters等视图才能获得的信息,现在也可以直接从V$SESSION中得到了。既然这样,让我们好好研究V$SESSION视图中每个字段的含义。
首先,请看官方文档上面关于V$SESSION字段的说明:
v$session:This view has one row for every session connected to the database instance. The sessions include user sessions, as well as background processes like DBWR, LGWR, archiver.
1、SADDR --Session address Session地址
2、SID --Session identifier Session ID
3、SERIAL# 官方解释:Session serial number. Used to uniquely identify a session's objects. Guarantees that session-level commands are applied to the correct session objects if the session ends and another session begins with the same session ID. sid 会重用,但是同一个SID被重用时,serial#会增加,不会重复。 比如说你在10:00时发现有一个SID 为10 ,serial#为100的session 不正常,想杀掉他,要是直接用kill sid 10 ,而同时这个session 主动退出,新session近来 而又正好用了 10这个SID (这时新session的serial#不会=100,只会比100高),就会发生误杀的情况。所以Oracle要求我们在杀session时,必须同时指定sid和serial#. 从另外一个角度上说,sid 在同一个instance的当前session中是一个unique key, 而sid ,serial#则是在整个instance生命期内的所有session中是unique key。(不考虑serial#超过最大值,重用的情况)
3、AUDSID --Auditing session ID
from asktom the audsid column is populated via a sequence and for normal sessions is the same as "userenv('sessionid')" -- but for some background sessions -- it is not set (it comes back as "0" making the view not work. So, I'd just ignore "audsid" for now and use SID.
4、paddr ,这个我们要和saddr、taddr一起讲一下
saddr(session address):表示当前记录的内存地址; paddr(process address):该session对应的进程地址,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id; taddr(transation address):当前有活动事务的地址,关联v$transaction表的addr,通过这个字段关联查出当前session正在使用的回滚段的情况,以及当前事务的大小等信息
5、
USER#、
USERNAME表示登录的用户名编号和用户名,比如说sytem、test等,如果没有说明是后台进程产生的session。
比如说:QMNC、MMON 、MMNL 等后台经常,这是时候我们可以看看v$session 的PROGRAM字段。
6、COMMAND Command in progress (last statement parsed); for a list of values, see Table 7-5 . These values also appear in the
AUDIT_ACTIONStable.
COMMAND Column of V$SESSION and Corresponding Commands
|
Number |
Command |
Number |
Command |
|
1 |
CREATE TABLE |
2 |
INSERT |
|
3 |
SELECT |
4 |
CREATE CLUSTER |
|
5 |
ALTER CLUSTER |
6 |
UPDATE |
|
7 |
DELETE |
8 |
DROP CLUSTER |
|
9 |
CREATE INDEX |
10 |
DROP INDEX |
|
11 |
ALTER INDEX |
12 |
DROP TABLE |
|
13 |
CREATE SEQUENCE |
14 |
ALTER SEQUENCE |
|
15 |
ALTER TABLE |
16 |
DROP SEQUENCE |
|
17 |
GRANT OBJECT |
18 |
REVOKE OBJECT |
|
19 |
CREATE SYNONYM |
20 |
DROP SYNONYM |
|
21 |
CREATE VIEW |
22 |
DROP VIEW |
|
23 |
VALIDATE INDEX |
24 |
CREATE PROCEDURE |
|
25 |
ALTER PROCEDURE |
26 |
LOCK |
|
27 |
NO-OP |
28 |
RENAME |
|
29 |
COMMENT |
30 |
AUDIT OBJECT |
|
31 |
NOAUDIT OBJECT |
32 |
CREATE DATABASE LINK |
|
33 |
DROP DATABASE LINK |
34 |
CREATE DATABASE |
|
35 |
ALTER DATABASE |
36 |
CREATE ROLLBACK SEG |
|
37 |
ALTER ROLLBACK SEG |
38 |
DROP ROLLBACK SEG |
|
39 |
CREATE TABLESPACE |
40 |
ALTER TABLESPACE |
|
41 |
DROP TABLESPACE |
42 |
ALTER SESSION |
|
43 |
ALTER USER |
44 |
COMMIT |
|
45 |
ROLLBACK |
46 |
SAVEPOINT |
|
47 |
PL/SQL EXECUTE |
48 |
SET TRANSACTION |
|
49 |
ALTER SYSTEM |
50 |
EXPLAIN |
|
51 |
CREATE USER |
52 |
CREATE ROLE |
|
53 |
DROP USER |
54 |
DROP ROLE |
|
55 |
SET ROLE |
56 |
CREATE SCHEMA |
|
57 |
CREATE CONTROL FILE |
59 |
CREATE TRIGGER |
|
60 |
ALTER TRIGGER |
61 |
DROP TRIGGER |
|
62 |
ANALYZE TABLE |
63 |
ANALYZE INDEX |
|
64 |
ANALYZE CLUSTER |
65 |
CREATE PROFILE |
|
66 |
DROP PROFILE |
67 |
ALTER PROFILE |
|
68 |
DROP PROCEDURE |
70 |
ALTER RESOURCE COST |
|
71 |
CREATE MATERIALIZED VIEW LOG |
72 |
ALTER MATERIALIZED VIEW LOG |
|
73 |
DROP MATERIALIZED VIEW LOG |
74 |
CREATE MATERIALIZED VIEW |
|
75 |
ALTER MATERIALIZED VIEW |
76 |
DROP MATERIALIZED VIEW |
|
77 |
CREATE TYPE |
78 |
DROP TYPE |
|
79 |
ALTER ROLE |
80 |
ALTER TYPE |
|
81 |
CREATE TYPE BODY |
82 |
ALTER TYPE BODY |
|
83 |
DROP TYPE BODY |
84 |
DROP LIBRARY |
|
85 |
TRUNCATE TABLE |
86 |
TRUNCATE CLUSTER |
|
91 |
CREATE FUNCTION |
92 |
ALTER FUNCTION |
|
93 |
DROP FUNCTION |
94 |
CREATE PACKAGE |
|
95 |
ALTER PACKAGE |
96 |
DROP PACKAGE |
|
97 |
CREATE PACKAGE BODY |
98 |
ALTER PACKAGE BODY |
|
99 |
DROP PACKAGE BODY |
100 |
LOGON |
|
101 |
LOGOFF |
102 |
LOGOFF BY CLEANUP |
|
103 |
SESSION REC |
104 |
SYSTEM AUDIT |
|
105 |
SYSTEM NOAUDIT |
106 |
AUDIT DEFAULT |
|
107 |
NOAUDIT DEFAULT |
108 |
SYSTEM GRANT |
|
109 |
SYSTEM REVOKE |
110 |
CREATE PUBLIC SYNONYM |
|
111 |
DROP PUBLIC SYNONYM |
112 |
CREATE PUBLIC DATABASE LINK |
|
113 |
DROP PUBLIC DATABASE LINK |
114 |
GRANT ROLE |
|
115 |
REVOKE ROLE |
116 |
EXECUTE PROCEDURE |
|
117 |
USER COMMENT |
118 |
ENABLE TRIGGER |
|
119 |
DISABLE TRIGGER |
120 |
ENABLE ALL TRIGGERS |
|
121 |
DISABLE ALL TRIGGERS |
122 |
NETWORK ERROR |
|
123 |
EXECUTE TYPE |
157 |
CREATE DIRECTORY |
|
158 |
DROP DIRECTORY |
159 |
CREATE LIBRARY |
|
160 |
CREATE JAVA |
161 |
ALTER JAVA |
|
162 |
DROP JAVA |
163 |
CREATE OPERATOR |
|
164 |
CREATE INDEXTYPE |
165 |
DROP INDEXTYPE |
|
167 |
DROP OPERATOR |
168 |
ASSOCIATE STATISTICS |
|
169 |
DISASSOCIATE STATISTICS |
170 |
CALL METHOD |
|
171 |
CREATE SUMMARY |
172 |
ALTER SUMMARY |
|
173 |
DROP SUMMARY |
174 |
CREATE DIMENSION |
|
175 |
ALTER DIMENSION |
176 |
DROP DIMENSION |
|
177 |
CREATE CONTEXT |
178 |
DROP CONTEXT |
|
179 |
ALTER OUTLINE |
180 |
CREATE OUTLINE |
|
181 |
DROP OUTLINE |
182 |
UPDATE INDEXES |
|
183 |
ALTER OPERATOR |
7、OWNERID
如果值为2147483644,则此列的内容无效。否则此列包含拥有可移植会话的用户标符。对于利用并行从服务器的操作,将这个值解释为一个48 字节的值。其低位两字节表示会话号,而高位字节表示查询协调程序的实例ID
8、
LOCKWAITAddress of lock waiting for; null if none
等待锁的地址;如果没有,为NULL
9、
STATUS
Status of the session:
ACTIVE- Session currently executing SQL
INACTIVE
KILLED- Session marked to be killed
CACHED- Session temporarily cached for use by Oracle*XA
SNIPED- Session inactive, waiting on the client
文档里面已经说的比较清楚了
10、
SERVER
服务器类型:DEDICATED(独有)、SHARED(共享)、PSEUDO、NONE
服务器类型在安装时候已经选择了,我们一般选择DEDICATED模式,非共享。
11、SCHEMA# 模式用户标识符
12、SCHEMANANME 模式用户名、OSUSER 操作系统客户机用户
13、PROCESS 操作系统客户机进程ID
关于v$process与v$session中process的理解 说明 v$session有个process字段,V$PROCESS有个SPID字段,这两个字段是不是一个意思呢?是不是都代表会话的操作系统进程呢? 官方文档上的解释: SPID VARCHAR2(12) Operating system process identifier PROCESS VARCHAR2(9) Operating system client process ID 本文以数据库服务器安装在linux上为例进行说明。 V$PROCESS中的SPID表示的是操作系统的进程,v$session中的process表示客户端进程ID,即客户端进程在客户端机器上的进程ID号。一个表示客户端进程在客户端机器上的进程号,一个表示服务器进程在服务器上的进程号。 连接服务器的会话,发起会话的客户端进程可能是unix进程,也可能是windows进程。 ------------------- windows客户端进程 ------------------- 例如,使用windows进程连接unix上的数据库,对应会话sid=35,对应客户端windows的988:5412
14、MACHINE 操作系统机器名、TERMINAL 操作系统终端名
可以根据主terminal查询客户端的ip
select utl_inaddr.get_host_address(terminal) from v$session where username is not null;
15、PROGRAM 操作系统程序名
通过本机连接的session,一般都有program。如果是通过服务器连接的session,一般都没有program。
16、TYPE 会话类型
一般有两个类型:background(后台进程)、user(用户)
17、SQL_ADDRESS
Used with SQL_HASH_VALUE to identify the SQL statement that is currently being executed 当前正在执行的SQL语句的SQL_HASH_VALUE值 18、SQL_HASH_VALUE
Used with SQL_ADDRESS to identify the SQL statement that is currently being executed 当前正在执行的SQL语句的SQL_ADDRESS值 SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句。如果为null或0,那就说明这个session没有执行任何SQL语句。PREV_HASH_VALUE和PREV_ADDRESS两列用来鉴别被session执行的上一条语句。
19、SQL_ID
SQL identifier of the SQL statement that is currently being executed 正在执行的SQL语句的标识符
20、SQL_CHILD_NUMBER
Child number of the SQL statement that is currently being executed
21、PREV_SQL_ADDR
Used with PREV_HASH_VALUE to identify the last SQL statement executed
22、PREV_HASH_VALUE
Used with SQL_HASH_VALUE to identify the last SQL statement executed
23、MODULE、ACTION
Name of the currently executing module as set by calling the DBMS_APPLICATION_INFO.SET_MODULE procedure
