每个Oracle的学习者在安装数据库、客户端之后,对服务器、实例、监听器、本地服务名和服务名Service Name这些概念不容易弄清楚。在Windows下,经常出现连接失败的问题。

这些困惑笔者也都经历过,也曾经无下手之处。其实,处理这样的问题思路,就是:从客户端开始,一个环节一个环节进行检验。发现故障点,排除故障点。

下面,我们分别进行查看。

1、安装一个的客户端

客户端安装和配置故障,是我们遇到连接故障中最大的比例。经常是我们自己配置和安装客户端程序有问题,引起的连接故障。

企业或者项目组开发环境下,我们是没有必要在自己机器上专门安装数据库服务器的。一般,我们只需要安装一个客户端就可以了。

在Oracle官方网站上,我们是可以免费下载到Oracle客户端程序。目前,客户端提供的是11g。通常客户端是向下兼容,也就是高版本的客户端可以连接到低版本服务器上。不过,笔者在实际使用中,发现低版本客户端连接高版本服务器通常也没有什么大问题。

这里,我们要注意一个问题:Oracle服务器上,实际也是默认安装了客户端核心组件的。如果你的机器上已经有数据库服务器,就不要在机器上额外安装一个客户端了。

当一台机器上有多个服务器或者客户端的时候,配置和相关的内容是很多的。我们调用哪一个客户端,使用哪个连接配置文件,都是通过系统的环境变量,如ORACLE_HOME、ORACLE_BASE和PATH等内容进行定位的。而其中的关系,是初学者需要投入精力去理解的。很多朋友在调用sqlplus或者netca的时候,可能没有意识到自己调用的究竟是哪个客户端。

同时,多个客户端并存,很多时候会引起冲突。笔者的一个朋友就遇到过机器上同时存在9i和10g客户端。PATH环境变量中包括了两个客户端的bin目录,结果启动sqlplus不成功,但是启动sqlplusw却成功。

出现这种问题,单纯通过Oracle客户端程序检测是不容易解决的。只能一点点的分析和抽丝剥茧。所以,为了避免不必要的麻烦,如果我们没有把握进行调试,还是保留一份客户端就好。

2、安装操作系统位数合适的客户端

这个故障笔者在工作中和QQ群里面都遇到过。现在个人PC容量惊人,超4G内存比比皆是。于是乎个人客户端上64位操作系统也就不是什么新鲜事。

经常有朋友问这样的问题:我的64位OS上面,安装了64位的Oracle Client。配置本地命名都是没有问题,使用SQLPLUS连接没有问题。但是安装上pl/sql developer之后,就连接不上,报错信息有时候还看不清楚。

其实,这个问题还是操作系统位数兼容的问题。在Windows环境下,64位操作系统是兼容32位的程序的。在64位机器上安装64位Oracle Client是没有问题的。但是,问题出在pl/sql developer上。目前我们常用的pl/sql developer都是32位版本的,其工作原理是需要调用Oracle客户端的OCI接口文件。这个文件pl/sql developer也需要32位的。所以,才出现客户端连接没问题,而pl/sql developer连接有问题的情况。

解决的方法也容易,就是安装32位的客户端。

3、客户端命名配置

客户端本地命名是另一个出现问题的方面,同时也是解决问题的一个入手点。

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release10.2.0.1.0 - Production on星期四12月22 21:10:51 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn scott/tiger@ora11g;

ERROR:

ORA-12170: TNS:连接超时

首先,需要判断连接的本地命名ora11g是否解析成功。这里可以使用tnsping命令进行检查。TNSPING命令是Oracle提供的网络ping命令。

C:\Documents and Settings\Administrator>tnsping ora11g

TNS Ping Utility for 32-bit Windows: Version10.2.0.1.0 - Production on 22-12月-

2011 21:17:16

Copyright (c) 1997, 2005, Oracle. All rights reserved.

已使用的参数文件:

D:\oracle\network\admin\sqlnet.ora

已使用TNSNAMES适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

(HOST = 192.168.0.89)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora11g)))

TNS-12535: TNS:操作超时

TNSPING命令的结果有三个重要意义:

ü       判断当前使用的TNS配置文件位置。

已使用的参数文件:

D:\oracle\network\admin\sqlnet.ora

这部分内容很有意义。当客户端所在OS上安装多个客户端时候,我们可以从这里判断出使用的TNS究竟是哪个。同时,虽然提示的sqlnet.ora,但是重要的tnsnames.ora文件是和它在相同的目录下的。

如果这部分有问题,比如定位的客户端不是希望的。那么就请检查环境变量,特别是path变量的配置。

ü       本地命名解析

已使用TNSNAMES适配器来解析别名

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

(HOST = 192.168.0.89)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora11g)))

第二部分有益的信息是关于命名的解析。我们在tnsnames.ora中配置了本地命名。但是,有时候这些信息名称是不会正确解析的,如使用粘帖方法、关键字书写等。这部分,可以让我们知道Oracle Net Service组件是如何解析ora11g的。其中的IP地址,服务名,端口等内容是否正确?是我们检查的项目。

如果这部分不能解析,或者解析有误。建议去检查或者重新生成一些tnsnames.ora文件。

ü       远程监听器情况

最后,tnsping会去检查一下远程服务器上的监听器状态。如果发现指定端口没有监听程序守候,就会提示错误。那么,我们起码知道监听器配置上存在一些问题。

当客户端配置没有问题的时候,我们就需要考虑一下是否是服务器的问题了。下面,我们讨论一下简单的服务器端问题。

4、监听器故障

监听器是Oracle服务器的一个重要组件。监听器主要职责就是为实例和client建立请求连接。

这个环节我们就需要使用lsnrctl控制组件。

[oracle@oracle11g~]$ lsnrctl

LSNRCTL for Linux: Version11.2.0.1.0 - Production on 19-DEC-2011 22:25:39

Copyright (c) 1991, 2009, Oracle. All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL>

首先,我们需要检查一下监听器状态。

LSNRCTL> status

Connecting to(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=oracle11g) (PORT=1521)))

TNS-12541: TNS:no listener

TNS-12560: TNS:protocol adapter error

TNS-00511: No listener

Linux Error: 111: Connection refused

里面的连接信息首先说明了监听器程序的配置信息,包括端口号。显然,这个监听器没有启动。需要启动之后才可能接受到远程的请求。

LSNRCTL> start

Starting /u01/oracle/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version11.2.0.1.0 - Production

System parameter file is /u01/oracle/network/admin/listener.ora

Log messages written to /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                    LISTENER

Version                  TNSLSNR for Linux: Version11.2.0.1.0 - Production

Start Date               19-DEC-2011 22:27:23

Uptime                   0 days 0 hr. 0 min. 0 sec

Trace Level              off

Security                 ON: Local OS Authentication

SNMP                     OFF

Listener Parameter File  /u01/oracle/network/admin/listener.ora

Listener Log File        /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

The listener supports no services

The command completed successfully

注意,此时虽然监听器启动,但是并没有服务注册进监听器。也就是说,监听器并不知道注册的服务名称Service Name是什么,更不要说对应实例Instance的信息了。

这里,就牵扯到实例的启动和动静态注册问题了。

5、数据库实例的动静态注册

监听器启动之后,下面确认的环节就是实例是否启动了。这个过程我们需要登录到数据库服务器所在主机,进行确认和启动。

[oracle@oracle11g~]$ sqlplus /nolog

SQL*Plus: Release11.2.0.1.0 Production on Mon Dec 19 22:30:20 2011

Copyright (c) 1982, 2009, Oracle. All rights reserved.

SQL> conn / as sysdba

Connected to an idle instance.

显然,上面的数据库是没有启动。

SQL> startup

ORACLE instance started.

Total System Global Area 414298112 bytes

Fixed Size                 1336904 bytes

Variable Size            327158200 bytes

Database Buffers          79691776 bytes

Redo Buffers               6111232 bytes

Database mounted.

Database opened.

注册过程就是数据库实例要让监听器知道自己的目录位置和服务名称Service Name。注册过程有动态注册和静态注册两种类型,现在最常用的就是动态注册。

所谓动态注册,就是实例的pmon进程每隔一段时间,就自动访问一次监听器程序,告知自己状态。动态注册的意义有两个,一个是让监听程序可以获取到服务信息,另一个更加有意义的方面是让监听器可以知道实例的健康状态,便于进行failover。

我们启动实例之后,就可以查到注册状态了。

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

Services Summary...

Service "wilson" has 1 instance(s).

Instance "wilson", status READY, has 1 handler(s) for this service...

The command completed successfully

如果我们发现实例启动之后,没有发生主动的动态注册。可以手工的调用语句强制进行注册。

SQL> alter system register;

System altered.

6、结论

TNS Name和Oracle Net Service是初学Oracle毕竟的一个关口。笔者从最常出问题的环节出发,介绍了检测方法,便需要的朋友共享。

客户端连接故障检查流程手段相关推荐

  1. mysql客户端启动失败_MySQL Study案例之--MySQL客户端连接故障

    MySQL Study案例之--MySQL客户端连接故障 系统环境: 操作系统:RedHat EL6 DB Soft:  MySQL 5.6.4-m7 在系统安装了源码包 MySQL 5.6.4-m7 ...

  2. 【kubernetes】k8s使用客户端连接haproxy访问高可用集群流程详细说明【使用kubeconfig连接haproxy】【kubeconfig配置全部流程】

    文章目录 master高可用部署流程 客户端连接haproxy访问高可用集群 环境确认与准备[必看] 客户端连接happroxy说明 kubeconfig配置[master上操作] 客户端测试 说明 ...

  3. 【kubernetes】k8s集群高可用部署安装和概念详细说明【含离线部署】,客户端连接haproxy访问高可用流程

    文章目录 说明 高可用原理 K8S多master节点架构图 测试环境说明 部署高可用 安装包准备[可选] 高可用架构说明 配置haproxy 说明[必看] 安装haproxy 编辑配置文件 配置etc ...

  4. Redis故障检查:延迟测量

    目录 网络延迟测量 固有延迟 往返延迟 检查CPU利用率 检查持久化操作 Redis的故障检查,上一篇日志总结到的是找出一些慢查询操作,也就是这些查询花费了很长的时间才能完成,但是这个慢操作识别只记录 ...

  5. 服务器存在但没有账套信息请重新设置,专业版15.0客户端连接不上服务器

    环境如下:金蝶专业版15.0 3用户: 服务器是win7旗舰版sp1 32位,数据库是2008R2SQL.客户端是win7旗舰版sp1 64 位,XP sp3 32位 .这几台电脑在局域网里有共享打印 ...

  6. TCP/IP,单进程服务器与客户端连接通信,ipv4,TCP传输,无复用简单实例,nc模拟客户端连接服务器

    TCP/IP,单进程服务器与客户端连接通信,ipv4,TCP传输,无复用简单实例 一.实例设定 1.服务器与客户端均是本机,服务器绑定的ip可以是宏INADDR_ANY,这个宏表示可以和本机的所有网卡 ...

  7. 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接

    网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...

  8. MQTT客户端连接服务器协议,mqtt客户端和服务器长连接

    mqtt客户端和服务器长连接 内容精选 换一换 介绍设置客户端和服务器的安全认证方式的相关参数.参数说明:表明与服务器建立链接后,不进行任何操作的最长时间.参数类型:USERSET取值范围:整型,0- ...

  9. oracle错误12518,ORA-12518: 错误 客户端连接不上

    ORA-12518: 错误 客户端连接不上 解决方案: 第一步:process和session改大 检查process和session a)本机使用连接到oracle,查看process进程数: se ...

最新文章

  1. Python爬虫之urllib模块2
  2. 文本编辑器创建状态栏
  3. DDoS deflate–简单解决VPS被DDOS/CC攻击
  4. Python中正反斜杠('/'和'\')的意义
  5. 知道无人驾驶的网络安全有多重要吗?英国政府都决定插手开发了
  6. python计算求导后的函数式与赋值计算
  7. Horizo​​ntal Pod Autoscaler (HPA) 根据资源横向扩展
  8. a人工智能b大数据c云计算_解读云计算、大数据、AI 对数据中心的影响,最全面的解说分析!...
  9. ASP.NET页面间的传值方法(2)
  10. Launcher中动态加载APK出现java.lang.SecurityException异常的解决方法(二)
  11. 查看弹出广告来自哪个软件
  12. 爸爸是个计算机工程师,作文:我的爸爸是工程师
  13. 北向接口和南向接口及SDN
  14. ACM进阶大一到大三
  15. 字节后端开发工程师-基础架构 二面面经
  16. 趁阳光正好,趁微风不噪。趁花儿还未开到荼蘼。
  17. python零基础网站制作_为做网站而准备
  18. 自动化(四)appium真机远程控制和远程群控
  19. 达内Web前端开发视频教程
  20. 反垃圾邮件的一些相关链接

热门文章

  1. 红米Note 8 Pro新配色公布:轻盈一握宛若浮华在手
  2. 美团起飞了?上半年营收418.76亿 同比增长58.9%
  3. 为红米寻找新的方向 卢伟冰向网友征集老人机需求
  4. 关于用java做微信机器人的艰辛过程
  5. matlab 程序 收缩,基于MATLAB的小波收缩去噪方法研究(程序)
  6. 关于 Flutter Layout(转载)
  7. upnp协议和dlna源码理解与修改
  8. 离线语音识别软件_6.语音板使用科大讯飞离线命令词识别
  9. 我的内核学习笔记4:sysfs学习
  10. php 解析返回的xml,php解析cas返回的xml解决思路