Oracle的session和process的区别与分析

2025-04-06 12:44:40
推荐回答(2个)
回答1:

session 和 process的区别:
连接connects,会话sessions和进程pocesses的关系
每个sql login称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,
一个会话对应一个服务器进程(process),如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。
session 和 process的关系,tom在他的书里写的很清楚了
一个process可以有0个,1个或者多个session
一个session也可以存在这个或者那个process中
oracle中session跟process的研究
使用方法:
首先看看v$session跟v$processwww.hbbz08.com 中主要的字段属性:
v$session(sid,serial#,paddr,username,status,machine,terminal,sql_hash_value,sql_address,,,)
v$process(addr,spid,,,)
可看到v$session中的paddr跟v$process中的addr对应,也即会话session在数据库主机上对应进程的进程地址.
这里我们要先定位该session正在执行的sql语句,此时我们可以查询如下的语句: select sql_text
from v$sqltext_with_newlines
where (hash_value,address) in (select sql_hash_value,sql_address from v$session where sid=&sid) order by address,piece

回答2:

session(会话)的后面一定有一个process(进程)支撑。但是process(进程)不一定是session(会话)。
数据库启动了,你连接数据库,建立了一个session,那么就一定是建立了一个process。
那么再没有人连接数据库的情况下,数据库有没有session呢?答案是有,数据库的一些进程,会自动显示在V_session(美国元的符号打出来就说特殊字符,所以用_代替。)比如pmon,smon等(查看该表一个字段能看出来,这个是什么进程),虽然他们本身和session无关,但是也在session中有显示,那么我们就暂且当做这些也是session。那么有没有不在session中显示的process呢?答案是有,比如dbwN(N是数字),这个是不在session中显示的。session视图中显示的是dbwr进程。也就是说有些进程是不在session视图中显示的,那么这些process就不是session。
当然,如果你的session专门指会话(连接)的话,那么系统进程pmon,smon等就是,不是session而是process的典型了。