window下监听程序是线程而linux下则是进程


         在Linux下,监听程序就是tnslsnr.exe,根据监听名来读取listener.ora文件里的相关监听配置后,先创建出它的一个复制进程,并用这些相关监听配置初始化该进程)。用命令形式表达就是“tnslsnr    监听名A”。我们可以用命令“ps -ef|grep tnslsnr”查看目前操作系统里已经启动哪些监听程序(进程)。例如:

ps -ef|grep tnslsnr

 UID    PID    PPID    C    STIME    TTY      TIME     CMD

 Oracle   345   339     0   Mar 06       ?        0:25     /u01/app/Oracle/product/11g/bin/TNSLSNR  LSN2

注释:

这里,LSN2是一个监听名,在tnslsnr    监听名A”命令中就是一个参数。

由于ps命令显示的是有哪些进程,所以grep后筛选的是进程名字。故而,我们想通过ps -ef|grep lsn2”,是查不到监听程序 LSN2的。

       但在,在window下,无论你启动多少监听程序,操作系统里就只有一个tnslsnr.exe的进程,所以在window下,监听程序(其实不是指的是一个进程)这个概念,其实是让tnslsnr.exe读取的该监听名的封装的监听配置。更确切地说,在window下,监听程序这个概念就是tnslsnr.exe,根据监听名来读取listener.ora文件里的相关监听配置后,先创建出一个线程,并用这些相关监听配置初始化该线程

附加:

ps各列都代表啥意思啊?

仔细阅读10G的进程部分.

man ps

-f             Show columns user, pid, ppid, cpu, stime, tty,
                          time, and args, in that order.

===================================================================================================================

start命令第二步,即执行启动监听程序操作,具体如下:

   在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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值