欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于Oracle本地连接出现与监听有关的问题的解决方法探讨

程序员文章站 2022-08-05 21:44:07
本文主要记录关于Oracle在本地连接中出现与监听有关的问题以及相应的解决方法,如有不足或者错误,欢迎指正! ......

关于oracle本地连接出现与监听有关的问题的解决方法探讨

监听的作用:

用于应用桌面即用户与数据库服务器建立连接的媒介,客户端发送连接请求,监听识别请求并建立客户端与服务器的连接后,监听的使命并完成了。也就是说,在建立客户端与服务器的连接后,监听可以关闭了。

oracle连接出现常见的几种与监听有关的问题::

1、无监听

1)一般是监听出现没有启动造成。

解决方法:

工具栏右键>>>任务管理器>>>选择服务>>>找到oracle相关的服务>>>启动。

菜单>>>运行>>>服务(有可能是server>>>本地服务)>>>找到oracle相关的服务>>>启动

如图1。

关于Oracle本地连接出现与监听有关的问题的解决方法探讨

图1

2)服务实例没有注册到监听中

出现此问题一般是配置监听失败,或者多个实例多个监听造成监听实例搞混淆的情况(一般很少见)。

一般数据库监听配置用net configuration assistance来进行,在进配置的时候,可能选择添加监听程序,如图3,在后续配置中,可能服务实例没有注册到监听中。

解决方法:

一般一个监听可以管理多个数据库实例,所以没必要配置多个监听。目前本人只研究一个监听对于多个监听造成的错误的解决方法,至于多个监听多个实例本人猜测可以用此类似方法解决。有待后续研究。

关于Oracle本地连接出现与监听有关的问题的解决方法探讨

图2

关于Oracle本地连接出现与监听有关的问题的解决方法探讨

图3

在安装oracle数据库软件的文件夹下有三个关于监听或net的配置文件,本人电脑中,三个该文件的地址为:d:\oraclehudatabasesofeware\oraclestationofsoftware\network\admin。三个文件名为:listener.ora,sqlnet.ora,tnsnames.ora。顾名思义三个文件listener与监听有关,tnsnames与数据库实例有关,sqlnet与网络连接有关。

上述以说出现错误为服务实例没有注册到监听中。所以打开listener文件,在文件中添加数据库实例名,内容如下,红色为加入内容:

 

# listener.ora network configuration file: d:\oraclehudatabasesofeware\oraclestationofsoftware\network\admin\listener.ora

# generated by oracle configuration tools.

 

sid_list_listener =

(sid_list =

(sid_desc =

(sid_name = clrextproc)

(oracle_home = d:\oraclehudatabasesofeware\oraclestationofsoftware)

(program = extproc)

(envs = "extproc_dlls=only:d:\oraclehudatabasesofeware\oraclestationofsoftware\bin\oraclr11.dll")

)

(sid_desc =

(global_dbname = oradb)

(oracle_home = d:\oraclehudatabasesofeware\oraclestationofsoftware)

(sid_name = oradb)

)

(sid_desc =

(global_dbname = orcl)

(oracle_home = d:\oraclehudatabasesofeware\oraclestationofsoftware)

(sid_name = orcl)

)

)

 

 

listener =

(description_list =

(description =

(address = (protocol = ipc)(key = extproc1521))

(address = (protocol = tcp)(host = localhost)(port = 1521))

)

)

 

adr_base_listener = d:\oraclehudatabasesofeware

 

注意:

  1. 本人中包含两个数据库实例,所以加入两段话。global_dbname = oradb,全局数据库名称;oracle_home =d:\oraclehudatabasesofeware\oraclestationofsoftware,数据库所在位置;sid_name = oradb。特别注意该文字必须包含在sid_list的括号内。
  2. 最后注意adr_base_listener = d:\oraclehudatabasesofeware,监听位置,如果数据库不在同一文件夹内,设置adr_base_listener的值指向某一数据库实例所在文件夹,将会出现监听无法启动的错误(连接时并不会显示监听无法启动,而是显示无监听,但在登陆日志中会记录listener.ora参数错误,日志所在位置为:d:\oraclehudatabasesofeware\oraclebasedoct\diag\tnslsnr\hudage\listener下的trace文件夹下,和alter文件夹下均可看到)。
  3. 修改保存后,必须重启监听服务和数据库实例服务后才能连接数据库,否则,还会提示同样的错误。
  4. 虽然监听是主要问题,但是数据库实例名文件tnsnames也与监听有关,所以在listener修改完后,重启监听服务和数据库实例服务后,连接数据库,如果还有问题,就要查看tnsnames文件有没有问题。一般文件内容如下:

# tnsnames.ora network configuration file: d:\oraclehudatabasesofeware\oraclestationofsoftware\network\admin\tnsnames.ora

# generated by oracle configuration tools.

 

oradb =

(description =

(address = (protocol = tcp)(host = localhost)(port = 1521))

(connect_data =

(server = dedicated)

(service_name = oradb)

)

)

 

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)

)

)

2、当前监听无法识别连接描述符中请求的服务

如图5:

关于Oracle本地连接出现与监听有关的问题的解决方法探讨

图5

监听无法识别连接描述符中请求的服务同样说明服务实例没有被监听程序发现,即没有注册到监听程序中,所以解决方法如上问题1中的第二种。

 

*多监听多实例问题有待进一步研究。