oracle listener troubleshooting 小结
监听诊断
1.tnsping的作用及适用场景:
检查tnsnames.ora文件中的连接串是否配置,或者配置是否符合语法。
根据执行tnsping命令所消耗的时间来诊断数据库的性能问题。
检查服务器端的监听是否启动。tnsping主要检查的是远程监听是否启动在相应的IP地址和端口上,并不检查监听中的实例服务和句柄(handle)。
2.跟踪客户端会话连接过程:
在客户端sqlnet.ora设置如下参数:
TRACE_LEVEL_CLIENT=16
TRACE_FILE_CLIENT=CLIENT
TRACE_TIMESTAMP_CLIENT = ON
TRACE_DIRECTORY_CLIENT=<path wheretnsping.trc will go>
应用场景:
定位客户端无法连接至数据库具体原因(如防火墙)。
跟踪结束之后,务必关闭以上参数!
3.跟踪本地sqlplus连接过程
跟踪服务器端sqlplus连接过程(AIX下):
truss -D sqlplus„/as sysdba‟
应用场景:
本地sqlplus无法连接至数据库
连接hang
4. 跟踪客户端tnsping连接过程
跟踪客户端tnsping过程,在客户端
sqlnet.ora设置如下参数:
TNSPING.TRACE_LEVEL =[OFF|USER|ADMIN|SUPPORT]
TNSPING.TRACE_DIRECTORY = <path wheretnsping.trc will go>
跟踪结束之后,注意关闭以上参数!
5. 跟踪监听处理过程
在HP-UX平台中,可以使用tusc命令跟踪
监听进程:
tusc -T hires -afpolsnr3.log <pid进程号>
应用场景:
监听连接缓慢,定位某一环节。
6. 客户端无法连接至服务端的故障处理思路
尝试登陆:
(1)客户端能tnsping通吗?能ping通吗?
(2)服务端sqlplus“sys/xxx@xxxas sysdba”可以吗?
(3)服务端sqlplus“/as sysdba”可以吗?
观察监听状态:
(1)执行lsnrctl status/service
(2)查看监听进程内存和CPU资源使用率
(3)查看listener.ora,sqlnet.ora,listener.log
尝试跟踪:
(1)客户端设置跟踪参数
(2)服务端跟踪sqlplus连接过程
查看数据库状态:
(1)检查主机资源消耗情况
(2)检查数据库等待事件:v$session_wait
(3)检查$ORACLE_HOME/bin/oracle权限和大小
7. $ORACLE_HOME/bin/oracle
为可执行文件,其权限为:
在服务端派生服务进程(通过tusc命令跟踪):
出现ORA-12547:TNS:lostcontact或者ORA-12537:
TNS:connectionclosed错误,应该首先检查
$ORACLE_HOME/bin/oracle文件
安装数据库软件时,如果缺包,那么该文件大小很可能为0
8. 监听优化思路
监听使用串行方法处理客户端连接,建议使用连接池。高并发的短连接可能会使监听CPU消耗100%。
尽量少使用dblink,这个也是性能杀手。
设置arraysize,减少客户端和服务端包传递次数。
调整操作系统的TCP的发送和接受缓冲区大小。如AIX的tcp_sendspace和tcp_recvspace
调整Oracle的TCP的发送和接受缓冲区大小。调整SEND/RECV_BUF_SIZE大小。
通过设置监听参数QUEUESIZE来提高监听处理的最大并发数。
增加监听来处理更多的并发数。比如在服务器端分别开设1521端口和1522端口的监听
注意监听日志大小,如4G限制。