Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1024277
  • 博文数量: 171
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 2077
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 10:11
个人简介

pugna

文章分类

全部博文(171)

文章存档

2021年(4)

2020年(1)

2019年(4)

2018年(5)

2017年(7)

2016年(9)

2015年(36)

2014年(8)

2013年(96)

2012年(1)

分类: Oracle

2013-03-23 17:06:06

Oracle客户端连接Oracle实例的步骤及常见错误

 

 

 

Oracle客户端连接Oracle实例的步骤(以PL/SQL Developer为例):

 

应用程序(PL/SQL Developer)提供用户名、密码、登陆角色和网络服务名(即netca中的服务命名,也叫连接字符串)进行连接。

第一步,Oracle客户端根据sqlnet.oraNAMES.DIRECTORY_PATH的配置,决定使用哪几个文件对 网络服务名 进行解析。默认的配置是,首先通过tnsnames.ora来解析 网络服务名

第二步,Oracle客户端根据tnsnames.ora解析出 网络服务名 所代表的 连接所使用的协议(一般是TCP/IP),Oracle实例所在的IP、连接端口(一般默认为1521 监听服务名称。

第三步,Oracle客户端(我不清楚这一步是由Oracle客户端还是由应用程序发起连接,这里暂且当时是Oracle客户端吧)根据对应的协议,向Oracle实例所在的IP的连接端口发起连接,并请求 刚才通过tnsnames.ora解析出的 监听服务

第四步,Oracle服务端的监听程序Listener,与Oracle客户端建立网络连接后,在已注册服务列表中查找Oracle客户端所请求的服务。若存在,则监听程序Listener将此服务对应的Oracle实例的相关信息返回给Oracle客户端,再由Oracle客户端根据返回的信息直接与Oracle实例直接建立连接。至此,连接完成。

 

       注:本文中的监听服务指的是Oracle监听程序中所监听的服务名,而非操作系统级别的服务。

 

在排查Oracle连接问题时,经常要使用tnsping工具,tnsping在操作系统shell下执行。

 

tnsping 网络服务名

得到的是 Oracle实例的监听程序所建立网络连接的结果。它并不会查询 监听程序上 是否存在所请求的 监听服务

 

 

 

根据以上的连接步骤的顺序,连接时的错误主要有以下几种:

 

一、TNS-03505

tnsping 网络服务名 的结果报以下错误:

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

TNS-03505: 无法解析名称

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

则表示Oracle客户端无法根据sqlnet.oratnsnames.ora解析 网络服务名

 

二、ORA-12541

tnsping 网络服务名 的结果报以下错误:

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

ORA-12541: TNS: 无监听程序

在输入的字段中可能有错误,

或者服务器连接未就绪。

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

则表示Oracle客户端无法与解析 网络服务名 得到的协议、IP、端口建立连接。即Oracle客户端与Oracle服务端的监听程序连接失败了。

可能的原因为:

1.Oracle客户端通过sqlnet.oratnsnames.ora解析得到的协议、IP、端口与通信协议、Oracle实例所在的IP、监听程序使用的监听端口不一致。

2.Oracle服务端未启动监听程序。

 

三、ORA-12514

tnsping 网络服务名 的结果正常,但是通过Oracle客户端(或应用程序)连接所请求的服务报以下错误:

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

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

在输入的字段中可能有错误,

或者服务器连接未就绪。

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

则表示Oracle客户端与Oracle服务端的监听程序Listener正常建立了网络连接,但是Oracle服务端的监听程序Listener无法在已注册列表中找到Oracle客户端所请求的服务

 

四、ORA-01034 ORA-27101

tnsping 网络服务名 的结果正常,但是通过Oracle客户端(或应用程序)连接所请求的服务报以下错误:

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

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

Linux-x86_64 Error: 2: No such file or directory

在输入的字段中可能有错误,

或者服务器连接未就绪。

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

则表示Oracle服务端的监听程序Listener已经注册了所请求的服务,但是连接该服务所对应的实例时,发现此实例不可用(如实例未启动)

一般出现这种情况,是因为Oracle服务端的监听程序Listener使用了静态服务注册,而此时Oracle实例并未启动。

 
                                                                                                       2013-03-19 15:23

阅读(4299) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~