测试环境:windows2008R2 Oracle11.2.0.1-oracle11.2.0.4
一个监听端口发现压力太大,或者想测试下两个监听端口效果如何,可以使用一下方法。
第一种方式:
listener.ora 配置如下:
	
	
		
			- 
				listener.ora
			 
			- 
				# listener.ora Network Configuration File: C:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
			 
			- 
				# Generated by Oracle configuration tools.
			 
			- 
				
			 
			- 
				LISTENER1 =
			 
			- 
				  (DESCRIPTION =
			 
			- 
				    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.16)(PORT = 1522))
			 
			- 
				  )
			 
			- 
				
			 
			- 
				SID_LIST_LISTENER =
			 
			- 
				  (SID_LIST =
			 
			- 
				    (SID_DESC =
			 
			- 
				      (SID_NAME = CLRExtProc)
			 
			- 
				      (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
			 
			- 
				      (PROGRAM = extproc)
			 
			- 
				      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
			 
			- 
				    )
			 
			- 
				  )
			 
			- 
				
			 
			- 
				ADR_BASE_LISTENER1 = C:\app\Administrator\product\11.2.0\dbhome_1\log
			 
			- 
				
			 
			- 
				LISTENER =
			 
			- 
				  (DESCRIPTION_LIST =
			 
			- 
				    (DESCRIPTION =
			 
			- 
				      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.16)(PORT = 1521))
			 
			- 
				    )
			 
			- 
				    (DESCRIPTION =
			 
			- 
				      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
			 
			- 
				    )
			 
			- 
				  )
			 
			- 
				
			 
			- 
				ADR_BASE_LISTENER = C:\app\Administrator
			
 
		
	 
 
两个监听器,那么问题来了,都是动态注册,怎么都生效呢?
此时,我们需要配置下数据库
服务器端tnsnames.ora 这个配置文件,如下
	
	
		
			- 
				ALL_LISTENER =
			 
			- 
				  (DESCRIPTION =
			 
			- 
				    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.16)(PORT = 1521))
			 
			- 
				    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.16)(PORT = 1522))
			 
			- 
				    (CONNECT_DATA =
			 
			- 
				      (SERVER = DEDICATED)
			 
			- 
				      (SERVICE_NAME = orcl)
			 
			- 
				    )
			 
			- 
				  )
			
 
		
	 
 
数据库中再执行以下操作:
	
	
		
			- 
				SQL> alter system set local_listener=all_listener;
			 
			- 
				
			 
			- 
				系统已更改。
			 
			- 
				
			 
			- 
				SQL> alter system register;
			 
			- 
				
			 
			- 
				系统已更改。
			 
			- 
				
			 
			- 
				SQL>
			
 
		
	 
 
两个监听器,测试连接数据库成功:如下所示:
	
	
		
			- 
				SQL> conn test/test@orcl
			 
			- 
				已连接。
			 
			- 
				SQL> conn test/test@orcl1
			 
			- 
				已连接。
			 
			- 
				SQL>
			 
			- 
				
			 
			- 
				
			 
			- 
				Microsoft Windows [版本 6.1.7600]
			 
			- 
				版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
			 
			- 
				
			 
			- 
				C:\Users\Administrator>lsnrctl stat
			 
			- 
				
			 
			- 
				LSNRCTL for 64-bit Windows: Version 11.2.0.4.0 - Production on 19-7月 -2017 12:
			 
			- 
				7:53
			 
			- 
				
			 
			- 
				Copyright (c) 1991, 2013, Oracle. All rights reserved.
			 
			- 
				
			 
			- 
				正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.16)(PORT=1521)))
			 
			- 
				LISTENER 的 STATUS
			 
			- 
				------------------------
			 
			- 
				别名                      LISTENER
			 
			- 
				版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.4.0 - Prod
			 
			- 
				ction
			 
			- 
				启动日期                  19-7月 -2017 12:04:02
			 
			- 
				正常运行时间              0 天 0 小时 13 分 52 秒
			 
			- 
				跟踪级别                  off
			 
			- 
				安全性                    ON: Local OS Authentication
			 
			- 
				SNMP                      OFF
			 
			- 
				监听程序参数文件          C:\app\Administrator\product\11.2.0\dbhome_1\network\
			 
			- 
				dmin\listener.ora
			 
			- 
				监听程序日志文件          C:\app\Administrator\diag\tnslsnr\wintest\listener\al
			 
			- 
				rt\log.xml
			 
			- 
				监听端点概要...
			 
			- 
				  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.16)(PORT=1521)))
			 
			- 
				  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
			 
			- 
				服务摘要..
			 
			- 
				服务 "CLRExtProc" 包含 1 个实例。
			 
			- 
				  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
			 
			- 
				服务 "orcl" 包含 1 个实例。
			 
			- 
				  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
			 
			- 
				服务 "orclXDB" 包含 1 个实例。
			 
			- 
				  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
			 
			- 
				命令执行成功
			 
			- 
				
			 
			- 
				C:\Users\Administrator>lsnrctl stat listener1
			 
			- 
				
			 
			- 
				LSNRCTL for 64-bit Windows: Version 11.2.0.4.0 - Production on 19-7月 -2017 12:
			 
			- 
				7:57
			 
			- 
				
			 
			- 
				Copyright (c) 1991, 2013, Oracle. All rights reserved.
			 
			- 
				
			 
			- 
				正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.16)(PORT=1522)))
			 
			- 
				LISTENER 的 STATUS
			 
			- 
				------------------------
			 
			- 
				别名                      listener1
			 
			- 
				版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.4.0 - Prod
			 
			- 
				ction
			 
			- 
				启动日期                  19-7月 -2017 12:11:58
			 
			- 
				正常运行时间              0 天 0 小时 6 分 1 秒
			 
			- 
				跟踪级别                  off
			 
			- 
				安全性                    ON: Local OS Authentication
			 
			- 
				SNMP                      OFF
			 
			- 
				监听程序参数文件          C:\app\Administrator\product\11.2.0\dbhome_1\network\
			 
			- 
				dmin\listener.ora
			 
			- 
				监听程序日志文件          C:\app\Administrator\product\11.2.0\dbhome_1\log\diag
			 
			- 
				tnslsnr\wintest\listener1\alert\log.xml
			 
			- 
				监听端点概要...
			 
			- 
				  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.8.16)(PORT=1522)))
			 
			- 
				服务摘要..
			 
			- 
				服务 "orcl" 包含 1 个实例。
			 
			- 
				  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
			 
			- 
				服务 "orclXDB" 包含 1 个实例。
			 
			- 
				  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
			 
			- 
				命令执行成功
			 
			- 
				
			 
			- 
				C:\Users\Administrator>
			
 
		
	 
 
还有一种方式:如下
	
	
		
			- 
				LISTENER =
			 
			- 
				  (DESCRIPTION_LIST =
			 
			- 
				    (DESCRIPTION =
			 
			- 
				      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-J351NF8VN9D)(PORT = 1521))
			 
			- 
				      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-J351NF8VN9D)(PORT = 1522))
			 
			- 
				      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
			 
			- 
				    )
			 
			- 
				  )
			
 
		
	 
 
注意,第一种方式,原监听不用操作,而上述中方式,需要重启监听。
重启后的效果:
	
	
		
			- 
				C:\Users\Administrator>lsnrctl status
			 
			- 
				
			 
			- 
				LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 20-7月 -2017 22:5
			 
			- 
				3:38
			 
			- 
				
			 
			- 
				Copyright (c) 1991, 2010, Oracle. All rights reserved.
			 
			- 
				
			 
			- 
				正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WIN-J351NF8VN9D)(PORT=1521)
			 
			- 
				))
			 
			- 
				LISTENER 的 STATUS
			 
			- 
				------------------------
			 
			- 
				别名                      LISTENER
			 
			- 
				版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
			 
			- 
				ction
			 
			- 
				启动日期                  20-7月 -2017 22:53:17
			 
			- 
				正常运行时间              0 天 0 小时 0 分 22 秒
			 
			- 
				跟踪级别                  off
			 
			- 
				安全性                    ON: Local OS Authentication
			 
			- 
				SNMP                      OFF
			 
			- 
				监听程序参数文件          C:\app\Administrator\product\11.2.0\dbhome_1\network\a
			 
			- 
				dmin\listener.ora
			 
			- 
				监听程序日志文件          c:\app\administrator\diag\tnslsnr\WIN-J351NF8VN9D\list
			 
			- 
				ener\alert\log.xml
			 
			- 
				监听端点概要...
			 
			- 
				  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN-J351NF8VN9D)(PORT=1521)))
			 
			- 
				  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN-J351NF8VN9D)(PORT=1522)))
			 
			- 
				  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
			 
			- 
				服务摘要..
			 
			- 
				服务 "CLRExtProc" 包含 1 个实例。
			 
			- 
				  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
			 
			- 
				服务 "orcl" 包含 1 个实例。
			 
			- 
				  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
			 
			- 
				服务 "orclXDB" 包含 1 个实例。
			 
			- 
				  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
			 
			- 
				命令执行成功
			
 
		
	 
 
一个监听器下边,两个端口号。
那么问题来了, 这两种方式有什么区别呢? 一个是两个监听器,另一个是一个监听器两个端口号。
欢迎大家讨论!!!