温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

通过sqlplus连接数据库服务器很慢的问题

发布时间:2020-08-16 18:36:04 阅读:389 作者:dbasdk 栏目:关系型数据库
亿速云爆款云服务器,独享5M带宽,BGP线路,安全稳定,0.96元/天! 查看详情>>

今天在论坛上看到一个贴子,问题是客户端sqlplus连接数据库很慢:http://www.itpub.net/thread-2090550-1-1.html,之后根据问题的描述与分析,在测试环境做了一下测试,将我的虚拟主机加入域环境,进行测试;之后就联想到去年我所遇到类似的一个问题:http://www.itpub.net/thread-2072574-1-1.html

实验环境
操作系统:Windows Server 2008 R2,加入AD域环境
数据库:Oracle 11.2.0.4

问题描述:
1、从客户端使用sqlplus xxx/ssss@yyy 的方式连接数据库,第一次连数据库时很慢,基本上要几十秒才能连接到数据库,接下来几次连接很正常,但过会儿再连接数据库又变慢了
2
、数据库的日志文件中,有大量的WARNING: inbound connection timed out (ORA-3136) 错误信息

排除过程:
1、查了ORA-03136的错误,根据网上查找的资料,把数据库服务的监听添加了如下参数
    LSNRCTL> set inbound_connect_timeout 0  

并保存,此时,数据库中不在报ORA-03136的错误了,但是,从客户端连接到oracle数据库服务器还是存在很慢的问题
2
、客户端连接数据库服务时,数据库的那台主机的硬件负载都不高;
3
、服务器的监听文件和客户端的tnsname.ora中的主机地址都是使用ip地址
4
、在服务器上使用sqlplus xxx/ssss@yyy尝试连接多次,速度正常,感觉服务器端没问题
5
、从客户端ping服务器的监听地址,没有丢包现像
6
、在客户端使用tnsping测试到服务器的解析也很快,毫秒以内 
7
、通过56的测试,感觉客户端到服务器的网络是正常的
8
、继续查询,在网上发现这篇文章和我的情况类似,http://blog.csdn.net/jaray/article/details/36008871后来根据这个文章上的方法,修改了服务器上的sqlnet.ora中的SQLNET.AUTHENTICATION_SERVICES的值为none
9
、再次使用sqlplus 测试从客户端测试到服务端的连接,速度正常,几秒内连接成功
10
、尝试把那个值再改成NTS,故障又再次出现

问题分析:

sqlnet.oraSQLNET.AUTHENTICATION_SERVICES设置,如果设置NTS,则优先使用Windows验证,然后使用Oracle验证;而设置none,则只使用Oracle验证。由于我测试的环境加入了AD域,所以如果优先Windows验证,则Oracle会通过远程的AD域服务器进行验证,验证失败后再进行Oracle验证,所以速度会很慢;

解决问题:

sqlnet.oraSQLNET.AUTHENTICATION_SERVICES值设置为none

问题分析到这里,不经让我想起去年遇到一个同样类似的问题:通过sqlplus远程连接Oracle数据库的时,有时候能够连接上,有什么就连接不上?(如下图所示)

通过sqlplus连接数据库服务器很慢的问题

以下是Oracle11g官方文档关于sqlnet.ora的说明:

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

·         Specify the client domain to append to unqualified names

·         Enable logging and tracing features

·         Route connections through specific processes

·         Use protocol-specific parameters to restrict access to the database

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

从描述中看出,该文件是控制客户端访问数据库服务器的,可以设定多种参数进行访问控制。关于其他参数的详细配置请参考官方文档;而接触到的最多的参数是 sqlnet.authentication_services,官方说明如下:

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

SQLNET.AUTHENTICATION_SERVICES

Purpose

Default

None

Note:

Values

·         Authentication Methods Available with Oracle Net Services:

o   none for no authentication methods, including Microsoft Windows native operating system authentication. WhenSQLNET.AUTHENTICATION_SERVICES is set to none, a valid user name and password can be used to access the database.

o   all for all authentication methods.

o   nts for Microsoft Windows native operating system authentication.

·         Authentication Methods Available with Oracle Advanced Security:

o   kerberos5 for Kerberos authentication.

o   radius for RADIUS authentication.

o   tcps for SSL authentication.

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

从参数的说明可以了解到提供两种服务,net服务和高级安全服务。高级安全服务参数这里不讨论了,讨论一下 none / all / nts三个参数的作用。

设定sqlnet.authentication_services:

  • none:作用是不允许通过os系统用户登录数据库,需要提供用户名及密码;
  • all:作用是允许所有的登录方式;
  • nts:作用是windows的本地操作系统用户认证;

注:需要说明的是该用户名和密码是指具有sysdba权限的用户;在linux上若用系统用户oracle登录数据库需要设定为all或者不加该字段;

关于通过SQLNET.ora文件限制IP地址访问的问题请参考盖大师的博客:

http://www.eygle.com/archives/2008/01/sqlnetora_ip_limit.html

作者:SEian.G(苦练七十二变,笑对八十一难)

ITPUBhttp://blog.itpub.net/31015730/

51CTOhttp://seiang.blog.51cto.com/

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://blog.itpub.net/31015730/viewspace-2143046/

AI

开发者交流群×