ITPub博客

首页 > 数据库 > Oracle > 通过EM启动监听的一点总结

通过EM启动监听的一点总结

Oracle 作者:sfwang168 时间:2013-07-09 17:31:10 0 删除 编辑

背景:

    1)ORACLE数据库软件安装成功,并创建一个本地库orcl。

    2)EM配置成功

    3)未配置listener.ora tnsnames.ora

步骤

    1)执行tnsping orcl

执行结果:

[oracle@mServer1 admin]$ tnsping orcl

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-JUL-2013 15:04:35

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:

TNS-03505: Failed to resolve name
结果分析:

无法解析orcl连接符

   2)执行tnsping mServer1.localdomain(本机的主机名)

执行结果:

[oracle@mServer1 admin]$ tnsping mServer1.localdomain

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-JUL-2013 15:05:13

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:

Used HOSTNAME adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.37.128)(PORT=1521)))
TNS-12541: TNS:no listener
结果分析:

没有启动监听程序,

   3)总结:tnsping 命令需要启动监听程序

   4)启动EM console

   5)浏览器访问EM console

 通过EM启动监听的一点总结

可以看到数据库实例状态为关闭、监听程序状态为关闭、到实例的代理连接状态为失败,失败原因ORA-12541没有监听程序。

   6)启动listener

错误现象:点击启动监听程序,要求输入系统用户及密码后。重新跳转此页面时,监听程序仍处在关闭状态。

解决办法:使用netca重新配置本地数据库的监听程序,若没有的配置过可以新增本地数据库的监听程序。

   7)重新启动listener

重新打开EM console点击启动监听程序,页面跳转至如下页面

通过EM启动监听的一点总结

错误原因

listener.ora中并未明确配置orcl实例的监听地址,所以无法解析orcl连接符。此时监听程序已启动,但不可使用@orcl此种方式连接实例。

点击确定,页面跳转至如下页面

通过EM启动监听的一点总结

点击确定,页面跳转至EM console页面

通过EM启动监听的一点总结

可以看到监听程序已启动,但右侧没有关闭按钮,代表EM不可管理该监听。

   8)优化listener.ora

采用静态注册方式,注册数据库服务到监听器。修改后的listener.ora内容如下

SID_LIST_LISTENER =
 (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = ORCL)
  (ORACLE_HOME = /opt/app/oracle/product/11.2.0/dbhome_1/)
  (SID_NAME = orcl)
  )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mServer1.localdomain)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /opt/app/oracle

静态监听:

  oracle实例运行后,监听程序启动时,根据listener.ora的配置注册相应的服务。

  其中global_dbname对应的是oracle对外的服务名

    sid_name对应的是oralce实例的名称

    静态监听的用途:

    1.监听器不是最早启动,oracle实例先启动

  2.监听器重启

  3.oracle实例没有open

       查询某服务是静态注册还是动态注册

  可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。

  实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。

  动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从 监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退(fallback)和负载平衡。

    什么是动态注册?

动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。

oracle监听器运行后,oracle实例在open时,会动态向监听程序注册其service_namesinstance_name

  其中instance_name默认是:db_name

  而service_names默认是:db_name.db_domain

动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP)因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数!

动态注册无需修改listenr.ora 文件,只需修改tnsnames.ora文件

LISTENER =

(DESCRIPTION =

(ADDRESS (PROTOCOL TCP)(HOST DaveDai)(PORT 1522))

)

然后sys用b6运行:

SQL> alter system set local_listener=listener;

SQL> alter system register;

 

或者:

SQL> alter system set LOCAL_LISTENER='(ADDRESS (PROTOCOL TCP)(HOST DaveDai)(PORT 1522))';

SQL> alter system register;

系统已更改。

$lsnrctl status listener

如果没有显式设置service_namesinstance_name的值,那么仅当数据库在监听器运行之后启动时,动态注册才会发生;在这种情况下,如果监听器后来发生了重启,动态注册信息将会丢失。显然,最好在所有的数据库启动之前先启动监听器,这样就会避免没有显式设置 service_namesinstance_name的值时,若重启监听器带来的动态注册信息丢失的情况。

为初始化参数service_namesinstance_name设置显式的值是个很好的实践,尽管如果您没有设置它们,Oracle也会为动态注册而生成默认值(基于db_namedb_main)。这样做的原因是,如果监听器在数据库启动之后重新启动,其动态注册行为将会有一些微妙的区别.如果监听器在数据库运行之后重新启动,你们仅当您在init.ora文件中显式地设置了service_namesinstance_name的值时,每个数据库的PMON进程才会在很短的时间之后自动注册数据库。

   

另外,您还可以在SQL*PLUS中使用命令:

SQL>ALTER SYSTEM REGISTER;

在数据库打开时的任何时候,手工地在监听器中注册服务值。这个命令对于替换因监听器重启而丢失地服务值很有用,并且它所注册地值与在数据库启动时由动态注册所设置的值完全一样。


    9)验证优化后的listener.ora

监听器配置改为静态注册后,打开em cosole 首页,点击启动监听

通过EM启动监听的一点总结

输入系统用户名及密码后,直接跳转至em console

通过EM启动监听的一点总结
监听已启动,到实例的代理连接详细信息为实例未启动。

点击数据库实例中的启动,即可启动实例,并进入em 的主页面



 

<!-- 正文结束 -->

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

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

注册时间:2009-04-15