Oracle sessions & processes关系

来源:互联网 发布:珠宝绘图软件 编辑:程序博客网 时间:2024/04/29 07:13

第一:一个连接可能产生多个session,一个session可能产生多个processes,同样,一个processes可能对应多个sessions(看到过一个processes只对应一个session?)

第二:会话sessions和进程processes的关系 每个DB login称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式, 一个会话对应一个服务器进程(process),如果数据库运行在共享服务器方式
第三:session & process的关系: sessions=1.1*processes + 5,修改processessessions值必须重启oracle务器才能生效
第四:session状态解析(SELECT * FROM v$session WHERE username='***' ORDER BY status)
a. SPINED状态的session问题,根据@dbsnake大拿的意思,这种状态是Oralce自身判断需要kill -9干掉OS进城后的状态,但该session还在V$session,这时只能用alter system干掉该session。至于上述"SPID不是OS进程的ID么"的问题,则是因为Oracle内部已经用kill -9干掉该进程了,那当然提示no such process等错误。

b. KILL状态的session,是使用alter system从Oracle级干掉的session,等待事务回滚。
c. INACTIVE状态表示当前的这个session处于非活动状态,比如打开一个PLSQL但没有操作。
d.ACTIVE表示正处于active,例如当前在一个PLSQL的SQL Window。
1. 使用SQL命令行操作验证 sessions=1.1*processes + 5: 

  1. 1 打开sql命令行,接入数据库(cmd: conn username/password@db_username)
  1.2 查看processes数量:150 (cmd: show parameter process)
  1.3 查看session数量:170(cmd:show parameter session )
  1.4 验证公式 1.1*150+5 = 170 (cmd: select 1.1*150+5 from dual;)

2.常用SQL语句

select * from v$resource_limit; --通过v$resource_limit视图可以查询/监控相关重要资源的限制值和使用情况:
select count(*) from v$process;  --查询数据库当前进程的连接数:
select count(*) from v$session;  --查看数据库当前会话的连接数:  
select count(*) from v$session where status='ACTIVE'; --查看数据库的并发连接数:  
select sid,serial#,username,program,machine,status from v$session; --查看当前数据库建立的会话情况: 
select name,value from v$parameter where name in ('processes','sessions','open_cursors');  --查看当前DB中的进程、会话、游标的设置情况;  
alter system set processes = 300 scope = spfile; --修改数据库允许的最大连接数:(需要重启数据库才能实现连接数的修改)  
select osuser,a.username,cpu_time/executions/1000000||'s',sql_fulltext,machine
  from v$session a,v$sqlarea b
  where a.sql_address = b.address
  order by cpu_time/executions desc;   --查看当前有哪些用户正在使用数据:

3. 常用SQL命令行

  启动oracle:su - oracle
  进入sql: sqlplus system/pwd as sysdba  
  启动数据库: startup                                      
  启动监听:lsnrctl start                              
  关闭数据库:shutdown immediate;
  启动数据库:startup mount;
  alter database open;


0 0