Oracle监听连接时间过长的解决

一、连接的整个流程

1、A.客户端:(1)A-->B 发起连接  (9)与Server Process交互,完成连接

2、B.监听进程:(2)B-->C fork子进程并等待 (7)B-->D 传送客户端信息

3、C.监听子进程1:(3) C-->D fork子进程 (4)C-->B 子进程结束

4、D.子进程2(Server Process) (5)D-->D exec Oracle (6)D-->B 监听传送数据 (8)D-->A 与客户端交互

二、整个监听过程的处理流程如下几步:

利用操作系统工具跟踪:

strace -rf-o /gyj/lsnr.log -p 4913

1、监听接受客户端的TCP连接,并获取客户端发过来的TNS数据包

4926      0.000053 getsockname(8, {sa_family=AF_INET6, sin6_port=htons(1521),inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0,sin6_scope_id=0}, [9169787475114065948]) = 0

4926      0.000226 getpeername(8, 0x7fff2c68e5f8, [9169787475114065948]) = -1ENOTCONN (Transport endpoint is not connected)

4926      0.000055 accept(8, {sa_family=AF_INET6, sin6_port=htons(42055),inet_pton(AF_INET6, "::ffff:192.168.0.103", &sin6_addr),sin6_flowinfo=0, sin6_scope_id=0}, [120259084316]) = 12

4926      0.000063 getsockname(12, {sa_family=AF_INET6, sin6_port=htons(1521),inet_pton(AF_INET6, "::ffff:192.168.0.103", &sin6_addr),sin6_flowinfo=0, sin6_scope_id=0}, [120259084316]) = 0

4926       0.000051 fcntl(12, F_SETFL,O_RDONLY|O_NONBLOCK) = 0

4926      0.000034 getsockopt(12, SOL_SOCKET, SO_SNDBUF, [3200064202492396996],[4]) = 0

4926      0.000033 getsockopt(12, SOL_SOCKET, SO_RCVBUF, [3200064202492433792],[4]) = 0

4926      0.000036 setsockopt(12, SOL_TCP, TCP_NODELAY, [1], 4) = 0

4926      0.000087 fcntl(12, F_SETFD, FD_CLOEXEC) = 0

2、监听进程打开用于与子进程通信的管道,同时fork一个子进程,也就是前面我们称为“监听子进程1”的子进程,这里进程号为10209。然后监听进程一直等待,直到这个子进程10209结束

4926      0.000053 pipe([13, 14])      = 0

4926      0.000037 pipe([15, 16])      = 0

4926      0.000042 clone(child_stack=0,flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,child_tidptr=0x2b3d814b1320) =10209

4926      0.000765 wait4(10209,  <unfinished ...>

时间: 2024-10-01 20:01:10

Oracle监听连接时间过长的解决的相关文章

ORACLE监听程序打开后自动关闭,一个很常见却很棘手的问题

问题描述 ORACLE监听程序打开后自动关闭,一个很常见却很棘手的问题 这个是打开监听时候报的错误. 命令行启动报错 现在主机名 listener.ora tnsnames.ora 问题出在哪里了? 我自己也在找办法解决,c币有限,只是希望遇到过类似问题的朋友分享下自己的经验.问题解决之后希望可以给大家带来便利

【Oracle】修改oracle监听端口

修改oracle 监听端口号,过程相对比较简单: 1 修改 listener.ora ,tnsnames.ora 文件中的端口号 2 重启监听 lsnrctl stop ,lsnrctl start 上面的过程是对于 监听名为默认的LISTENER 而言的,如果listener.oar文件中的监听名不是默认的,就重启时必须指定监听名.比如将端口号由1521改为1523 oracle@rac3:/opt/oracle/11.2.0/alifpre/network/admin>vi listener

AIX 日志清理 监听日志清理--过大的Oracle监听日志文件处理

AIX 日志清理 监听日志清理--过大的Oracle监听日志文件处理 Oracle监听器日志文件(通常叫做listener.log)是一个纯文本文件,它的大小是一直不断增长的,在一个生产Oracle服务器上,DBA会每日查看该文件,如检查监听器是否有异常停止,是否有恶意攻击连接等,当这个文件特别大的时候,打开和浏览文件内容时可能比较慢.这时可能会想到将当前的日志文件备份一下,然后重新创建一个新的日志文件,但Oracle的监听器在运行时是不允许对其日志文件做删除,重命名操作,于是只有停止监听器.重

服务-oracle监听关闭后无法启动了。

问题描述 oracle监听关闭后无法启动了. 我登录PL/SQL的时候提示无监听程序,我就把服务里面OracleOraDb10g_home1TNSListener关闭了,再启动就报错.网上一大堆乱七八糟的答案没一个有用的.有谁清楚怎么回事吗. 解决方案 监听文件有问题吧,怎么key=这打印出来的括号也没有匹配,看看listener.ora文件中写的格式是否有问题 解决方案二: 能不能直接把这个oracle服务给关闭了? 解决方案三: 如果你安装的是oracle完整版,可以用oracle自带的Ne

端口-oracle监听启动后停止

问题描述 oracle监听启动后停止 如图所示,之前好好的,昨天突然发现监听启动不了了,试过网上很多方法,包括修改listener.ora的IP,主机名:把监听改为手动后启动:命令启动监听弹出图二的错误:删除监听的时候会提示1521端口被占,但是换了其他端口全都提示被占.而且cmd命令显示1521没有被占.求高手帮忙! 解决方案 http://jingyan.baidu.com/article/d8072ac45d9860ec95cefdff.html

[20160418]修改oracle监听端口.txt

[20160418]修改oracle监听端口.txt --上午开发提出要修改oracle的监听端口,我以前测试遇到过一些问题: --链接: http://blog.itpub.net/267265/viewspace-758983/ -- 但是在11.2.0.4下遇到以前不一样的情况,时间太久了,测试在2013年做的,也许现在存在一些变化. 1.无静态注册监听: SYS@book> @ &r/ver1 PORT_STRING                    VERSION       

[20130422]修改oracle监听端口.txt

[20130422]修改oracle监听端口.txt 昨天朋友想尝试修改oracle的缺省监听端口,测试没有通过,而我在我的测试机器通过,通过对比监听文件,我发现其中的差异,问题出在动态注册以及静态注册的问题,把一些测试记录下来,便于理解动态以及静态注册监听的问题. 1.测试环境: SQL> @verBANNER--------------------------------------------------------------------------------Oracle Databa

Linux下修改Oracle监听地址

如果你的服务器换了ip怎么办? 如果你的服务器换了名字怎么办? 以前的小伙伴怎么办? 以前的老客户怎么办? 没关系,简单教你修改监听地址,老朋友随便找! 想要修改监听地址首先要找到两个文件,确定两样东西! 第一 你的主机名字? 第二 你的IP地址? 第三 你的listener.ora在哪里? 第四 你的tnsnames.ora在哪里? 原来的文件监听的是localhost,这个名字在/etc/hosts中会被映射成Ip地址127.0.0.1 lisenter.ora 目录在 /opt/oracl

Android onKeyDown监听返回键无效的解决办法

Android onKeyDown监听返回键无效的解决办法 当我们的Activity继承了TabActivity,在该类中重写onKeyDown是监听不到返回键的, 具体解决方法如下: 重写dispatchKeyEvent /** * 退出 */ @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAct