讨论oracle 11g 会话 连接 与服务进程之间的关系

会话与连接在oracle 中的示例图:

     
          会话是 一个用户从登录到退出的过程 ,
          连接是指是的客户端到连接服务器的过程,
       一个连接可以有0个会话,1个会话,或多个会话
当用户打开sqlplus工具进会产生用户进程
可以用ps -elf |grep sqlplus |grep -v grep查看
用户进程向服务器发连接请求,转给侦听,侦听验证请求是否是自己的管理的,是服务器就生产服务器进程 ,生成连接

下面讲述会话,连接,产生进程的案例:
   1 无连接,无会话,无服务进程 只有用户进程 
      在我们登录数据库之前查看
 ps -ef | grep oracleorcl | grep -v grep ---- grep -v grep 过滤grep oracleorcl产生的进程
发现没有服务进程
当使用 sqlplus  /nolog时-------打开sqlplus工具,但不登录
[ oracle@InX-pc  ~]$ ps -ef |grep oracleoorcl |grep -v grep 
[ oracle@InX-pc ~]$ 
       说明没有建立建立连接时,没有任何会话服务器进程
[ oracle@InX-pc  ~]$ ps -elf |grep sqlplus |grep -v grep 
0 S oracle 4986 4954 0 78 0 - 15940 - 11:00 pts/0 00:00:00 sqlplus 
[ oracle@InX-pc ~]$
      说明sqlplus /nolog 至是打开了客户端工具 产生了客户端进程
2 单个连接,单个会话,单个进程
  使用sys身份登录,
[ oracle@InX-pc ~]$ sqlplus / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Mon Nov 3 11:10:22 2014 

Copyright (c) 1982, 2009, Oracle. All rights reserved. 

Connected to an idle instance. 

SQL> 
[ oracle@InX-pc ~]$ ps -ef |grep oracleorcl |grep -v grep; 
oracle 5084 5083 0 11:10 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
[ oracle@InX-pc ~]$ 
有一个对应的服务器进程被产生
SQL> select sid,serial#,username from v$session where username ='SYS';------- 注意:唯一标记一个会话必须输入sid ,serial#

       SID SERIAL# USERNAME
---------- ---------- ------------------------------
        21 5 SYS

SQL>
还产生了一个会话
3. 无连接,无会话,单个进程
用exit退出sqlplus 
用SCOTT用户登录sqlplu scott/oracle
[ oracle@InX-pc ~]$ ps -ef |grep oracleorcl |grep -v grep; 
 oracle 5400 5399 0 11:29 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
[ oracle@InX-pc ~]$ 
在管理员用户下可以看出
产生了一个用户名为scott的用户
SQL> select sid,serial#,username from v$session where username='SCOTT';

       SID SERIAL# USERNAME
---------- ---------- ------------------------------
        29 45 SCOTT
SQL>
产生一个进程
断开scott会话:
SQL> disconnect
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL>
[ oracle@InX-pc ~]$ ps -ef |grep oracleorcl |grep -v grep; 
oracle 5400 5399 0 11:29 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
oracle 5524 5523 0 11:38 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) ----这个进程是我又以管理员身份登录时产生的服务进程
[ oracle@InX-pc ~]$ 
这时5400进程仍然存在
SQL> select sid ,serial#,username from v$session where username='SOCTT';
no rows selected
断开了会话
说明,会话的生成会用生成服务进程 ,断开会话,些进程不一定断开,
kill -9 2539 杀死这些没有会话的进程,释放资源
正常退出不要用discconect ---->应该用exit 或者quit
4. 单个连接,多个会话,单个进程
一个连接有多个会话是非常普遍的。使用SQL*Plus可以说明连接和会话间的区别。使用autotrace命令时可产生两个会话。通过一个使用单个进程的连接也可以建立两个会话。首先,执行以下操作。
用管理员登录 sqlplus / as sysdba  用putty开两个会话 --- 会话1, 会话2

服务进程
[ oracle@InX-pc ~]$ ps -ef |grep oracleorcl |grep -v grep; 
oracle 5794 5793 0 12:07 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
oracle 5801 5800 0 12:08 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
[ oracle@InX-pc ~]$ 
SQL> select sid ,serial#,username from v$session where username is not null;
       SID SERIAL# USERNAME
---------- ---------- ------------------------------
        22 52 SYS
        34 10 SYS
SQL>
在会话1 启用
set autot on
查看进程发现进程并没有变多
[ oracle@InX-pc ~]$ ps -ef |grep oracleorcl |grep -v grep; 
oracle 5794 5793 0 12:07 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
oracle 5801 5800 0 12:08 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 
[ oracle@InX-pc ~]$ 
在到会话2 执行
SQL> select sid ,serial#,username from v$session where username ='SYS';
SID SERIAL# USERNAME
---------- ---------- ------------------------------
47 589 SYS
54 184 SYS
58 70 SYS
多了一个会话
服务进程数没有变 说明一个连接可以建立多个会话


下面介绍 一些关于会话和进程 的参数:详细请参照 ROACLE 11G联机文档sessions内容
SQL> show parameter sessions


NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

java_max_sessionspace_size integer 0

java_soft_sessionspace_limit integer 0

license_max_sessions integer 0

license_sessions_warning integer 0

sessions integer 247


sessions ??? 含义-----》参数----》reference ---->ctrl+f 输入sessions 

Parameter type Integer 整数型

Default value Derived: (1.5 * PROCESSES) + 22

SESSIONS specifies the maximum number of sessions that can be created in the system. Because every login requires a session, this parameter effectively determines the maximum number of concurrent users in the system. You should always set this parameter explicitly to a value equivalent to your estimate of the maximum number of concurrent users, plus the number of background processes, plus approximately 10% for recursive sessions.

sessions允许建立的最大会话数,也是归档最大的并发用户数

建议:设置为最大的并发用户+后台进程数+10%可重用会话数量


增加用户并发数----》修改sessions 值----》sessions 由PROCESSES 决定

sessions是processes 的衍生参数 通过修改processes去实现增加sessions的大小

关于PROSESSES 详细请参考oralce11 联机文档prosesses


Default value 100

PROCESSES specifies the maximum number of operating system user processes that can simultaneously connect to Oracle. Its value should allow for all background processes such as locks, job queue processes, and parallel execution processes.


决定同时连接oracle的进程数 包含后台进程


查看process

SQL> show parameter processes


NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

aq_tm_processes integer 0

db_writer_processes integer 1

gcs_server_processes integer 0

global_txn_processes integer 1

job_queue_processes integer 1000

log_archive_max_processes integer 4

processes integer 150



增加进程数 必须重启生效


alter system set processes =200 scope=spfile ;

startup force;


show parameter processes


SQL> show parameter processes


NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

aq_tm_processes integer 0

db_writer_processes integer 1

gcs_server_processes integer 0

global_txn_processes integer 1

job_queue_processes integer 1000

log_archive_max_processes integer 4

processes integer 200


SQL> show parameter session


NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

java_max_sessionspace_size integer 0

java_soft_sessionspace_limit integer 0

license_max_sessions integer 0

license_sessions_warning integer 0

session_cached_cursors integer 50

session_max_open_files integer 10

sessions integer 322


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值