实验用到的知识点:
一、一个监听配置对应于一个相同监听名的监听程序,两者一一对应。
二、 一个监听配置条目对应于一个监听点,两个内容相同的监听配置条目当然都是对应于同一个监听点。也就是说,每个监听点都有自己的一个监听配置条目,不同监听点间的区别就在于他们的监听配置条目的内容不一样。如果两个不同监听配置里包含一条相同内容的监听配置条目,则两者对应的监听程序就都想要监听同一个监听点。
1、一个监听程序对应的监听配置里有多个监听配置条目,则该监听程序可以监听多个监听点。如下图所示:
2、 一个监听点只能允许被一个监听程序所监听。例如,在监听点a被监听程序A监听后,若启动另一个监听程序B,而这个监听程序B所要监听的监听点里就包含了监听点a,则监听程序B不会被启动,会提示“A已经启动”。如下图所示:
例如,监听配置A包含有监听配置条目1和监听配置条目2,监听配置B包含有监听配置条目2,监听配置C包含有监听配置条目1。故而,A和B包含有共同的监听配置条目2,A和C包含有共同的监听配置条目1。具体如下:
所有实验的初始条件都是监听程序A、B、C都没有启动。
实验一(“正在连接到”操作的特点,异名同配间的关系):
查看监听程序A和B间的关系,如下图:
其中,监听点a对应于监听配置2。
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2013 22:1
2:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>start B
LSNRCTL>start A
TNS-01106:使用名称B的监听程序已经启动。
LSNRCTL> status A
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
TNS-12541: TNS:无监听程序
TNS-12560: TNS:协议适配器出现错误
TNS-00511: 无监听程序
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)
))
LISTENER 的 STATUS
------------------------
别名 B
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 22-10月-2013 22:22:26
正常运行时间 0 天 0 小时 0 分 34 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "cool" 包含 1 个例程。
例程 "too", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
实验说明:
实验中的status A这一步,是为了查看监听程序A是否已经启动。
这里,status A显示的结果说明监听程序A没有启动。因为如果监听程序A启动了,那么他就可以监听监听点a和b,但是status A显示的结果中,“正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)))”后提示“无监听程序”,说明监听配置1对应的监听点b未被监听程序监听,而监听程序A如果是已经启动了,那它就会监听监听点b。这样,就说明了监听程序A没有启动。
至于,“正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))”有结果,是因为监听程序B监听了监听点a。
查看监听程序是否已经启动的另一种方法,就是使用tnsping。
这里,tnsping 192.168.0.30:1525),则提示“无监听程序”。
注释:在操作系统的服务管理器上,启动了B,再启动A,也是启动不了的,提示“服务(即A)未由程序(即tnslsnr.exe)使用而自动停止”。
实验二(“正在连接到”操作对监听配置里的条目执行的顺序规则):
查看监听程序A和B、C间的关系,如下图:
实验2.1
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2013 22:1
2:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>start B
LSNRCTL>status A
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
TNS-12541: TNS:无监听程序
TNS-12560: TNS:协议适配器出现错误
TNS-00511: 无监听程序
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)
))
LISTENER 的 STATUS
------------------------
别名 B
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 22-10月-2013 22:22:26
正常运行时间 0 天 0 小时 0 分 34 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "cool" 包含 1 个例程。
例程 "too", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
实验2.2
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2013 22:1
2:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>start C
LSNRCTL>start B
LSNRCTL> stop A
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
命令执行成功
LSNRCTL>status C
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
TNS-12541: TNS:无监听程序
TNS-12560: TNS:协议适配器出现错误
TNS-00511: 无监听程序
LSNRCTL>status B
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)
))
LISTENER 的 STATUS
------------------------
别名 B
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 22-10月-2013 22:22:26
正常运行时间 0 天 0 小时 0 分 34 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "cool" 包含 1 个例程。
例程 "too", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
实验说明:
1、 我们知道,“正在连接到”后一般显示的是“lsnrctl命令 监听名A”所指的名为监听名A的监听配置里的第一条监听配置条目。只要目前已经启动的这些监听程序们中有哪一个的监听配置条目和这个第一条监听配置条目是一样的,即会连接到该启动监听程序。例如,
LSNRCTL>status A
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
LISTENER 的 STATUS
------------------------
别名 A
........
........
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))
........
........
命令执行成功2、如果没有存在和这个第一条监听配置条目是一样的,则oracle系统(的某进程)还要看该名为监听名A的监听配置里的第二条监听配置条目。以此类推。
例如,实验2.1的status A这一步显示的结果看到,因为监听配置1( (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525))))对应的监听点b未被监听程序监听,即监听监听点b的监听程序没有启动,所以连接到包含有监听配置1的监听程序这个操作就执行不成功,提示“无监听程序”。于是,oracle系统再查看该名为监听名A的监听配置里的第二条监听配置条目。由于此时监听程序B已经监听了监听点a,所以status A显示的结果中,执行“正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))”成功,也就是说连接到监听程序B,之后就可以显示(status)监听程序B相关信息了。
3、如果该名为监听名A的监听配置里的有一条监听配置条目存在于目前已经启动的这些监听程序们中那些监听配置条目中的,则oracle系统就不会再往下看该名为监听名A的监听配置里的监听配置条目。或者就一直查看到该名为监听名A的监听配置里的最后一条监听配置条目。
例如,实验2.2里执行 stop A这一步后,显示的结果是:正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525))),也就是说执行 stop A这一步所做的操作如下:连接到包含有监听配置1的监听程序上,这里就是监听程序C,再停止(stop)监听程序C的运行。于是,status C时,就提示“无监听程序”。那为什么执行status B时的结果是正常的呢?是因为oracle系统通过该名为监听名A的监听配置里的第一条监听配置条目已经可以连接到某一监听程序(这里指的是监听程序C)上,所以oracle系统就不会再往下看该名为监听名A的监听配置里的监听配置条目,也就是说oracle系统没有连接到包含有监听配置2的监听程序上,这里就是监听程序B,再停止(stop)监听程序B的运行。
实验三(“正在连接到”操作的特点,异名同配间的关系):
查看监听程序A和B间的关系,如下图:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2013 22:1
2:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>start A
LSNRCTL> stop B
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) (HOST = 192.168.0.30)(PORT = 1523)
))
命令执行成功
LSNRCTL> status A
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
TNS-12541: TNS:无监听程序
TNS-12560: TNS:协议适配器出现错误
TNS-00511: 无监听程序
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)
))
TNS-12541: TNS:无监听程序
TNS-12560: TNS:协议适配器出现错误
TNS-00511: 无监听程序
实验说明:
实验里执行 stop B这一步后,显示的结果是:正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) (HOST = 192.168.0.30)(PORT = 1523))),也就是说执行 stop B这一步所做的操作如下:根据B的监听配置里的监听配置条目2,找到目前已经启动的监听程序里包含有监听配置条目2的监听程序,这里就是监听程序A,并连接到监听程序A上,再停止(stop)监听程序A的运行。注意,这里停止的是整个监听程序(所要监听的监听点的监听),不是停止对监听配置2对应的监听a的监听,虽然这里的监听程序B只能监听监听点a一个监听点,但是实验里执行 stop B这一步实际上不是停止监听程序B,而是停止监听程序A。于是,status A时,监听程序A所要监听的两个监听点都提示“无监听程序”。
对实验一和三总结如下:
总之,若不同监听名的监听配置A和B包含共同相同内容的监听配置条目2,且此时已经启动了一个监听程序,如监听程序A,则此时,执行“lsnrctl命令 B”,执行到该lsnrctl命令中“正在连接到”这一步操作时,实际上连接到的是监听程序A,而不是“lsnrctl命令 B”里的监听程序B。更确切地说,这是执行“正在连接到”这一步操作时的特点:它不是说(一定)要连接到“lsnrctl命令 B”里的监听程序B上,而是连接到目前已经启动的监听程序里包含有B在“正在连接到”后跟着的监听配置条目的监听程序上。
注释:lsnrctl命令,如start、stop、status等。
实验四:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 22-10月-2013 22:1
2:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>start A
LSNRCTL> status B
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)
))
LISTENER 的 STATUS
------------------------
别名 A
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 22-10月-2013 22:22:26
正常运行时间 0 天 0 小时 0 分 34 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1525)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.0.30)(PORT = 1523)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "cool" 包含 1 个例程。
例程 "too", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
实验说明:
本实验,也是说明:
若不同监听名的监听配置A和B包含共同相同内容的监听配置条目2,且此时已经启动了一个监听程序,如监听程序A,则此时,执行“lsnrctl命令 B”,执行到该lsnrctl命令中“正在连接到”这一步操作时,实际上连接到的是监听程序A,而不是“lsnrctl命令 B”里的监听程序B。更确切地说,这是执行“正在连接到”这一步操作时的特点:它不是说(一定)要连接到“lsnrctl命令 B”里的监听程序B上,而是连接到目前已经启动的监听程序里包含有B在“正在连接到”后跟着的监听配置条目的监听程序上。
注释:lsnrctl命令,如start、stop、status等。
本文通过实验详细介绍了Oracle监听程序的配置和连接特点,强调了不同监听配置中相同配置条目可能导致的监听点冲突问题。实验展示了当尝试连接到已启动的监听程序时,系统会连接到包含相同配置的监听程序,而非指定的监听程序。此外,还讨论了监听程序启动、停止及状态检查的操作步骤和结果分析。




&spm=1001.2101.3001.5002&articleId=16818813&d=1&t=3&u=6d0ad346b2f6407aa208481901753a8a)
3728

被折叠的 条评论
为什么被折叠?



