暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

数据库连接故障诊断

原创 大柏树 2022-05-07
1810

一.背景

在工作中,总是会碰到数据库连不上的问题,有很多原因会导致连接不上,例如网络限制、部分平台监听日志大于4G、防火墙、客户端问题、数据库异常、服务器主机资源不足等。《DBA攻坚指南》里面对连接问题提供了一个排查思路,我这里整理出来做个笔记。

二.几种连接异常的现象

  • 之前连接正常,在无任何改动的情况下,所有客户端无法连接,如果网络是正常的则很有可能是服务器端的问题。
  • 如果大部分连接正常,只有个别或新添加的客户端无法连接,则很有可能是客户端自身的问题。
  • 若与服务器同网段的连接是正常的,而跨网段的连接出现异常,则有可能是网络限制(如没有正确添加路由等)问题。
  • 连接缓慢或者间歇性无法连接,排除监听日志4GB的限制和资源不足的情况,在网络正常的情况下需要开启跟踪,以便有更多信息进行具体分析。
  • 数据库连接模式有共享和独占两种模式,如果连接缓慢,而且tnsnames.ora里面描述连接模式为共享,那就需要检查shared_servers、max_shared_servers等参数的设置。 现在内存资源充足,一般都是使用独占模式,也建议使用独占模式。

三.排查思路

客户端网络–客户端防火墙–端口–监听–服务端监听–服务端数据库状态–服务端设置
Oracle数据库连接故障诊断思维导图.png

四.sqlnet介绍

sqlnet是oracle提供的用于网络交互的一个工具,比如,解析客户端发起的连接、对连接进行辨别、特定连接的阻隔限制、启用日志跟踪等一系列功能。

4.1.sqlnet.ora默认内容

--SQLNET.ORA里面关于允许连接的默认内容: windows: SQLNET.AUTHENTICATION_SERVICES=(NTS) --说明允许本地曹组系统用户认证。 linux: NAMES.DIRECTORY_PATH=(TNSNAMES,EZCONNECT) tnsnames和ezconnect表示允许的连接模式。 --连接串:sqlplus system/oracle@orcl180 --简易连接:sqlplus system/oracle@192.168.59.180:1521/orcl

4.2.sqlnet.ora常用参数

--客户端限制(default = no) TCP.VALIDNODE_CHECKING --指定不允许访问的客户端 --打开限制 TCP.VALIDNODE_CHECKING=yes --可以使用主机名或者ip地址,用逗号分隔 TCP.EXCLUDED_NODES=(hostname | ip_address,hostname | ip_address,...) --指定允许访问的客户端 --打开限制 TCP.VALIDNODE_CHECKING=yes --可以使用主机名或者ip地址,用逗号分隔 --注意:TCP.INVATED_NODES优先级高于TCP.EXCLUDED_NODES TCP.INVATED_NODES=(hostname | ip_address,hostname | ip_address,...) --客户端超时时间设置(单位为秒) SQLNET.INBOUND_CONNECT_TIMEOUT=10 --限制客户端版本 SQLNET_ALLOWED_LOGON_VERSIONS=n --12c以上版本中格式为 SQLNET.ALLOWED_LOGON_VERSION_SERVER=n SQLNET.ALLOWED_LOGON_VERSION_CLIENT=n

如果我们升级到19c之后,部分客户端可能默认就无法连接了,我们可以改这里的客户端版本限制。

4.3.sqlnet开启跟踪

设置:

TRACE_LEVEL_CLIENT=16 TRACE_FILE_CLIENT=CLIENT TRACE_TIMESTAMP_CLIENT=ON TRACE_DIRECTORY_CLIENT=C:\app\Administrator\product\11.2.0\client_1\network\admin
  • TRACE_LEVEL_CLIENT:开启客户端跟踪级别,取值为0-16,系统默认为0,即不生成。
  • TRACE_FILE_CLIENT:设置是客户端还是服务端
  • TRACE_TIMESTAMP_CLIENT:是否记录每条日志的时间戳
  • TRACE_DIRECTORY_CLIENT:设置trace问题件的产生目录

4.4.防止攻击者利用远程注册攻击

很多攻击者会利用远程注册这一特性,在监听下远程注册同名数据库实例。新登入的用户,在TNS(透明网络底层)负载均衡的策略下,有可能会登录到伪造的监听服务上,攻击者会监控用户的登入过程,并将相关数据流量转发到真实的数据库上。利用CVE-2012-3137获得通信过程中的认证相关信息,并对认证相关信息进行离线的暴力破解,获得登入密码,最后完成对生产数据的访问。这就是OracleTNS监听远程注册投毒原理。
解决方法:

--在 Oracle11g11 .2.0.4及以上版本的所有节点的listener. ora文件中进行如下操作。 --对于单实例,添加以下命令: VALID_NODE  CHECKINGREGISTRATIONLISTENER =1 --对于RAC集群,添加以下命令: VALID_NODE_CHECKING_ REGISTRATION _LISTENER=1 VALIDNODE_CHECKING_ REGISTRATIONLISTENERSCAN1 =1 REGISTRATIONINVITED _NODES_LISTENER_SCANl=(<list of publicip's of all nodes>) --例如,对于拥有两个SCAN监听的RAC环境,先设置如下命令: VALID_NODE_ CHECKINGREGISTRATIONLISTENER =1 VALID_NODE_CHECKING_ REGISTRATION _LISTENER_SCAN1=1 REGISTRATIONITED _ NODESLISTENERSCAN1 =(192.168.238.190, 192.168.238.191) VALID_NODE_CHECKING_ REGISTRATIONLISTENER _SCAN2=1 REGISTRATIONIINVITED _NODES_LISTENER_SCAN2=(192.168.1390, 192.168.238.191 --最后,重新加载上述配置信息,使之生效,命令如下: shell>Isnrctl reload shell>Isnrctl reload listener scanl shell>lsnrctl reload listener _scan2
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论