1、问题描述:
打开sqlplus后用system角色登陆
然后切换成scott用户,再切换成sys
D:/>sqlplus sys/admin@orcl as sysdba
然后接下去操作出现 “TNS: 监听程序无法分发客户机连接”
2、解决过程
用lsnrctl service查看监听状态
D:/Documents and Settings>lsnrctl service
1.LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 3-10月 -2012 20:11:19
2.
3.Copyright (c) 1991, 2005, Oracle. All rights reserved.
4.
5.正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
6.服务摘要..
7.服务 "PLSExtProc" 包含 1 个例程。
8. 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
9. 处理程序:
10. "DEDICATED" 已建立:0 已被拒绝:0
11. LOCAL SERVER
12.服务 "orcl" 包含 1 个例程。
13. 例程 "orcl", 状态 READY, 包含此服务的 3 个处理程序...
14. 处理程序:
15. "DEDICATED" 已建立:33 已拒绝:0 状态:ready
16. LOCAL SERVER
17. "D001" 已建立:0 已被拒绝:9 当前: 0 最大: 1002 状态: ready
18. DISPATCHER <machine: NETPLUS, pid: 3448>
19. (ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934))
20. "D000" 已建立:1 已被拒绝:0 当前: 1 最大: 1002 状态: ready
21. DISPATCHER <machine: NETPLUS, pid: 3996>
22. (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933))
23.服务 "orcl_XPT" 包含 1 个例程。
24. 例程 "orcl", 状态 READY, 包含此服务的 3 个处理程序...
25. 处理程序:
26. "DEDICATED" 已建立:33 已拒绝:0 状态:ready
27. LOCAL SERVER
28. "D001" 已建立:0 已被拒绝:9 当前: 0 最大: 1002 状态: ready
29. DISPATCHER <machine: NETPLUS, pid: 3448>
30. (ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934))
31. "D000" 已建立:1 已被拒绝:0 当前: 1 最大: 1002 状态: ready
32. DISPATCHER <machine: NETPLUS, pid: 3996>
33. (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933))
34.命令执行成功
如下的原因:客户连接到监听器后,监听器把客户重定向到调度程序端口(很可能不是1521端口),由于操作系统问题,这些连接会被拒绝。
要解决这个问题,只需要在LISTENER。ORA的头部加入这一行DIRECT_HANDOFF_TTC_LISTENER = OFF 即可。
解法方法:
在listener.ora加入下面的“加入内容”
1.# listener.ora Network Configuration File: E:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
2.# Generated by Oracle configuration tools.
3.DIRECT_HANDOFF_TTC_LISTENER = OFF //加入的内容</SPAN><SPAN style="COLOR: #333333">
4.SID_LIST_LISTENER =
5. (SID_LIST =
6. (SID_DESC =
7. (SID_NAME = CLRExtProc)
8. (ORACLE_HOME = E:\oracle\product\11.2.0\dbhome_1)
9. (PROGRAM = extproc)
10. (ENVS = "EXTPROC_DLLS=ONLY:E:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
11. )
12. )
然后在命令行执行以下命令重启监听器和EM,如果还有问题就再重新启动下oracle服务
lsnrctl stop
lsnrctl start
emctl stop dbconsole
emctl start dbconsole