Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3186345
  • 博文数量: 39
  • 博客积分: 10067
  • 博客等级: 上将
  • 技术积分: 4018
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-03 15:39
文章分类

全部博文(39)

文章存档

2011年(2)

2009年(3)

2008年(34)

分类: Oracle

2008-04-30 14:21:39

ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
 
1. 首先查看tnsnames.ora,路径如下:
oracle安装目录\product\10.2.0\db_1\NETWORK\ADMIN\。看其中是否包含了你的连接描述符中的服务,也就是你请求的服务。如果没有,则可以手动添加,比如:
service_ex =
 (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = service_ex)
    )
 )
可以参照tnsnames.ora中已有的服务描述。
2. 再检查listener.ora,该文件与tnsnames.ora位于相同目录下。监听器启动时会读取这个文件,使用其中的信息来识别连接请求中的服务。所以出现ORA-12514错误时,大部分是因为这个文件有问题引起的。在这个文件中,我们要查看其中的服务名是否与tnsnames.ora中的服务名一致。如果不一致,则可以手动修改,就上面的例子来说,修改前的listener.ora可能是:
LISTENER =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
 )
从上面的例子中可以看出,这个LISTENER中没有包含于tnsnames.ora对应的服务名,因此我们可以做如下的修改:
LISTENER =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = service_ex)
    )
 )
完成修改后,重新启动监听服务,问题基本上都可以得到解决。
3. 如果还是出现同样的错误,也不用着急。Oracle的监听程序要比数据库服务启动的晚,当数据库服务启动之后,会修改listener.ora,把服务名写进listener.ora中,然后监听服务启动时读这个文件。但是在计算机启动时,有可能出现数据库服务还没有来得及修改listener.ora,监听服务就已经启来了。为了解决这个问题,我们可以把数据库服务跟监听器服务都设为手动启动,先启动数据库服务,然后再启动监听器服务。
4.     除了上述情况外,出现TNS错误时,有可能是因为没有加载数据库实例,加载方法如下:
在SQL/PLUS中输入startup force,强制加载数据库实例。
5.    总结:
ORA-12514错误引起的原因和解决办法基本就是这样,碰到问题时,实际情况实际分析,通过上面介绍的几种方法,多尝试几次,就可以解决了。
阅读(8034) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~