现在的位置: 首页 > 综合 > 正文

Oracle出现“TNS: 监听程序无法分发客户机连接”解决方法

2018年06月07日 ⁄ 综合 ⁄ 共 1774字 ⁄ 字号 评论关闭

1、问题描述:

打开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   //加入的内容
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


抱歉!评论已关闭.