首页 > 数据库 > Oracle > 通过EM启动监听的一点总结
背景:
步骤
执行结果:
[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.
Used parameter files:
TNS-03505: Failed to resolve name
结果分析:
无法解析orcl连接符
执行结果:
[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.
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
结果分析:
没有启动监听程序,

可以看到数据库实例状态为关闭、监听程序状态为关闭、到实例的代理连接状态为失败,失败原因ORA-12541没有监听程序。
错误现象:点击启动监听程序,要求输入系统用户及密码后。重新跳转此页面时,监听程序仍处在关闭状态。
解决办法:使用netca重新配置本地数据库的监听程序,若没有的配置过可以新增本地数据库的监听程序。
重新打开EM console点击启动监听程序,页面跳转至如下页面
listener.ora中并未明确配置orcl实例的监听地址,所以无法解析orcl连接符。此时监听程序已启动,但不可使用@orcl此种方式连接实例。
点击确定,页面跳转至如下页面
点击确定,页面跳转至EM console页面

可以看到监听程序已启动,但右侧没有关闭按钮,代表EM不可管理该监听。
采用静态注册方式,注册数据库服务到监听器。修改后的listener.ora内容如下
SID_LIST_LISTENER =
LISTENER =
ADR_BASE_LISTENER = /opt/app/oracle
静态监听:
oracle实例运行后,监听程序启动时,根据listener.ora的配置注册相应的服务。
其中global_dbname对应的是oracle对外的服务名
2.监听器重启
3.oracle实例没有open
可以使用命令lsnrctl
实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。
动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从
动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。
oracle监听器运行后,oracle实例在open时,会动态向监听程序注册其service_names和instance_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
)
然后以sys用b6运行:
SQL>
SQL>
或者:
SQL>
SQL>
系统已更改。
$lsnrctl
如果没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行之后启动时,动态注册才会发生;在这种情况下,如果监听器后来发生了重启,动态注册信息将会丢失。显然,最好在所有的数据库启动之前先启动监听器,这样就会避免没有显式设置
为初始化参数service_names和instance_name设置显式的值是个很好的实践,尽管如果您没有设置它们,Oracle也会为动态注册而生成默认值(基于db_name和db_main)。这样做的原因是,如果监听器在数据库启动之后重新启动,其动态注册行为将会有一些微妙的区别.如果监听器在数据库运行之后重新启动,你们仅当您在init.ora文件中显式地设置了service_names和instance_name的值时,每个数据库的PMON进程才会在很短的时间之后自动注册数据库。
另外,您还可以在SQL*PLUS中使用命令:
SQL>ALTER
在数据库打开时的任何时候,手工地在监听器中注册服务值。这个命令对于替换因监听器重启而丢失地服务值很有用,并且它所注册地值与在数据库启动时由动态注册所设置的值完全一样。
监听器配置改为静态注册后,打开em cosole 首页,点击启动监听
输入系统用户名及密码后,直接跳转至em console
点击数据库实例中的启动,即可启动实例,并进入em 的主页面
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21390747/viewspace-1115413/ ,如需转载,请注明出处,否则将追究法律责任。