1、问题描述:

wKiom1OWctzxXXrXAAHKFIUvzoc630.jpg

打开sqlplus后用system角色登陆


然后切换成scott用户,再切换成sys


D:/>sqlplus sys/admin@orcl as sysdba


然后接下去操作出现 “TNS: 监听程序无法分发客户机连接”


2、解决过程


用lsnrctl service查看监听状态


D:/Documents and Settings>lsnrctl service


LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 3-10月 -2012 20:11:19 

 

Copyright (c) 1991, 2005, Oracle.  All rights reserved. 

 

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))) 

服务摘要.. 

服务 "PLSExtProc" 包含 1 个例程。 

  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 

    处理程序: 

      "DEDICATED" 已建立:0 已被拒绝:0 

         LOCAL SERVER 

服务 "orcl" 包含 1 个例程。 

  例程 "orcl", 状态 READY, 包含此服务的 3 个处理程序... 

    处理程序: 

      "DEDICATED" 已建立:33 已拒绝:0 状态:ready 

         LOCAL SERVER 

      "D001" 已建立:0 已被拒绝:9 当前: 0 最大: 1002 状态: ready 

         DISPATCHER <machine: NETPLUS, pid: 3448> 

         (ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934)) 

      "D000" 已建立:1 已被拒绝:0 当前: 1 最大: 1002 状态: ready 

         DISPATCHER <machine: NETPLUS, pid: 3996> 

         (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933)) 

服务 "orcl_XPT" 包含 1 个例程。 

  例程 "orcl", 状态 READY, 包含此服务的 3 个处理程序... 

    处理程序: 

      "DEDICATED" 已建立:33 已拒绝:0 状态:ready 

         LOCAL SERVER 

      "D001" 已建立:0 已被拒绝:9 当前: 0 最大: 1002 状态: ready 

         DISPATCHER <machine: NETPLUS, pid: 3448> 

         (ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934)) 

      "D000" 已建立:1 已被拒绝:0 当前: 1 最大: 1002 状态: ready 

         DISPATCHER <machine: NETPLUS, pid: 3996> 

         (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933)) 

命令执行成功 

如下的原因:客户连接到监听器后,监听器把客户重定向到调度程序端口(很可能不是1521端口),由于操作系统问题,这些连接会被拒绝。


要解决这个问题,只需要在LISTENER。ORA的头部加入这一行DIRECT_HANDOFF_TTC_LISTENER = OFF 即可。


解法方法:


在listener.ora加入下面的“加入内容”


# listener.ora Network Configuration File: E:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora 

# Generated by Oracle configuration tools. 

DIRECT_HANDOFF_TTC_LISTENER = OFF   //加入的内容</SPAN><SPAN style="COLOR: #333333"> 

SID_LIST_LISTENER = 

  (SID_LIST = 

    (SID_DESC = 

      (SID_NAME = CLRExtProc) 

      (ORACLE_HOME = E:\oracle\product\11.2.0\dbhome_1) 

      (PROGRAM = extproc) 

      (ENVS = "EXTPROC_DLLS=ONLY:E:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll") 

    ) 

  )

然后在命令行执行以下命令重启监听器和EM,如果还有问题就再重新启动下oracle服务


lsnrctl stop

lsnrctl start

emctl stop dbconsole

emctl start dbconsole