【Oracle】详解v$session
首先查看一下v$session都存在哪些列
SYS@ORCL>desc v$session
Name Null? Type
----------------------------------------- -------- ----------------------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
AUDSID NUMBER
PADDR RAW(4)
USER# NUMBER
USERNAME 2 VARCHAR2(30)
COMMAND NUMBER
OWNERID NUMBER
TADDR VARCHAR2(8)
LOCKWAIT VARCHAR2(8)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA# NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESS VARCHAR2(12)
MACHINE VARCHAR2(64)
TERMINAL VARCHAR2(30)
PROGRAM VARCHAR2(48)
TYPE VARCHAR2(10)
SQL_ADDRESS RAW(4)
SQL_HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
SQL_CHILD_NUMBER NUMBER
PREV_SQL_ADDR RAW(4)
PREV_HASH_VALUE NUMBER
PREV_SQL_ID VARCHAR2(13)
PREV_CHILD_NUMBER NUMBER
MODULE VARCHAR2(48)
MODULE_HASH NUMBER
ACTION VARCHAR2(32)
ACTION_HASH NUMBER
CLIENT_INFO VARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ# NUMBER
ROW_WAIT_FILE# NUMBER
ROW_WAIT_BLOCK# NUMBER
ROW_WAIT_ROW# NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPE VARCHAR2(13)
FAILOVER_METHOD VARCHAR2(10)
FAILED_OVER VARCHAR2(3)
RESOURCE_CONSUMER_GROUP VARCHAR2(32)
PDML_STATUS VARCHAR2(8)
PDDL_STATUS VARCHAR2(8)
PQ_STATUS VARCHAR2(8)
CURRENT_QUEUE_DURATION NUMBER
CLIENT_IDENTIFIER VARCHAR2(64)
BLOCKING_SESSION_STATUS VARCHAR2(11)
BLOCKING_INSTANCE NUMBER
BLOCKING_SESSION NUMBER
SEQ# NUMBER
EVENT# NUMBER
EVENT VARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(4)
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
SERVICE_NAME VARCHAR2(64)
SQL_TRACE VARCHAR2(8)
SQL_TRACE_WAITS VARCHAR2(5)
SQL_TRACE_BINDS VARCHAR2(5)
SADDR-——当前会话在内存中的地址
SAD——当前会话的id号
SERIAL# ——会话的串号,当一个会话结束后,另外的会话可能会重用该会话的id号,此时就需要SERIAL#来确定唯一的会话对象。也就是说SID+SERIAL#来确定唯一的会话。
AUDSID——该会话对应的审计会话的id号
PADDR——会话对应的进程地址,关联v$process视图的addr字段可以找到会话对应的操作系统进程。
USER#——会话对应用户的id号,对应dba_users的user_id字段
USERNAME——会话对应用户的USERNAME
COMMAND——正在执行的当前命令类型,记录的是一个数值,要结合下表进行查看
Table 7-5 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 |
OWNERID——如果值为2147483644,则此列的内容无效。否则此列包含拥有可移植会话的用户标符。对于利用并行从服务器的操作,将这个值解释为一个48 字节的值。其低位两字节表示会话号,而高位字节表示查询协调程序的实例ID。
TADDR——当前有活动事务的地址,关联v$transaction视图的addr可以查出当前session正在使用的回滚段的信息以及当前事务大小等情况。
LOCKWAIT——当前会话正在等待的锁的地址,如果没有等待锁则为null。
STATUS——当前会话的状态
l ACTIVE:正在执行SQL语句
l INACTIVE:会话不是活动状态,正在等待要执行的SQL语句。
l KILLED:被标记为已经杀死
l CACHED:会话被oracle *XA缓存起来使用。不是太懂,两端提交?。。
l SNIPED :会话在等待client端的响应。
SERVER——数据库提供服务的方式
l Dedicated:专用服务器模式
l Shared:共享服务器模式
SECHEMA#——模式用户标识符
SECHEMANAME——模式用户名
OSUSER——会话的客户端系统的用户名
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进程。
MACHINE——操作系统机器名
TERMINAL——操作系统系统终端名称
可以根据主terminal查询客户端的ip
select utl_inaddr.get_host_address(terminal) from v$session where username is not null;
PROGRAM——操作系统通过什么程序连接oracle。通过本机连接的session,一般都有program。如果是通过服务器连接的session,一般都没有program。
TYPE——会话的类型。是用户创建的还是后台进程创建的。
SQL_ADDRESS和SQL_HASH_VALUE——一起来确定正在执行的SQL语句。关联v$sql,v$sqltext,v$sqlarea。
SQL_ID——正在执行的SQL语句的id
SQL_CHILD_MUMBER——正在执行的SQL语句的子句。
PREV_......前一句执行的SQL语句的信息。
MODULE——用户通过DBMS_APPLICATION_INFO.SET_MODULE进行的一些设置的名字
MODULE_HASH——MODULE的hash值
ACTION——用户通过DBMS_APPLICATION_INFO.SET_ACTION进行的一些设置的名字
ACTION_HASH——ACTION的HASH值
CLIENT_INFO——用户通过DBMS_APPLICATION_INFO.SET_CLIENT_INFO进行一些设置的相关信息。
FIXD_TABLE_SEQUENCE——当session完成一个user call后就会增加的一个数值,也就是说,如果session挂起,它就不会增加。因此可以根据这个字段来监控某个时间点以来的session性能情况。例如,一个小时前某个session的此字段数值为10000,而现在是20000,则表明一个小时内其user call较频繁,可以重点关注此session的performance statistics。
ROW_WAIT_OBJ#——被锁定行所在table的object_id。和dba_objects中的object_id关联可以得到被锁定的table name。
ROW_WAIT_FILE#——被锁定行所在的datafile id。和v$datafile中的file#关联可以得到datafile name。
ROW_WAIT_ROW#——session当前正在等待的被锁定的行。
LOGON_TIME——会话登录的时间
LAST_CALL_ET——如果会话是ACTIVE状态则表示了会话已经持续ACTIVE状态多久。如果会话是INACTIVE状态则表示会话已经处于INACTIVE状态多久。
PDML_ENABLED——这列已经被PDML_STATUS列取代,那么PDML_STATUS列代表了什么。如果是ENABLED则代表了这个会话执行DML语句可以使用oracle的并行执行技术,如果是DISABLE则代表了这个会话执行DDL语句禁止使用oracle并行执行技术。
PDDL_STATUS——和PDML_STATUS差不多,只不过这个是针对DDL语句的。
PQ_STATUS——也和以上两条差不多,只不过这个是针对select语句的。Q代表query。
CURRENT_QUEUE_DURATION——如果值为1则代表session已经在队列中,如果是0则代表还没有形成排队。
CLIENT_IDENTIFIER——客户端会话的标识符。
BLOCKING_SESSION_STATUS
VALID 状态valid为正在等待
NO HOLDER
GLOBAL
NOT IN WAIT
UNKNOWN
发生阻塞时候可以查询
到了10G,多了blocking_session 和 blocking_session_status字段,可以知道是否被阻塞。如果blocking_session_status字段是VALID,那一个有效的SID会出现在blocking_session 字段。
SQL> select sid, sql_id, PREV_SQL_ID , BLOCKING_SESSION_STATUS , BLOCKING_SESSION ,WAIT_CLASS_ID,SECONDS_IN_WAIT ,WAIT_CLASS from v$session where
2 username='KONG';
SID SQL_ID PREV_SQL_ID BLOCKING_SESSION_STATUS BLOCKING_SESSION WAIT_CLASS_ID SECONDS_IN_WAIT WAIT_CLASS
---------- ------------- ------------- --------------------------------- ---------------- ------------- --------------- ----------------------------------------------------------------
290 0hcsvq77pq2a8 dyk4dprp70d74 VALID 300 4217450380 118 Application
300 0hcsvq77pq2a8 NO HOLDER 2723168908 124 Idle
可以看到290 的进程被300的进程阻塞。
在以前如果想要查询某个session执行了那个sql语句,那需要用两个字段来查询: HASH_VALUE和ADDRESS。现在只有一个SQL_ID就可以了。
SQL> select sql_text from v$sqltext st, v$session s
2 where (st.sql_id = s.sql_id ) and s.sid=300;
SQL_TEXT
----------------------------------------------------------------
select count(*) from t2
BLOCKING_INSTANCE——模块化的实例标识符
BLOCKING_SESSION——模块化的session标识符
SEQ#——不唯一的标示每个等待的序列号
EVENT#——事件数量
EVENT——oracle的session正在等待的数据或者事件
P1TEXT——首个附加参数的描述
P1——首个附加参数
P1RAW——首个附加参数和前一个区别我还不是很懂
P2TEXT——第二个附加参数的描述
P2——第二个附加参数
P2RAW——第二个附加参数
P3TEXT——第三个附加参数的描述
P3——第三个附加参数
P3RAW——第三个附加参数
WAIT_CLASS_ID——标记等待事件种类
WAIT_CLASS#——等待事件的种类
WAIT_CLASS——等待事件的名称
WAIT_TIME——非0代表上一次session上次等待时间,0代表session当前正在等待
SECONDS_IN_WAIT——等待的时间
oracle文档的资料:
If WAIT_TIME = 0, then SECONDS_IN_WAIT is the seconds spent in the
current wait condition. If WAIT_TIME > 0, then SECONDS_IN_WAIT is the
seconds since the start of the last wait, and SECONDS_IN_WAIT - WAIT_
TIME / 100 is the active seconds since the last wait ended.
STATE
0 - WAITING (the session is currently waiting)
-2 - WAITED UNKNOWN TIME (duration of last wait is unknown)
-1 - WAITED SHORT TIME (last wait <1/100th of a second)
>0 - WAITED KNOWN TIME (WAIT_TIME = duration of last wait)
SERVICE_NAME——session的服务名称
SQL_TRACE——标示sql是否能被跟踪
SQL_TRACE_WAITS——标记是否等待事件被跟踪
SQL_TRACE_BINDS——标记是否绑定跟踪可用与否
【Oracle】详解v$session的更多相关文章
- ThinkPHP函数详解:session方法
ThinkPHP函数详解:session方法 Session方法用于Session 设置.获取.删除和管理操作. Session 用于Session 设置.获取.删除和管理操作 用法 sessi ...
- session机制详解以及session的相关应用
session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...
- 【转载】[ORACLE]详解not in与not exists的区别与用法
在网上搜了下关于oracle中not exists和not in性能的比较,发现没有描述的太全面的,可能是问题太简单了,达人们都不屑于解释吧.于是自己花了点时间,试图把这个问题简单描述清楚,其实归根结 ...
- 简单租房子实例详解---(session、ajax、json前后台数据处理、分页)
本次实例我们结合session.ajax.json前后台数据处理.分页技术做一个租房信息系统 一共有五个界面:包括 管理员和用户的登录界面 登录界面的后台 <?php session_start ...
- 巨人大哥谈Web应用中的Session(session详解)
巨人大哥谈Web应用中的Session(session详解) 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术. ...
- Oracle的exp/imp详解
原文地址:Oracle的exp/imp详解 作者:jxlazzw 备份概述 逻辑备份:备份可分为两类 ,物理备份和逻辑备份 物理备份:该方法实现数据库的完整恢复,但需要极大的外部存储设备,例如磁带库, ...
- Oracle权限管理详解
Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...
- 【Oracle XE系列之四】创建OracleXE表空间详解
创建OracleXE表空间示例 sqlplus /nolog connect sys as sysdba SQL> create tablespace OPFOCN datafile 'C:\ ...
- Oracle Analyze 命令 详解
官网的链接如下: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_4005.htm#SQLRF01105 使用DBMS ...
随机推荐
- JAVA中JavaBean对象之间属性拷贝的方法
JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...
- 在没有iis的情况下,webApi自托管(转自momo314)
第一步 新建一个控制台应用程序 并添加WebApi相关引用,注意,添加之后会默认帮你添加 System.Web.Http.WebHost 的引用,不过,折并没有什么鸟用,干掉他,然后手动添加引用 Sy ...
- ES6 find 和 filter 的区别
ES6 find 和 filter 的区别 : 遇到个功能是要分类就想说在前端过滤,不要从查数据库的时候过滤了.然后就想说除了filter还有啥好用的 发现有个find,测试一番之后发现 const ...
- mysql中列转行
通过group_concat()函数来实现 select group_concat(name) from table group by type select group_concat(name se ...
- Python入门习题1.温度转换
这一节的课堂例题为: 例1.编写一个Python程序,完成摄氏度到华氏度,华氏度到摄氏度的温度转换. 解: (1)分析问题:利用程序实现温度转换,由用户输入温度值,程序给出输出结果. (2)划分边界: ...
- P2747 [USACO5.4]周游加拿大Canada Tour
题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市.除了旅 ...
- 关于Object.create方法
ES6最新的Object.create语法是 创造一个对象 可以传参,参数为一个对象,得到的结果是一个克隆的对象, 实际上 这是基于原型的克隆 分析如下: var a={b:1}; var a1 = ...
- elasticsearch 基础 —— Inner hits
Inner hits The parent-join and nested 功能允许返回具有不同范围匹配的文档.在父/子案例中,基于子文档中的匹配返回父文档,或者基于父文档中的匹配返回子文档.在嵌套的 ...
- 英伟达GPU 嵌入式开发平台
英伟达GPU 嵌入式开发平台 1. JETSON TX1 开发者组件 JETSON TX1 开发者组件是视觉计算的全功能 开发平台,旨在让您能够快速地安装和运行. 该组件带有 Lin ...
- BZOJ1076/Luogu2473 奖励关(SCOI2008)状压DP+期望DP
题意:给n(n<=15)种宝物宝物有价值w且每个宝物有一个前置宝物(即你必须先吃过它的所有前置宝物至少一次才能吃该宝物),共有m轮游戏,每一轮会在n种宝物等概率选一个出来,因为宝物价值可正可负你 ...