第一部分:
lsnrctl工具下的三个命令,分别是status、stop、start。
我们从三个命令执行后在屏幕上显示的结果来看,可以发现一个共性,就是都有“正在连接到”这句话 。
而且status和start两个命令在“正在连接到”这句话 之后的要显示的内容(基本)是一样的。
还有start执行后在屏幕上显示的结果的开头部分有“启动tnsctl。。。。。监听:”的字样,说明它先是(如果该监听程序原先不存在的话,就会先创建再)启动一个监听程序。
由此,可以看出三个命令里都是分步执行的。
status 监听名A(指的是程序 ,这里) :是先连接到“正在连接到”后面的监听配置所对应的监听程序上,之后再显示(status)该监听程序的状态信息。
stop 监听名B :是先连接到“正在连接到”后面的监听配置所对应的监听程序上,之后再停止(stop)该监听程序。
提示:如果所连接的监听程序未启动,则这两个命令的执行结果就会提示“无监听程序”。
start 监听名C :是先检查是否已经有叫“监听名C”的监听程序启动了,启动了,该命令就会再往下执行,并提示“已有监听名C的监听程序启动”。如果未启动,则再启动监听名C的监听程序。最后,在连接到该监听名C的监听程序(也就是“正在连接到”后面的监听配置所对应的监听程序)上,执行和status最后一步一样的步骤,即显示该监听程序的状态信息。
在进入lsnrctl工具环境时,lsnrctl工具会一次性读取listener.ora文件上的所有内容到内存上,在未退出lsnrctl工具环境前,执行任何命令(start命令除外),都不会再次读取listener.ora文件上的内容,所以在未退出lsnrctl工具环境前,无论listener.ora文件上的内容是否有改变或是干脆将listener.ora文件删除或是移走,都不会影响lsnrctl工具里命令的执行结果。
除非,例如在进入lsnrctl工具环境后,start监听名A,再status监听名A。之后,退出lsnrctl工具环境。然后,修改监听名为A的监听配置。之后,再重新进入lsnrctl工具环境,status监听名A,则提示“无监听程序”,因为此时执行status时连接到的修改配置后的监听程序,而该程序未启动。未修改前的配置的监听程序仍是处于启动状态的。这样,就会影响lsnrctl工具里命令的执行结果。会影响命令执行结果。