window服务是什么
window下的服务其实就是(为一个程序,即可执行文件而)在注册表里的注册配置信息。
详见《window服务是什么嘛?》
2、 同名进程都是一个程序(可执行文件exe)的复制,如任务管理器里的进程项里的svchost.exe,右键 转到服务后,右键属性看到 svchost.exe -k localsystemnetworkrestricted,这说明带参数的程序都对应一个进程。再比如oracle.exe也是。
而各个监听服务里是没带参数的tnslsnr.exe,所以对应任务管理器里的进程项里的tnslsnr.exe只有一个,不是每个服务对应一个tnslsnr.exe进程。
总之,带参数的服务和进程是一对一的关系,不带参数的服务和进程是多对一的关系。
而服务和进程间(如启动、停止等)状态关系,阐述如下:
属性里“可执行文件的路径项”中带有参数的服务和它对应的进程间的状态是相互一致的,即两者无论谁启动(停止)另一方也会跟着启动(停止)。例子,如oracle.exe和oracleserviceSID服务。
属性里“可执行文件的路径项”中没有参数的服务和它对应的进程间的状态关系如下:
进程停止,则所有与之对应的服务都会停止;有一个与之对应的服务启动,则进程就会启动。例子,如TNSLSNR.EXE和OracleOraHome11TNS监听名 服务。
3、 lsnrctl命令,如从start到stop时,不仅可以使监听程序停止,而且也会使对应的监听服务也停止。反之,对应的监听服务停止(启动),也会使监听程序监听程序停止(启动)。
startup或是shutdown命令(oracle.exe)可以启动或是停止实例,而不会使启动或是停止oracleserviceSID服务。反之,oracleserviceSID服务启动或是停止,也会使实例启动或是停止。
RAC里,ASM服务(win2008操作系统里)启动了,但ASM实例还是没有启动,要用命令startup去启动,因为在Windows平台下可以修改Oracle实例不随服务启动。
总之,在window里,服务对应的进程是否随服务的启动而启动,是可以在注册表里设置的。详见《在Windows平台下可以修改Oracle实例不随服务启动》
附加:在window下,监听程序由(写到注册表中相应服务项)监听配置,tnslsnr.exe和服务组成。
=================================================================
在window下,有如下面名为LISTENER的监听配置:
监听程序,其实就是多个(或是一个)监听配置条目的封装。
在Linux下,监听程序就是tnslsnr.exe(根据监听名来读取listener.ora文件里的相关监听配置后先复制出)的一个复制进程(,并用这些相关监听配置初始化该进程)。但在,在window下,无论你启动多少监听程序,操作系统里就只有一个tnslsnr.exe的进程,所以在window下,监听程序(其实不是指的是一个进程)这个概念,其实是让tnslsnr.exe读取的该监听名的封装的监听配置。更确切地说,在window下,监听程序这个概念就是tnslsnr.exe(根据监听名来读取listener.ora文件里的相关监听配置后先创建出)的一个线程(,并用这些相关监听配置初始化该线程)。
下面是,证明启动在window下,一个监听程序(其实不是指的是一个进程),其实是让tnslsnr.exe读取该监听名的封装的监听配置。
首先,从开始菜单选择“运行”,输入“regedit”打开注册表编辑器,打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\,服务管理器中的所有服务都可以在该项下找到。如下图所示:
提取其里面的监听名部分,即这里的Listener。再根据这个监听名Listener,TNSLSNR.EXE就会从listener.ora文件里读取相关的监听配置,这样TNSLSNR.EXE就会去监听监听配置所说的监听点了。这个就是window下所谓的启动监听程序的过程。
这里,要强调的一点就是,监听服务名字是有格式要求的,即是OracleOraHome11TNS+监听名 的形式。不然,TNSLSNR.EXE是不能从监听服务名字中识别出监听名的。这种格式,是在设计TNSLSNR.EXE时设计死的。
我们可以用sc命令来创建监听服务,例子如下:
sc create OracleOraHome11TNSListener binpath= "F:/oracle/ora11/bin/TNSLSNR“ start= auto displayname= "IPSEC Services"
其中,OracleOraHome11TNSListener就是上面所说的监听服务名字,是有格式的,不能乱写(监听服务要启动的可执行文件TNSLSNR.EXE对监听服务名字是有格式要求,而其他的服务对应的可执行文件是否对其服务的服务名字有格式要求,都是取决于可执行文件自己的)。而displayname(显示名字)则可以随便写的。
用sc命令创建成功一个监听服务后,还要在listener.ora文件里写上以Listener为监听名的监听配置,否则创建成功一个监听服务后直接启动该服务会提示”该服务由于未被程序(即TNSLSNR.EXE)使用而停止“。
====================================================================