监听配置问题,SID(实例名)与SERVICE_NAME的区别?



这几天因为要连接远程oracle数据库,直接在本地安装好了oracle11g客户端后,环境变量配置完成,按以往的习惯用Net Configuration Assistant  进行了连接配置设置,生成了对应的监听文件。

但是在NetManager 中进行连接测试的额时候始终连不上,用户名和密码都正确,显示”ora-12154无法解析指定的连接标识符“是分别采取了以下措施:


1.再三确认客户端监听配置文件tnsnames.ora文件,实际上tnsnames.ora正是包含了这个所谓的连接字符串其中要远程连接的数据库实例名和IP地址,经过仔细比对没有错。也不存在说首行不能有空格的问题。

2.接着又想到时不是tnsping远程数据库的监听,看看是不是数据库监听或者数据远程连接有问题有问题,测试正常。

3.保证了监听都能连上,是在想不出哪里有问题了,用oracle客户端下载下来自带的SQLdevloper试试能不能连上,居然能连上。。。配置信息都是一样的。瞬间崩溃

4.会不会是oracle客户端安装有问题(不是32bit余64bit的问题),于是卸载重装,多次之后还是连不上。

5.不管了,撇开连接测试不通的问题,直接拿plsql来连接数据库,测试依旧失败。

6.终于,发现了一个细微的差别,别人能连上的监听配置tnsnames.ora信息中connect_data写的是SID而我的写的SERVICE_NAME,但是没怎么关心这个,觉得两者没什么区别,Service_name也就是oracle8 以后增加的新名词而已,原来我错了。

1.数据库实例名(SID)
什么是数据库实例名?
数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。实例名也被写入参数文件中,该参数为instance_name,在winnt平台中,实例名同时也被写入注册表。
数据库名和实例名可以相同也可以不同。
在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。

2.数据库服务名(SERVICE_NAME)
什么是数据库服务名?
从oracle9i版本开始,引入了一个新的参数,即数据库服务名。参数名是SERVICE_NAME。
如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。

SERVICE_NAME的出现就是为了应对并发技术,简化客户端连接配置。通过SERVICE_NAME应该能找到更好的解决方案。
因此,在oracle的监听配置文件中,尤其要注意,


# tnsnames.ora Network Configuration File: H:\app\admin\product\11.2.0\client_1\NETWORK\ADMIN\tnsnames.ora

# Generated by Oracle configuration tools.

DZJ =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.230.31.15)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = oradb1)
    )
  )
  
  
31.15 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.230.31.15)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradb)
    )
  )


connect_data对应的是SID还是SERVICE_NAME,如果是SID则对应该数据库的实例名称(instant_name),如果是SERVICE_NAME的话则填写数据库服务名,即全局数据库名(非分布式数据库系统中为 数据库名(db_name)),看来oracle数据库基础没打牢啊,有时候只注重怎么用,却忽视了为什么这么用了。唉~~学无止境。。。。。

参考:http://blog.csdn.net/elvis_dataguru/article/details/8984961

          http://blog.csdn.net/zhangzl1012/article/details/50752572

          https://wenku.baidu.com/view/c7d426fbaef8941ea76e05d1.html


你可能感兴趣的:(监听配置问题,SID(实例名)与SERVICE_NAME的区别?)