oracle里的listener.ora和tnsnames.ora内容讲解

来源:互联网 发布:淘宝网域名是什么 编辑:程序博客网 时间:2024/06/01 08:16

本人本来想用oracle连接远程数据库,从网上查找相关资料后,使用了oracle自带的net manager,添加并修改了服务,结果远程没连上,连本地数据库都连接不上了。

于是痛定思痛,删去了那些修改的部分,可惜被接二连三的"ora-"搞疯了。“ora-12541:无监听程序”,“ora-12514:无法识别”,“ora-00119:无效的描述...”......绞尽脑汁,疯狂找寻资料之后,终于锁定了问题所在,oracle没有连接上数据库的90%的问题,是集中在listener.ora和tnsnames.ora两个文件中。在最终解决问题之后,本人深深感受到如果能把这两个文件弄明白了,该节省多少人力啊。于是决定根据本人经验和网上资料,对这两个文件做全面的介绍。

1.listener.ora

listener.ora是监听器的配置文件。它的内容一般如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
    (SID_DESC =
      (GLOBAL_DBNAME=ORCL)
      (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
      (SID_NAME=ORCL)
    )
  )

下面定义

LISTENER

进程为哪个实例提供服务

 

这里是

ORCL

,并且它对应的

ORACLE_HOME

GLOBAL_DBNAME 

其中

GLOBAL_DBNAME

不是必需

这里定义了为哪个实例提供服务的listener进程。第一个服务的sid是CLRExtProc,LZ不太清楚它的作用,如果有网友知道,欢迎指点。第二个就是我们常用的。

这里的部分定义了一个指向全局数据库名为orcl的,SID名称为orcl的监听器。如果登陆数据库时报“ora-12541”的错误,多半是这里的配置出了问题。报这个错误时,

应该查看是否有这样的定义以及名称是否写错。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = x6x8-20130411JP)(PORT = 1521))
    )
  )

这个定义的是监听器的监听协议。比如IPC、TCP的网络协议,主机名(host),端口号(1521),个人电脑可能不同,不要盲从。另外,host不一定就要写计算机名,也可以写

IP名称。个人电脑的IP,或者127.0.0.1,或者远程IP等。


2.tnsnames.ora

它是本地命名的配置。

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

监听器的配置

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

自动生成。不必管它。

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.168.0.184)
    )
  )

orcl表示数据库服务名,为这个服务定义了网络协议、主机名以及端口号和服务名。service_name是本人电脑oracle的service_name名称。如果不知道,可以使用

net manager查看。p.s:千万不要乱用net manager修改或者添加服务、监听。很可能会带来麻烦。



原创粉丝点击