ORA-12518: TNS: 监听程序无法分发客户机连接

来源:互联网 发布:淘宝首页导航条代码 编辑:程序博客网 时间:2024/05/01 03:05

在团队成员增多时,经常出现“无法分发客户端连接”等问题。在网上搜索一番后,最终解决了该问题,现将解决方案总结如下,以供参考和以后备用。

原因:团队成员增多,原有数据库设置不够用,导致连接plsql和启动tomcat时经常抛出“无法分发客户端连接”的异常。

解决方案:

第一步:调整process和session值

1. 检查process和session是否够用。

a)使用plsql连接到oracle,查看process进程数:

select count(*) from v$process; --取得数据库目前的进程数。

select value from v$parameter where name = 'processes';     --取得进程数的上限。

b)查看session会话数:

select count(*) from v$session; --取得数据库目前的会话数。

select value from v$parameter where name = 'sessions'; --取得会话数的上限。

查看当前process和sessions是否接近上限值。若接近,可以将其增大。

2. 调整这两个参数值大小。

系统进程数process和系统会话数session之间存在一个关系:

process数=session数*1.1+5

我们在配置时参考该规律进行设定。

a)  修改process值

alter system set processes=1000 scope=spfile;   --将process值改为1000

b)  修改session值

alter system set sessions=1105 scope=spfile;    --将sessions值改为1105

3. 备份pfile,重启oracle

a) 修改完成后,备份pfile

create pfile from spfile;           --从spfile(运行时配置)创建pfile(系统配置)

c)  重启oracle

重启的方法有很多种,可以重启oracle服务,或者重启数据库。Windows下可以直接重启服务。

第二步:修改dispatchers个数

如果第一步解决不了问题。可以进行第二步的操作。

  1. 查看当前dispatchers个数,和dispatchers使用率

select name,busy,status,accept,idle from v$dispatcher;  --查看当前dispatchers个数和部分信息。一般默认安装的库只有一个。

select name,(busy/(busy+idle))*100 "busy rate%" from v$dispatcher; --查看dispatchers使用率

如果使用率大于50%,则要考虑增加dispatchers个数。

  1. 调整dispatchers个数

alter system set dispatchers='(protocol=tcp)(dispatchers=3)(service=youroracleservicenameXDB)';

--修改dispatchers个数为3.

3. 重启oracle。

常见问题处理办法:

  1. 在配置时,有时我们会误操作。导致数据无法正常启动。这时可以从之前备份过的pfile来恢复oracle系统设置。

sqlplus /nolog   --连接到数据库

出现连接提示光标

SQL> conn / as sysdba    --以windows用户以sysdba身份登录,便于操作数据库

SQL> create spfile from pfile= 'D:\pfile.ora'    --从D:\pfile.ora(之前备份出来的pfile文件)创建系统配置信息。

将提示创建文件成功。

这时,启动数据库即可

SQL> startup

 

解决方案:

无法连接到数据库实例: 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
命令执行成功

D:\Documents and Settings\gdy>

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摩托车本扣12分怎么办 蓝牙耳机上面的软套掉了怎么办 工作不想干了怎么办啊 浴室门玻璃坏了怎么办 电梯顶层安全安全距离不合格怎么办 制冰机有些孔不出水怎么办 制冰机排水孔堵住了怎么办 点我达装备抽查怎么办 空军常服大檐帽有一点变形怎么办 一般纳税人没有进项发票怎么办 汽车购买发票丢了怎么办 购买房子的发票丢了怎么办 购买的二手房发票丢失怎么办 购买空调时的发票丢失怎么办 发票购票本丢了怎么办 留学中介费贵了怎么办 车祸伤者不肯出院怎么办 增值税普通发票发票联丢失怎么办 纳税识别号错了怎么办 电子发票税号填写错误怎么办 发票抬头名称写错了怎么办 滴滴发票抬头写错了怎么办 普票抬头开错了怎么办 发票号码打错了怎么办 个人税票开错了怎么办 普票地址错了怎么办 专票税率开高了怎么办 专票税率开错了怎么办 发票姓名写错了怎么办 首付发票姓名写错怎么办 一般纳税人税率开错了怎么办 电子税票开错了怎么办 税率是6%开成3%怎么办 医院收费收错了怎么办 发票少打一个字怎么办 增值税发票抬头错了一个字怎么办 暂估入账跨年了怎么办 电子发票写错了怎么办 发票纳税人识别号写错了怎么办 电子发票忘填邮箱怎么办 公司名跟发票抬头不一样怎么办