监听总结之3.监听命令:lsnrctl工具的三个命令start、stop和status都是分步执行的

首先,我们需要知道两个事情:

1、lsnrctl工具下的三个命令,分别是status、stop、start。

我们从三个命令执行后在屏幕上显示的结果来看,可以发现一个共性,就是都有“正在连接到”这句话 。

2、每次进入lsnrctl工具的环境时,lsnrctl工具都会自动读取一次listener.ora文件里的全部内容(当然包括SID_LIST_监听名这个部分的内容)存到内存上。此后,在未退lsnrctl工具的环境前,status、stop、start这三命令在执行到“正在连接到”这一步时,都是使用上述的内容,无论进入lsnrctl工具的环境后,listener.ora文件里的内容是否有变化,都不影响。虽然start命令执行启动监听程序这一步时,是要重新读取一次listener.ora文件的(“监听:”这部分的内容就是证明)。但是,

“正在连接”后跟着的内容又还是进入lsnrctl工具环境时读取listener.ora的内容。

 

为什么说三个命令是分步执行的?

lsnrctl工具下的三个命令,分别是status、stop、start。

我们从三个命令执行后在屏幕上显示的结果来看,可以发现一个共性,就是都有“正在连接到”这句话 。

而且status和start两个命令在“正在连接到”这句话 之后的要显示的内容(基本)是一样的。

还有start执行后在屏幕上显示的结果的开头部分有“启动tnsctl。。。。。监听:”的字样,说明它先是(如果该监听程序原先不存在的话,就会先创建再)启动一个监听程序。

由此,可以看出三个命令里都是分步执行的。

 

三个命令分步执行的具体步骤的说明:

start 监听名A(共有四步)

1、首先,start命令会检查是否有与监听名A同名的监听程序已经启动了,或是虽然与监听名A不同名但是监听配置和它一样的监听程序已经启动了。

    如果这两种情况有一个发生,就会提示“某某监听程序已经启动”。

2、接着,若是没有上述的情况发生,则进入第二步,即执行启动监听程序操作,具体如下:

   在Linux下,

     (start命令) 重新读取一次listener.ora文件里的名为监听名A的监听配置(“监听:”这部分的内容就是证明)。不过,应该没有读取SID_LIST_监听名这个部分的内容,这个未证实过。

      (或是start命令) tnslsnr.exe先复制出自己的一个进程,之后并根据读取来的listener.ora文件里的相关监听配置后初始化该进程。这样,就启动了一个监听程序的过程完成了。

  在window下,

   start 监听名A  时,会先去启动对应的监听服务(在操作系统的服务管理器里)。如果没有对应的监听服务(名),就会自己去创建一个监听服务,且会在start命令执行后显示的结果里有一个提示:failed to open service,error 1060.

    例如,我们启动一个名为OracleOraHome11TNSListener的监听服务时,该监听服务就会根据[控制面板]=[服务]=OracleOraHome11TNSListener 的属性里“可执行文件的路径项”(为"F:/oracle/ora11/bin/TNSLSNR.EXE)的信息来启动TNSLSNR.EXE(如果还未启动的话)。TNSLSNR.EXE则会根据监听服务名OracleOraHome11TNSListener,提取其里面的监听名部分,即这里的Listener。再根据这个监听名Listener,TNSLSNR.EXE就会从listener.ora文件里读取相关的监听配置,这样TNSLSNR.EXE就会去监听监听配置所说的监听点了。这个就是window下所谓的启动监听程序的过程。

  附加:

例如,在未退出lsnrctl环境前,且名为Listener的监听程序还在运行时,用sc命令删除了对应的监听服务,命令如下:sc delete OracleOraHome11TNSListener,则此时输入stopListener或是statusListener命令,就会提示:failed to start service,error 1058。这是因为在进入lsnrctl环境后,监听服务已经启动或是startListener时创建了监听服务,则会标记该服务名已经存在。标记有该服务,不代表真实该服务是否存在的。        stop或是status命令不直接作用于TNSLSNR.EXE,而是直接作用于监听服务,再通过监听服务作用于TNSLSNR.EXE,所以stop或是status命令发现监听服务没有启动,就试图启动它,但是它已经被删除不存在的了,故而提示:failed to start service。

3、  最后,连接到“正在连接到”后面跟着的监听配置所对应的监听程序上。若该监听程序未启动,则提示“无监听程序”;

4、若该监听程序已经启动,则显示(status)该监听程序的状态信息。

注释:

1、执行Start A时,若是提示“B已经启动”,则A就真的未启动。若是提示“无监听程序”,则A还是会启动了的。

通过退出lsnrctl工具环境再进入后status A即可查看是否已经启动。 或者Tnsping   包含A所有配置条目的网络服务名 看是否每条 配置条目都通。不过这个还一定,因为启动每条配置条目对应的监听点可能是别的好几个监听程序。

2、start时虽然会重新读取listener.ora文件里的相关内容,但是它不会去更新先前进入lsnrctl工具环境时从listener.ora文件读取到内存上的内容。因此,进入lsnrctl工具环境后,若A此时还未启动且又修改了A的监听配置的话,则此时执行start A到它的第三步,即“正在连接到”这一步,会提示“无监听程序”,虽然实际上此时监听程序A已经启动了。

详见《 监听总结之start正在连接也是用旧的内容 故start时有读取但未更新内存上从listener文件来的内容

3、  oracle系统在执行”start A“时,会根据监听名A去查找到listener.ora文件里对应的监听配置,进而创建(并启动)一个同名的监听程序的。



status 监听名A(共有两步)

1、直接连接到“正在连接到”后面跟着的监听配置所对应的监听程序上。若该监听程序未启动,则提示“无监听程序”;

2、若该监听程序已经启动,则之后再显示(status)该监听程序的状态信息。


stop  监听名A(共有两步)

1、也是直接连接到“正在连接到”后面的监听配置所对应的监听程序上。若该监听程序未启动,则提示“无监听程序”;

2、若该监听程序已经启动,则之后再停止(stop)该监听程序。


提示:

0、“正在连接到”后显示的内容是在进入lsnrctl工具环境时从listener.ora文件读取的。

      假设一个监听程序对应的监听配置里有包含多条监听配置条目,则“正在连接到”后一般显示的只有其中的第一条监听配置条目,但是实际还是会连接到这多条监听配置条目各自对应的监听点上的

      我们知道,“正在连接到”后一般显示的是“lsnrctl命令   监听名A”所指的名为监听名A的监听配置里的第一条监听配置条目。只要目前已经启动的这些监听程序们中有哪一个的监听配置条目这个第一条监听配置条目是一样的,即会连接到该启动监听程序如果没有存在和这个第一条监听配置条目是一样的,则oracle系统(的某进程)还要看

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值