dcd 起初是专为 客户机没有从会话中断开联接的情况下断电的环境设计的.

dcd由服务端开始建立联接. 这时候sql*net 从参数文件中读取变量, 设置一个定时器定时产生信号. 这个时间间隔是sqlnet.ora文件中的sqlnet.expire_time提供的.

当定时器设定的时间到了之后, 服务器上的sql*net 发送一个探测包到客户端.(如果是数据库联接, 目的端的服务器发送探测包到另一端). 探测包是由空的sql*net包组成, 不体现sql*net层任何数据, 但会在下一层的网络协议中产生数据流量.

如果客户端的联接仍然是活动的, 探测包被丢弃. 计时装置复位. 如果客户端异常断掉. 服务器将收到由发送探测包的调用发出的错误. sql*net 将会通知操作系统释放联接占用的资源.

在unix服务器上 sqlnet.ora 文件必须存在$tns_admin 或者 $oracle_home/network/admin目录下.   而不是/etc 或者 /var/opt/oracle

同时也应该注意, sql*net 2.1.x中 一个活动的孤儿进程(例如, 单独的查询进程) 在查询完成之前不会被杀掉. sql*net 2.2中孤儿进程占用的资源将会被无条件释放.

这只是服务器的特性,  客户端将会支持任何sql*net v2 的发行版

协议栈的功能

虽然 死联接检测是在sql*net层的, 但要成功执行在很大程度上要依靠下层协议栈. 例如, 如果在sqlnet.ora文件中 设置sqlnet.expire_time=1, 但是一个孤儿进程很有可能在间隔到了之后被清除掉.

tcp/ip协议是一个面向联接的协议, 同样的, 这个协议在超时时执行重传数据包的操作, 确保数据的安全和数据包的顺序. 如果对探测包没有及时回应, tcp/ip栈将在一段时间内重传这个包. 当tcp/ip放弃重传之后, sql*net 将会收到 探测失败的通知.

tcp/ip超时的时间取决于 tcp/ip栈,  超时很多分钟是很常见的, 这个涉及到很多客户, 许多协议层的重传会造成孤儿进程被杀掉之前要等很长时间.

最简单的办法检测协议栈有这个延迟需要测试不同的dcd间隔.

测试协议栈

设置参数sqlnet.expire_time = 1 min, 注意清除孤儿进程需要的时间. 然后设置为 5min,

再次观察这个时间. 如果服务器没有释放资源是由于tcp/ip超时造成的, 清除影子的时间需要增加到4min.

如果tcp/ip超时重传是造成问题的所在, 操作系统的内核参数应该调整一下, 在unix平台下, /usr/include/netinet/tcp_timer.h 中包含着配置参数.

减小重传间隔可能会影响系统的其它部分, 因为实际上减小了联接处理数据的窗口, 可能会在系统重负荷的情况下丢失联接, 远程慢的联接会受到这个更改的影响。

系统参数会影响超时重传的有 tcp_ttl, tcptv_persmin, tcptv_max, 和 tcp_lingertime等。

********************

为了防止对系统其他进程产生影响, 在调整系统参数时最好向相关的厂家咨询

*******************

监控 死联接检测

检测dcd是否打开和运行正常最好的方法就是 产生一个服务跟踪文件, 查找 dcd探测包.

要产生一个服务跟踪文件, 在sqlnet.ora文件中设置trace_level_server=16, tace_directory_server=;, 跟踪文件svr_;.trc文件会在那个目录下产生.

dcd 是否打开?

在跟踪文件中查找:

osntns: enabling dead connection detection (1 min)

时间间隔应该和sqlnet.expire_time的一样.

dcd是否正常工作?

在跟踪文件中应该有类似:nstimexp: entrynstimexp: timer expired at 05-oct-95 12:15:05nsdo: entrynsdo: cid=0, opcode=67, *bl=0, *what=1, uflgs=0nsdo: nsctx: state=8, flg=0x621c, mvd=0nsdo: gtn=93, gtc=93, ptn=10, ptc=2048nsdoacts: entrynsdofls: entrynsdofls: data flags: 0x0nsdofls: sending nsptda packetnspsend: entrynspsend: plen=10, type=6nttwr: entrynttwr: socket 4 had bytes written=10nttwr: exitnspsend: 10 bytes to transportnspsend:packet dumpnspsend:00 0a 00 00 06 00 00 00 |........|nspsend:00 00 00 00 00 00 00 00 |........|nspsend: normal exitnsdofls: exit (0)nsdoacts: flushing transportnttctl: entrynsdoacts: normal exitnsdo: normal exitnstimexp: normal exit其中nspsend:00 0a 00 00 06 00 00 00 |........|nspsend:00 00 00 00 00 00 00 00 |........|

代表探测包, 是由10个字节组成, 当协议头和尾被加上后, 这个包大概有70个字节长,

如果dcd是打开的, 当定时器的时间到了之后, 在跟踪文件里会看到探测包. 在unix系统下, 可以用:

tail -f svr_;.trc 查看.

了解dcd的问题和局限

在很少的问题报告中, 最值得注意的是dcd在windosnt下很差的性能, 死联接只有在服务起重启或者数据库重启的情况下被清除. dcd在nt下怎样正确的工作依靠客户端的协议. sql*net v2.3 比其他发行版改进了一些性能。

见bug#303578

在sco unix下, 有个问题是 当dcd定时器到时后, 服务进程死循环, 消耗了大量的cpu资源, 这个问题是由于不正确的信号处理造成的,  可以禁止dcd来解决

见bug#293264

如果只是客户应用结束, 孤儿进程的资源不会被释放, 只有当客户端重启之后, dcd才是放这些资源, 例如, windows应用被杀掉, 客户端仍在运行, 探测包可以被收到, 像进程仍然活动着一样被丢掉. 看起来好像dcd检测客户端机器, 而不是客户端进程.

见bug#280848

dcd依靠探测包来检测联接, 所以在半双工的网络协议中, 这是不可能的, 所以dcd在appc/lu6.2 等半双工协议下不能用.

内网联接是用beq协议不能支持dcd, ipc协议可以使用

dcd 在协议层是很消耗资源的, 所以如果要用dcd来清除死进程, 会加重系统的负担, 任何时候, 干净的退出系统, 这是首要的。

oracle的DCD,死联接检测(DCD)的探讨与研究相关推荐

  1. IBM收购数据库安全公司 围剿Oracle之心不死

    IBM重金收购数据库安全公司 围剿Oracle之心不死 数据库安全新兴企业Guardium是以色列Log-On软件的子公司.主要产品是向客户提供可扩展的企业安全平台,可实时保护企业应用的数据库. 文/ ...

  2. matlab死亡时间推测实验,死后间隔时间推断的新研究.pdf

    死后间隔时间推断的新研究.pdf 还剩 100页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 简称PMIETS ...

  3. 基于Adaboost算法的车牌检测在OpenCV上的研究与实现

    目录结构 E:\Adaboost\ ---------positive\               //正样本文件夹 ---------pimages\       //正样本图片所在文件夹 --- ...

  4. 【MFC基础入门】基于Adaboost算法的车牌检测在OpenCV上的研究与实现

    目录结构 E:\Adaboost\---------positive\ //正样本文件夹---------pimages\ //正样本图片所在文件夹---------pos.dat //正样本集描述文 ...

  5. oracle rac 仲裁盘_【学习笔记】深入研究Oracle RAC节点驱逐的条件和案例

    天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle数据库RAC环境中节点间管理的文章,详细介绍了RAC节点驱逐条件和管理方法. 本站文章除注明转载外,均为本站原创: 转载自loveOra ...

  6. 【调剂】北京林业大学工学院的老师实验室招机械工程学硕/专硕调剂生,主要进行人工智能、智能检测、机械臂控制研究...

    公众号[计算机与软件考研]每天都会发布最新的计算机考研调剂信息! 点击公众号界面左下角的调剂信息或者公众号回复"调剂"是计算机/软件等专业的所有调剂信息集合,会一直更新的. 北京林 ...

  7. 目前异常检测(Anomaly Detection)研究方法的分类

    目前异常检测(Anomaly Detection)研究方法的分类 主要的研究方法分类: 有三大类异常检测方法.前提是在假设数据集中大多数实例都是正常的前提下, 无监督异常检测方法能通过寻找与其他数据最 ...

  8. 牛刀小试Oracle之ORACLE 11GR2 RAC安装配置--检测GI软件是否正常(三)

    1. 切换至grid用户 [root@Zracnode1 ~]# su - grid 2.查看CRS状态(目前Oracle11GR2官方文档,不建议用如下命令检测了,等我有时间在整理补充) [grid ...

  9. 如何查看oracle死鎖,怎么查看oracle是否有死鎖

    一般情況下會發生Ora-04021錯誤 1.被鎖住 查看v$locked select b.sid,b.serial#,b.machine,b.terminal,b.program,b.process ...

最新文章

  1. 创建可重用代码(C++)
  2. 排序_简单排序_选择排序
  3. 文档协同编辑帮助企业迎接大数据时代
  4. neural network ppt for support vector machine
  5. 半夜,滴滴司机问我会LRU吗?
  6. linux打开端口访问权限54321,3.5.1 访问不存在的端口
  7. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)----第7节: 获取异线程释放的对象...
  8. 华为:行业危机时,只做一件事:抢人!
  9. 因为计算机丢失user32.dll,user32dll丢失程序打不开|Win7系统开机提示Uxtheme.dll丢失如何解决?...
  10. C# Winform 实现屏蔽键盘的win和alt+F4的实现代码
  11. 解决移动端两端布局的input+fixed的bug
  12. 腾讯笔试题——逆序对
  13. 【火灾疏散建模】基于MATLAB的火灾人员疏散建模编程和仿真分析
  14. HTML5实现音频和视频嵌入,如何利用HTML5实现音频和视频嵌入的方法
  15. NAFSM中值滤波器讲解与实现
  16. android模拟器华为账号,夜神模拟器怎么玩华为账号游戏
  17. 【论文笔记】:CornerNet: Detecting Objects as Paired Keypoints
  18. 游戏任务设计(4):Puzzle、Challenge和任务叙事
  19. 跨境电商和淘宝哪个好
  20. 【Android】【UI】解决DialogFragment反复使用引起的并发问题和状态错误问题

热门文章

  1. Ubuntu开启SSH远程登录
  2. 如何用css画胡子-单标签实现胡子效果
  3. Vue--template标签--自动补齐
  4. 项目经理如何准确地跟踪项目进度
  5. maven制作脚手架
  6. 局域网arp攻击_arp欺骗与防御
  7. [转]如何做到高效配合?浅谈项目管理中的闭环思维
  8. fuzz测试和ssh私钥认证爆破的一次渗透
  9. 机器视觉LED光源类型及技术简介
  10. 作为过来人给Python编程入门者的三点忠告