ITPub博客

首页 > 数据库 > Oracle > oracle监听器的一些研究及资料总结

oracle监听器的一些研究及资料总结

原创 Oracle 作者:殷晓晓 时间:2014-09-01 15:23:34 0 删除 编辑
结合自己的一些研究以及对网上一些资料的总结,故总结oracle监听器内容如下:
如果数据库启动之后并动态注册了,期间如果监听重启了,监听里的信息会丢失,这时就需要手动注册监听:
alter system register;

show parameter services_name;
tnsname.ora
<服务名 --任意> =
 (....
  (service_name =)
  ..
  )
只有services_name参数里指定的服务名才能被动态注册。

listener.ora
监听名 =
(  
   ......
)
动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数。
若监听不为默认的端口号1521则要通过更改local_listener参数来实现该监听的正常工作。
show parameter local_listener;
alter system set local_listener=监听名称;  
!
lsnrctl 
set curr <监听名称>

客户端根据tnsname.ora中的SERVICE_NAME和地址(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)),到这个地址去访问监听器。然后监听器根据文件lisnter.ora文件中的GLOBAL_NAME来判断是否有一个 GLOBAL_DBNAME 和 SERVICE_NAME 相等。如果相等,则建立客户端到SID标识的服务端实例的连接。(有一个例外:tnsnames.ora中可以用参数SID来取代SERVICE_NAME,这时比较的是tnsnames.ora中的SID和lisnter.ora中的SID_NAME,但是从oracle9i开始不推荐使用SID。因为SID无法隔离客户端和服务端)

tnsnames.ora中的服务名SERVICE_NAME的可选值为静态和动态注册的服务名(SERVICE_NAME),也即listener.ora中的GLOBAL_DBNAME和PARAMETER中的SERVICE_NAME,可以是任意支持的字符,但两者必须与保持一致。而sqlplus中的链接字符串,并不是SERVICE_NAME,而是一个SERVICE_NAME的ALIAS(在tnsname.ora中配置) 。

静态监听的目的,除了简化配置外,还可以提供在数据库未启动前仍能连接的功能。
一般(默认)情况下GLOBAL_DBNAME,SERVICE_NAME,ALIAS 及其他的DB_NAME,DB_UNIQUE_NAME,SID_NAME均一样,导致了“傻傻分不清楚”。

一个服务下有多个实例,客户端连接到特定的实例是通过tnsname.ora中的instance_name 参数来实现的。

注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的db_name的值。如果在RAC中,您必须将集群中每个实例的instance_name参数设置为一个唯一的值。
注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的 db_name和db_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如 orcl.oracle.com)或缩写的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼接。

常见的有关oracle监听的故障:
1、 ORA-12541: TNS: 没有Oracle监听器
显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。
启动监听器:$ lsnrctl start或C:\lsnrctl start
2、 ORA-12500: TNS: Oracle监听程序无法启动专用服务器进程
对于Windows而言,没有启动Oracle实例服务。
启动实例服务:C:\oradim –startup -sid orcl或者net start oracleserviceorcl
3、 ORA-12535: TNS: 操作超时
出现这个问题的原因很多,但主要跟网络有关。
解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接。
4、 ORA-12154: TNS: 无法处理服务名
检查输入的服务名与配置的服务名是否一致。
另外注意生成的本地服务名文件(Windows下如D:\oracle\ora92\network\admin\tnsnames.ora,Linux/Unix下$ORACLE_HOME/network/admin/tnsnames.ora)里每项服务的首行服务名称前不能有空格。
5、 ORA-12514: TNS: Oracle监听进程不能解析在连接描述符中给出的 SERVICE_NAME
打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确。该服务名必须与服务器端Oracle监听器配置的全局数据库名一致。
service_name在tnsnames.ora中有配置
global_dbname在listener.ora中有配置
6、 Windows下启动Oracle监听服务提示找不到路径
用命令或在服务窗口中启动监听提示找不到路径,或Oracle监听服务启动异常。打开注册表,进入HKEY_LOCAL_MACHINE/SYSTEM/Current
ControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath字符串项是否存在,如果没有,设定值为D:\oracle\ora92\BIN\TNSLSNR,不同的安装路径设定值做相应的更改。这种方法同样适用于Oracle实例服务,同上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE项,查看ImagePath字符串项是否存在,如果没有,则新建,设定值为d:\oracle\ora92\binORACLE.EXE MYORACLE。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29822855/viewspace-1261454/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-08-24

  • 博文量
    1
  • 访问量
    2038