Back

Oracle中的Connect、Session和Process

省流

connects (连接)、sessions(会话)和pocesses(进程)的关系:

  • connect(连接):使用plsql连接到oracle后,就是建立了一个连接(一次logon)
  • session(会话):决定同时登陆到数据库的并发用户数(数据库层面)
  • processes(进程):也决定同时登陆到数据库的并发用户数(操作系统层面)

connects 和session:

有A/B两个城市,需要从A运送白菜到B城

我们先建设一条公路(connection) 然后运送白菜过去,包括准备白菜和运送白菜以及返回等一系列的动作(session)

一条公路,可以运送0-n次白菜(session >= connection) 当然从A到B的公路也可能不只一条(connection >= 1)

某一次运送白菜,可以在真正上路时才开通某一条道路(需要session时才建connection) 一次运送不会影响别的运送的状态(同一connection上的不同session之间互不影响)

因此:

  • 一个连接可以进行多次的会话
  • 一个会话可以不依赖于某个连接,甚至没有连接(当我准备好了,真正开始运送时再建立连接)
  • 一个会话不会影响别的会话

session和processes:

每个sqllogon称为一个连接(connection),而每个连接,可以产生一个或多个会话,如果数据库运行在专用服务器方式,一个会话对应一个服务器进程(process);如果数据库运行在共享服务器方式,一个服务器进程可以为多个会话服务。

使用共享模式连接示例:

ORCL_1 =
(DESCRIPTION =
	(ADDRESS_LIST =
		(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.142)(PORT = 1521))
	)
	(CONNECT_DATA =
		(server = shared )
		(sid = orcl)
	)
)

使用专用服务器模式连接示例:

ORCL_1 =
(DESCRIPTION =
    (ADDRESS_LIST =
		(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.142)(PORT = 1521))
	)
	(CONNECT_DATA =
		(server = dedicated )
           (sid = orcl)
	)
)

常用查询sql

--允许最大进程数processes:
select value from v$parameter where name = 'processes' ;

--当前已用进程数processes:
select count(*) from v$process ;

--最大允许会话数session:
show parameter sessions

--当前已用会话数session:
select count(1) from v$session;

--查看连接数历史最大值
select resource_name,MAX_UTILIZATION,LIMIT_VALUE from v$resource_limit where resource_name in ('processes','sessions');
(MAX_UTILIZATION代表数据库自上次启动以来达到的最大值,LIMIT_VALUE代表设置的最大值)

--查询某客户端连接数据库的session值:
select * from v$session where terminal='RUIFEI'

--查询某客户端连接数据库的process值:
select * from v$process
where addr in
(select paddr from v$session where terminal='RUIFEI')

--如果是专用服务器方式连接,session和process是一样的。

--查看当前数据库使用的模式:
select count(*) from v$shared_server;(结果不为0,表示共享模式)

--当前活动的session
SELECT S.USERNAME,
       S.SID,
       S.SERIAL#,
       S.INST_ID,
       S.EVENT,
       S.WAIT_CLASS,
       S.SQL_EXEC_START,
       S.LOGON_TIME,
       S.ACTION,
       SQ.SQL_TEXT
  FROM GV$SESSION S, GV$SQLAREA SQ
 WHERE S.STATUS = 'ACTIVE'
   AND S.USERNAME IS NOT NULL
   AND S.SQL_ID = SQ.SQL_ID;
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy
© Licensed Under CC BY-NC-SA 4.0