监听程序无法分发客户机连接

来源:互联网 发布:软件研发中心简介 编辑:程序博客网 时间:2024/06/05 00:31
无法连接到数据库实例: ORA-12518: TNS: 监听程序无法分发客户机连接

可能是如下的原因:客户连接到监听器后,监听器把客户重定向到调度程序端口(很可能不是1521端口),由于操作系统问题,这些连接会被拒绝。
要解决这个问题,只需要在LISTENER。ORA的头部加入这一行DIRECT_HANDOFF_TTC_LISTENER = OFF 即可。

1:根据搜索到的原因,我们在LISTENER。ORA头部加入这一行

--------------------------------------------------------------------------------
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
DIRECT_HANDOFF_TTC_LISTENER = OFF
SID_LIST_LISTENER =
(SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
)

LISTENER =
(DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    )
)


--------------------------------------------------------------------------------

2:执行以下命令重启监听器和EM

--------------------------------------------------------------------------------
lsnrctl stop
lsnrctl start
emctl stop dbconsole
emctl start dbconsole

--------------------------------------------------------------------------------

3:查看监听器状态和登入EM,看到状态,一切正常

--------------------------------------------------------------------------------
D:\Documents and Settings\gdy>lsnrctl service

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 15-7月 -2007 18:2
8: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 个处理程序...
    处理程序:
      "D001" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready
         DISPATCHER <machine: NETPLUS, pid: 3448>
         (ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934))
      "D000" 已建立:7 已被拒绝:0 当前: 6 最大: 1002 状态: ready
         DISPATCHER <machine: NETPLUS, pid: 3996>
         (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933))
      "DEDICATED" 已建立:1 已拒绝:0 状态:ready
         LOCAL SERVER
服务 "orcl_XPT" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 3 个处理程序...
    处理程序:
      "D001" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready
         DISPATCHER <machine: NETPLUS, pid: 3448>
         (ADDRESS=(PROTOCOL=tcps)(HOST=netplus)(PORT=1934))
      "D000" 已建立:7 已被拒绝:0 当前: 6 最大: 1002 状态: ready
         DISPATCHER <machine: NETPLUS, pid: 3996>
         (ADDRESS=(PROTOCOL=tcp)(HOST=netplus)(PORT=1933))
      "DEDICATED" 已建立:1 已拒绝:0 状态:ready
         LOCAL SERVER
命令执行成功


来自:百度知道


---------------------------------------------------------------------------------------------------------------------------------------


一、listener文件中的GLOBAL_DBNAME ,SID_NAME可能与实例名称不符,修改后,重启listener.
二、专有服务器模式下processes值设的过小。可通过以下方法解决:
    1.cmd
    2.sqlplus
    3.connect sys/test as sysdba
    4.查看会话数、processes、sessions
    SQL> select count(*) from v$session;
         COUNT(*)
 
        ----------
           45
    SQL> show parameter processes
    NAME                                 TYPE        VALUE
    db_writer_processes                  integer     1
    gcs_server_processes                 integer     0
    job_queue_processes                  integer     10
    log_archive_max_processes            integer     2
    processes                            integer     50

    SQL> show parameter sessions
    NAME                                 TYPE        VALUE
    java_soft_sessionspace_limit         integer     0l
    icense_max_sessions                 integer     0
    license_sessions_warning             integer     0
    logmnr_max_persistent_sessions       integer     1
    sessions                             integer     60
    shared_server_sessions               integer
    5.修改processes和sessions值:sessions=(1.1*process+5)
    SQL> alter system set processes=300 scope=spfile;
   系统已更改。
  SQL> alter system set sessions=335 scope=spfile;
     系统已更改。
    6.重启数据库,使更改生效
三、共享模式下
    1.show parameters dispatchers;
    NAME                TYPE             VALUE
    dispatchers         string           (protocol=tcp)(service=oracle10xdb)
    max_dispatchers      integer 
    2.确定是否有足够的dispatchers
    SQL> select  name, (busy/(busy + idle)) "dispatcher busy rate" from v$dispatcher ;  
    NAME dispatcher busy rate
    ---- --------------------
    D000           .000121704
    D001           .000042597
    D002           .004935402 
    如果超过50%,则需要考虑增加更多的dispatchers;
    3.改变dispathchers:
    SQL>alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
    system altered
四、PGA内存设置太小
    注:该方法没试过。

作者“ERDP技术架构”