频道栏目
首页 > 资讯 > Oracle > 正文

ora-12514tns监听程序无法识别连接描述符中请求的服务

15-01-13        来源:[db:作者]  
收藏   我要投稿

今天,远程连接linux服务器时遇到这样一个错误,tnsnames.ora 和 listener.ora文件配置都没有错误 但是就是连接不上 tnsping 也是正常的 但用plsql连接的时候总是报错 ora-12514 tns 监听程序无法识别连接描述符中请求的服务,因为连接本地数据库时没有问题的 所以监听程序应该没问题,接下来就查看tnsnames.ora 发现还是这里出了问题,其实报错报的已经说的很明确了 无法识别连接描述符中请求的服务 说明SID 和 服务名 是不一样的 我把 SERVICE_NAME 改成了SID 然后重启了监听程序 连接成功

以下是连接失败时候的tnsnames.ora文件

yanzhao_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 220.194.59.37)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

修改后的tnsnames.ora文件

yanzhao_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 220.194.59.37)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID= orcl)
)
)

tnsping的截图

写到这里 就去网上查了一下 SID和server_name 的关系

在oracle中SID必须等于instance_name(实例名) 这里可以简单的记作 SID就是实例名

1. SID是实例名,实例名指的是用于响应某个数据库操作的数据库管理系统的名称。实例名是由初始化参数文件的参数instance_name决定的。如果这个参数不被指定(即instance_name没有被指定为任何值),那么实例的名字由该用户的环境变量ORACLE_SID(注意这里是大写)决定。在windows平台下,则是注册表中oracle_sid值决定。

2. SERVICE_NAME指的是listener中的全局数据库名:这个名字是由listener.ora中GLOBAL_DBNAME参数决定的。这个名字代表的是客户端连接到数据库时,tnsnames.ora中SERVICE_NAME参数所对应的值。

 

3. 连接字符串 配置tnsname.ora时,可以用SID,也可以用SERVICE_NAME. 注意这两个值不一定相同,具体要看数据库服务器中的配置。 问题就出在第三点这里,如果SID和服务名一样 当然连接也不会出错,但如果不一样,就是报ora-12514 这个具体还要看服务器的配置信息。
相关TAG标签
上一篇:oracle高级查询
下一篇:MYSQL查看和新增表分区
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站