查看: 21732|回复: 12

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

[复制链接]
论坛徽章:
0
发表于 2010-3-29 14:41 | 显示全部楼层 |阅读模式
新做的数据库

连接模式采用的是专用。
现在有时就无法连接,有时就可以,当时会话数在260~270之间(最大为350)
提示:未连接到oracle。
Web程序会提示:TNS-12518: 监听程序无法分发客户机连接

这是什么原因呢。

搜到这个解释:http://www.itpub.net/viewthread. ... ;extra=#pid15520554
见4楼:
这个错误在oracle 9.2-Oracle 10.2.X数据库的windows平台很常见,
原因:服务器可用的内存枯竭。
通常的解决办法如下:
1、enable 4GB开关,在C:\根目录下的boot.ini文件中增加/PAE参数,如下:
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /PAE
注意:只支持Windows 2000高级服务器版,数据中心版和windows 2003企业版,数据中心版;如果没有4GB这个大的物理内存也不行。
2、在初始化文件中,加入参数:
USE_INDIRECT_DATA_BUFFERS=TRUE
同时,数据库告诉缓存必须使用DB_BLOCK_BUFFERS和db_block_size 调整;
3、减小总的SGA的大小;
4、用orastack更改Oracle.exe,TNSLSNR.exe的栈大小,如500K;
5、更改服务器从专用模式到共享模式。

总的来说,如果有比较大的内存会好办一些,如果内存较小,就只能减小SGA了,用orastack.exe更改栈大小效果不明显。


我想可能是这个原因。
内存设置太小了,oracle无法再分配连接了。

大家看是这样么,如果要调整,应该调整哪些参数呢。SGA,PGA。


一些参数:

SQL> select * from v$sgainfo
  2  ;

NAME                                  BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size                      1374244 No
Redo Buffers                        4259840 No
Buffer Cache Size                 616562688 Yes
Shared Pool Size                  142606336 Yes
Large Pool Size                     4194304 Yes
Java Pool Size                      4194304 Yes
Streams Pool Size                         0 Yes
Granule Size                        4194304 No
Maximum SGA Size                  775946240 No
Startup overhead in Shared Pool    62914560 No
Startup NUMA Shared Pool memory    25165824 No

NAME                                  BYTES RES
-------------------------------- ---------- ---
Free SGA Memory Available                 0

已选择12行。

SQL> show parameter sga

NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
lock_sga                             boolean FALSE
pre_page_sga                         boolean FALSE
sga_max_size                         unknown 775946240
sga_target                           unknown 775946240

SQL> show parameter pga

SQL> show parameter pga

NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
pga_aggregate_target                 unknown 256901120


SQL> select * from v$pgastat;

NAME                                          VALUE UNIT
---------------------------------------- ---------- ------------
aggregate PGA target parameter            256901120 bytes
aggregate PGA auto target                 111015936 bytes
global memory bound                        51380224 bytes
total PGA inuse                           139817984 bytes
total PGA allocated                       237868032 bytes
maximum PGA allocated                     321022976 bytes
total freeable PGA memory                         0 bytes
process count                                   282
max processes count                             283
PGA memory freed back to OS                       0 bytes
total PGA used for auto workareas           6276096 bytes

NAME                                          VALUE UNIT
---------------------------------------- ---------- ------------
maximum PGA used for auto workareas        81044480 bytes
total PGA used for manual workareas               0 bytes
maximum PGA used for manual workareas             0 bytes
over allocation count                             0
bytes processed                          1.3389E+10 bytes
extra bytes read/written                  125827072 bytes
cache hit percentage                          99.06 percent
recompute count (total)                       59326

已选择19行。


大家帮忙看一下!
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
发表于 2010-3-29 14:46 | 显示全部楼层
我遇到的就是内存不足,把sga设置小一些就可以,

不过这个问题,主要集中在32bit上,现在的服务器的cpu都是64bit,采用os都是64bit的,在安装oracle是64bit的,问题就没有了。

使用道具 举报

回复
论坛徽章:
48
马上加薪
日期:2014-02-19 11:55:142011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB季度 技术新星
日期:2010-05-17 15:53:17数据库板块每日发贴之星
日期:2010-05-12 01:01:01数据库板块每日发贴之星
日期:2010-05-08 01:01:01数据库板块每日发贴之星
日期:2010-05-07 01:01:02数据库板块每日发贴之星
日期:2010-04-29 01:01:01
发表于 2010-3-29 15:00 | 显示全部楼层
减小sga

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-3-29 15:26 | 显示全部楼层
减小SGA_target么?

如下:
SQL> ALTER SYSTEM SET SGA_TARGET=671088640;

系统已更改。

SQL> show parameter sga

NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
lock_sga                             boolean FALSE
pre_page_sga                         boolean FALSE
sga_max_size                         unknown 775946240
sga_target                           unknown 671088640
SQL> select * from v$sgainfo;

NAME                                          BYTES RES
---------------------------------------- ---------- ---
Fixed SGA Size                              1374244 No
Redo Buffers                                4259840 No
Buffer Cache Size                         494927872 Yes
Shared Pool Size                          142606336 Yes
Large Pool Size                             4194304 Yes
Java Pool Size                              4194304 Yes
Streams Pool Size                                 0 Yes
Granule Size                                4194304 No
Maximum SGA Size                          775946240 No
Startup overhead in Shared Pool            62914560 No
Startup NUMA Shared Pool memory            25165824 No

NAME                                          BYTES RES
---------------------------------------- ---------- ---
Free SGA Memory Available                 104857600

已选择12行。

SQL>

是不是可以这样理解,如果服务器内存不是很大,所以只能将SGA减小;
但如果服务器内存够大,是不是可以增加别的参数,来解决这个问题?


[ 本帖最后由 taoyoyo 于 2010-3-29 15:30 编辑 ]

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-3-30 11:02 | 显示全部楼层
还是不行,有时还会出现这样的错误!

应该不是会话的问题,我设置的连接数为350,会话为390,但当会话到250左右,就会出现这样的错误。

C:\Documents and Settings\pln_27>SQLPLUS SYSTEM/MANAGER@HS01

SQL*Plus: Release 8.1.6.0.0 - Production on 星期二 3月 30 11:00:54 2010

(c) Copyright 1999 Oracle Corporation.  All rights reserved.

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


请输入用户名:



昨天已经将SGA由740M减小为640M了。

各位高手指点一下,如何解决这个问题啊!

谢谢了!


SQL> show parameter process

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     0
db_writer_processes                  integer     3
gcs_server_processes                 integer     0
job_queue_processes                  integer     10
log_archive_max_processes            integer     2
processes                            integer     350

SQL>
SQL> show parameter session

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size           integer     0
java_soft_sessionspace_limit         integer     0
license_max_sessions                 integer     0
license_sessions_warning             integer     0
logmnr_max_persistent_sessions       integer     1
session_cached_cursors               integer     20
session_max_open_files               integer     10
sessions                             integer     390
shared_server_sessions               integer     

SQL>
SQL> select * from
  2  (select count(*) as se_q from v$session ) a,
  3  (select count(*) as pr_q from v$process) b;

      SE_Q       PR_Q
---------- ----------
       248        251

SQL>

[ 本帖最后由 taoyoyo 于 2010-3-30 11:03 编辑 ]

使用道具 举报

回复
论坛徽章:
26
授权会员
日期:2006-04-11 16:11:08会员2006贡献徽章
日期:2006-04-17 13:46:34萤石
日期:2013-12-12 12:56:09劳斯莱斯
日期:2013-12-10 23:07:17法拉利
日期:2013-09-10 06:09:20宝马
日期:2013-09-10 06:09:402011新春纪念徽章
日期:2011-01-04 10:37:342011新春纪念徽章
日期:2011-02-18 11:42:472012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-30 12:49 | 显示全部楼层
这种问题,最好还是做个listener trace, server trace.
光看这个error message, 并不能说明什么,要看底层为啥没办法分发连接。

[ 本帖最后由 DemonSam 于 2010-3-30 12:50 编辑 ]

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2010-3-30 14:27 | 显示全部楼层
原帖由 DemonSam 于 2010-3-30 12:49 发表
这种问题,最好还是做个listener trace, server trace.
光看这个error message, 并不能说明什么,要看底层为啥没办法分发连接。


高手,教教俺……
怎么做listener trace,还有server trace……

我搜了一下,没有找到,请指点一下吧!

使用道具 举报

回复
论坛徽章:
48
马上加薪
日期:2014-02-19 11:55:142011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB季度 技术新星
日期:2010-05-17 15:53:17数据库板块每日发贴之星
日期:2010-05-12 01:01:01数据库板块每日发贴之星
日期:2010-05-08 01:01:01数据库板块每日发贴之星
日期:2010-05-07 01:01:02数据库板块每日发贴之星
日期:2010-04-29 01:01:01
发表于 2010-3-30 14:33 | 显示全部楼层
原帖由 DemonSam 于 2010-3-30 12:49 发表
这种问题,最好还是做个listener trace, server trace.
光看这个error message, 并不能说明什么,要看底层为啥没办法分发连接。


同请教这个的server trace是具体指的哪个的trace呀。

使用道具 举报

回复
论坛徽章:
8
2010新春纪念徽章
日期:2010-03-01 11:08:26ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272011新春纪念徽章
日期:2011-02-18 11:43:33奥运会纪念徽章:棒球
日期:2012-07-03 15:20:13奥运会纪念徽章:摔跤
日期:2012-07-22 21:22:28ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48紫蛋头
日期:2013-02-20 09:40:232013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-30 15:03 | 显示全部楼层
原帖由 inthirties2 于 2010-3-30 14:33 发表


同请教这个的server trace是具体指的哪个的trace呀。


是不是诊断事件中的error stack?

使用道具 举报

回复
论坛徽章:
26
授权会员
日期:2006-04-11 16:11:08会员2006贡献徽章
日期:2006-04-17 13:46:34萤石
日期:2013-12-12 12:56:09劳斯莱斯
日期:2013-12-10 23:07:17法拉利
日期:2013-09-10 06:09:20宝马
日期:2013-09-10 06:09:402011新春纪念徽章
日期:2011-01-04 10:37:342011新春纪念徽章
日期:2011-02-18 11:42:472012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
发表于 2010-3-30 15:34 | 显示全部楼层
server trace, 指的是 sqlnet的server端trace, 可以在server 端的sqlnet.ora里面加上以下行:

eg:

TRACE_LEVEL_SERVER=16
TRACE_FILE_SERVER=server_trace
TRACE_DIRECTORY_SERVER=/xxx/.../server_side_trace/

/xxx/.../server_side_trace/ , 是你准备放trace的目录。

同理,如果想trace  listener的话:

eg:

TRACE_LEVEL_<LISTENER_NAME> = 16
TRACE_FILE_<LISTENER_NAME>= LISTENER_TRC
TRACE_DIRECTORY_<LISTENER_NAME> = /xxx/.../listener_trace/


listener trace, 需要重起listener才能生效。


当然,注意,这两种trace 是针对每一个新的connection的,并不是只有出错才会产生trace.. 所以trace的目录下会产生很多的trace 文件,这个就需要纪录错误发生的详细时间,以便于找到需要的trace. troubleshooting 结束以后,要disable这些trace (remove the line), 要不然,就的小心你的硬盘空间了。。

[ 本帖最后由 DemonSam 于 2010-3-30 15:37 编辑 ]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表