oracle 不活动的连接,死连接或不活动会话_DB处理机制

查看僵死进程(process参数大于session,一个process可能对应1个或多个session)

select * from v$process where addr not in (select paddr from v$session) and pid not in (1,17,18)

Dead connections:死连接(处理方法SQLNET.EXPIRE_TIME)

These are previously valid connections with the database but the  connection between the client and server processes has terminate abnormally.有些之前合法的连接,但是由于客户端和服务器进程的异常中断,这种情况下,后台进程跑在服务器端,而会话在数据库端不会中断。当死连接启动,NET8(服务端)会发送一个包到客户端。如果客户端是活动的,这个包就被丢掉。如果客户端已经被中断,服务器端将接收一个错误,将会中断该会话。

INACTIVE Sessions:不活动会话(处理方法profile.IDLE_TIME)

These are sessions that remain connected to the database with a  status in v$session of INACTIVE.

用户开始一个会话,运行一段时间后,保持相当一段时间的空闲。会话与服务器端保持连接,但是状态为inactive.

DCD的具体原理:

DCD是Dead Connection Detectio缩写,当一个新的数据库连接建立后,SQL*Net读取参数文件的SQLNET.EXPIRE_TIME设置(如果设置了的话),在服务端初始化DCD,DCD会为这个连接创建一个定时器,当该定时器超过SQLNET.EXPIRE_TIME指定时间间隔后,就会向客户端发送一个probe package(侦测包),该包实质上是一个空的SQL*NET包,不包括任何有用数据,它仅在底层协议上创建了数据流。如果此时客户端连接还是正常的话,那么这个probe package就会被客户端直接丢弃,然后Oracle服务器就会把该连接对应的定时器重新复位。如果客户异常退出的话,侦测包由客户端的IP层交到TCP层时,就会发现原先的连接已经不存在了,然后TCP层就会返回错误信息,该信息被ORACLE服务端接收到后,ORACLE就会知道该连接已经不可用了,于是SQL*NET就会向操作系统发送消息,释放该连接的相关资源。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值