1.V$SESSION视图对应"会话"信息
每一个连接到Oracle数据库的会话都能在该视图中对应一条记录,根据该视图中的信息可以查询该会话使用的用户,正在执行或者刚刚执行的SQL语句,连接者的信息等。
V$SESSION视图中的列很多,常用到的会有如下几列:
SID:会话的标识,具有唯一性,通常要对某个会话进行分析前,首先就需要获得该会话的SID。
SERIAL#:会话的序号。
PADDR:会话所属进程的地址,关联V$PROCESS视图即可查到该会话的所属进程,然后再通过V$PROCESS视图得到对应的操作系统进程号(Windows对应的是线程号)。
USERNAME:创建该会话的用户名。
CLIENT_INFO:还记得SET COMMAND ID命令吗?该命令设置的值就会在V$SESSION.CLIENT_INFO中体现。
OSUSER:客户端操作系统的用户名。
MACHINE:客户端的机器名。
TERMINAL:客户端运行的终端名。
PROGRAM:客户端执行的程序名。
SQL_ADDRESS:执行SQL的地址。
SQL_HASH_VALUE:执行SQL的HASH值,与SQL_ADDRESS关联查询其他SQL相关视图后即可查询会话当前正在执行的SQL语句。
EVENT:当前会话的等待事件。
例如:已知设置的client_info值,查询会话的相关信息:
- SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
- FROM V$SESSION WHERE client_info like '%id=rman%';
2.V$PROCESS视图对应"连接"信息
V$PROCESS视图中的一条记录对应操作系统中的一个进程(Windows中为线程),该视图中的SPID即操作系统中的进程号,通过该视图就可以将Oracle中的会话、连接与操作系统中的进程关联起来。
例如:通过下列SQL语句,通过关联查询V$PROCESS和V$SESSION获得执行RMAN操作的进程的SID与SPID信息:
- SELECT S.SID, S.SERIAL#, P.SPID, S.CLIENT_INFO
- FROM V$PROCESS P, V$SESSION S
- WHERE P.ADDR = S.PADDR
- AND CLIENT_INFO LIKE '%id=rman%'