监听总结之window服务本质和特点小结以及证明在window下监听程序其实就是多个(或是一个)监听配置的封装
2013-11-07 10:57
736 查看
[b]window服务是什么[/b]
window下的服务其实就是(为一个程序,即可执行文件而)在注册表里的注册配置信息。
详见《window服务是什么嘛?》
window服务特点:
1、
如果修改上图红框里的名字,则在服务管理器里,启动、停止或是刷新一个服务(如监听服务)时就会出问题,如”描述“这一列就是显示”读取失败“。也就是说在注册表里的有些键值是动态起作用的(不用重启电脑,修改即可生效,如Description)。但是有些则要重启才会生效,如监听服务里的displayname就是这样。
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的监听配置:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
若说 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 或 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
叫监听配置条目,那整个listener的配置就是一个监听程序。listener为这个监听程序的监听名。
监听程序,其实就是多个(或是一个)监听配置条目的封装。
在Linux下,监听程序就是tnslsnr.exe(根据监听名来读取listener.ora文件里的相关监听配置后先复制出)的一个复制进程(,并用这些相关监听配置初始化该进程)。但在,在window下,无论你启动多少监听程序,操作系统里就只有一个tnslsnr.exe的进程,所以在window下,监听程序(其实不是指的是一个进程)这个概念,其实是让tnslsnr.exe读取的该监听名的封装的监听配置。更确切地说,在window下,[b]监听程序这个概念就是tnslsnr.exe(根据监听名来读取listener.ora文件里的相关监听配置后先创建出)的一个线程(,并用[b]这些相关监听配置初始化该[b][b]线程[/b][/b])。[/b][/b]
下面是,证明启动在window下,一个监听程序(其实不是指的是一个进程),其实是让tnslsnr.exe读取该监听名的封装的监听配置。
首先,从开始菜单选择“运行”,输入“regedit”打开注册表编辑器,打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\,服务管理器中的所有服务都可以在该项下找到。如下图所示:
原以为打开Oracle的一个监听服务,会发现里面有写着对应的监听配置的信息。但实际上,没有。所以,认为既然一个监听服务里面没有有写着对应的监听配置的信息,那么不同监听服务的区别就只在于监听服务的名字不同,只要把一个监听服务名字(在上图红框类似的位置改名字)改为另一个监听服务名字(当然,这个另一个监听服务名字先随便改成其他什么名字),再在服务管理器里,启动这个另一个监听服务,则这个另一个监听服务对应的监听程序还是可以正常起来。(在注册表里,将一个监听服务名a改为另一个监听服务名b。再在服务界面上启动监听服务名b,监听服务名b对应的监听程序还是可以正常启动。)结果也正是如此,这就说明创建的监听服务的内容没有区别,只是名字区别而已。
这里我们讲下在服务管理器里,启动一个监听服务,会执行哪些过程:
例如,我们启动一个名为OracleOraHome11TNSListener的监听服务时,该监听服务就会根据[控制面板]=[服务]=OracleOraHome11TNSListener
的属性里“可执行文件的路径项”(为"F:/oracle/ora11/bin/TNSLSNR.EXE)的信息来启动TNSLSNR.EXE(如果还未启动的话)。TNSLSNR.EXE则会根据监听服务名OracleOraHome11TNSListener
提取其里面的监听名部分,即这里的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)使用而停止“。
====================================================================
window下的服务其实就是(为一个程序,即可执行文件而)在注册表里的注册配置信息。
详见《window服务是什么嘛?》
window服务特点:
1、
如果修改上图红框里的名字,则在服务管理器里,启动、停止或是刷新一个服务(如监听服务)时就会出问题,如”描述“这一列就是显示”读取失败“。也就是说在注册表里的有些键值是动态起作用的(不用重启电脑,修改即可生效,如Description)。但是有些则要重启才会生效,如监听服务里的displayname就是这样。
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的监听配置:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
若说 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 或 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
叫监听配置条目,那整个listener的配置就是一个监听程序。listener为这个监听程序的监听名。
监听程序,其实就是多个(或是一个)监听配置条目的封装。
在Linux下,监听程序就是tnslsnr.exe(根据监听名来读取listener.ora文件里的相关监听配置后先复制出)的一个复制进程(,并用这些相关监听配置初始化该进程)。但在,在window下,无论你启动多少监听程序,操作系统里就只有一个tnslsnr.exe的进程,所以在window下,监听程序(其实不是指的是一个进程)这个概念,其实是让tnslsnr.exe读取的该监听名的封装的监听配置。更确切地说,在window下,[b]监听程序这个概念就是tnslsnr.exe(根据监听名来读取listener.ora文件里的相关监听配置后先创建出)的一个线程(,并用[b]这些相关监听配置初始化该[b][b]线程[/b][/b])。[/b][/b]
下面是,证明启动在window下,一个监听程序(其实不是指的是一个进程),其实是让tnslsnr.exe读取该监听名的封装的监听配置。
首先,从开始菜单选择“运行”,输入“regedit”打开注册表编辑器,打开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\,服务管理器中的所有服务都可以在该项下找到。如下图所示:
原以为打开Oracle的一个监听服务,会发现里面有写着对应的监听配置的信息。但实际上,没有。所以,认为既然一个监听服务里面没有有写着对应的监听配置的信息,那么不同监听服务的区别就只在于监听服务的名字不同,只要把一个监听服务名字(在上图红框类似的位置改名字)改为另一个监听服务名字(当然,这个另一个监听服务名字先随便改成其他什么名字),再在服务管理器里,启动这个另一个监听服务,则这个另一个监听服务对应的监听程序还是可以正常起来。(在注册表里,将一个监听服务名a改为另一个监听服务名b。再在服务界面上启动监听服务名b,监听服务名b对应的监听程序还是可以正常启动。)结果也正是如此,这就说明创建的监听服务的内容没有区别,只是名字区别而已。
这里我们讲下在服务管理器里,启动一个监听服务,会执行哪些过程:
例如,我们启动一个名为OracleOraHome11TNSListener的监听服务时,该监听服务就会根据[控制面板]=[服务]=OracleOraHome11TNSListener
的属性里“可执行文件的路径项”(为"F:/oracle/ora11/bin/TNSLSNR.EXE)的信息来启动TNSLSNR.EXE(如果还未启动的话)。TNSLSNR.EXE则会根据监听服务名OracleOraHome11TNSListener
提取其里面的监听名部分,即这里的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)使用而停止“。
====================================================================
相关文章推荐
- 监听总结之解析问题二:由sqlnet.ora文件寻到EZCONNECT适配器程序来解析主机名为主机上的多个ip地址(*) 以及 tnsping是用来测试某个配置的监听程序是否启动
- 管理者的本质其实就是一个服务者,服务下属的
- 监听总结之解析问题一:由sqlnet.ora文件寻到TNSNAME适配器程序来解析网络服务名为它的具体配置(×)
- win7_64位_oracle11g:Enterprise Manager配置失败-监听程序未启动或数据库服务未注册到该监听程序解决办法
- window服务程序突破限制访问网络共享资源总结
- oracle Net Configuration(监听程序和网络服务配置)
- Oracle Net Configuration(监听程序和网络服务配置)
- Enterprise Manager配置失败-监听程序未启动或数据库服务未注册到该监听程序解决办法----ORACLE 11g
- Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务、ORA-12516 TNS监听程序找
- ACE框架简介以及一个基于ACE的C/S服务程序实例
- 关于Apache服务基本特点以及安装配置指导
- ACE框架简介以及一个基于ACE的C/S服务程序实例
- 做完一个小网站的一点经验总结(2):asp.netaccess程序运行环境的配置
- 监听总结之2.不同名同配置实验(说明“正在连接到”操作的特点)
- 监听总结之“正在连接到”里的内容选谁以及同名不同配置选谁(*)
- Oracle几个基础配置问题:ORA-12154: TNS: 无法解析指定的连接标识符、ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务、ORA-12516 TNS监听程序找不到符合协议堆栈要求的可用处理程序
- Enterprise Manager配置失败-监听程序未启动或数据库服务未注册到该监听程序解决办法----ORACLE 11g
- (十三)Core Java GUI(图形化界面小程序开发,事件监听机制流程,以及可运行jar包的配置实现,) (109)
- svn服务安装和配置 以及搭配Eclips插件使用(总结)
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务(以及常见oracle数据库错误)