li
  当前位置:主页 > 性能优化 > 文章内容
li
案例分析:ORA-12500错误案例
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2007-12-31   阅读:23  

星期天同事打电话反映,数据库的TNS时通时断,严重影响生产。判断应该是内存用完造成用户无发连接造成。可是我在星期天上午才将内存由1.5G增加到4G的,什么问题呢?

 星期一上班,打开boot.ini,发现在内存增加后没有加 /3G开关。加上/3G参数,重新启动电脑,过了约半小时,产线反应问题复现---Ora-012500错误。看来没有彻底解决。在网上查找异常原因,发现原因是虽然内存有4G,但Oracle能用的只有2G(需要做一些修改才能超越此限制,但时间不允许),而我的SGA用了1.5G, 在独占模式下,每一个session将单独分配2M左右的内存,300Session需要600M,显然,内存已经不够用了。

IXDBA.NET社区论坛

 根据以上分析,解决方法当然有3种,一是修改系统参数,让Oracle能够使用超过2G的内存,这需要在测试环境测过才可在正式环境进行,解决问题优先,这个以后再试。第二是减小为每一个会话分配的内存大小,以能连接更多的用户。三是减小SGA的大小。第二个方法其实很简单,先停止oracle服务和TNS服务,再运行以上命令
C:\oracle\ora81\bin>orastack oracle.exe 500000
Dump of file oracle.exe
Current Reserved Memory per Thread = 1048576
Current Committed Memory per Thread = 4096
New Reserved Memory per Thread = 500000
C:\oracle\ora81\bin>orastack tnslsnr.exe 500000

Dump of file tnslsnr.exe

Current Reserved Memory per Thread = 1048576
Current Committed Memory per Thread = 4096
New Reserved Memory per Thread = 500000
重新启动oracle服务和TNS服务,打开数据库。不过这个也没做过,需要测试。看来降低SGA最简单。打开init.ora文件,将SGA降低到1GShutdown Database,Startup,问题解决。

案例2

环境:

  1 平台: HP,2G内存 windows 2k advServer sp3 + oracle 817 独占模式

  2 内存分配相关参数

  ..processes................=.350

  ..shared_pool_size.........=.314572800

  ..large_pool_size..........=.614400

  ..java_pool_size...........=.0

  ..db_block_buffers.........=.67372

  ..db_block_size............=.16384

  ..log_buffer...............=.163840

  ..log_checkpoint_interval..=.10000

  ..sort_area_size...........=.52428800

  ..sort_area_retained_size..=.52428800

  ..open_cursors.............=.300

  ..job_queue_processes......=.4

  ..job_queue_interval.......=.10

  ..max_dump_file_size.......=.10240

  3 最大并发用户数:100个左右

   故障现象:

  ....当用户数达到一定的数量时(30)客户端连接服务器时报TNS-12500错误,此时已连接到服务器的用户能正常访问数据库。

  ....首先查看警告日志文件,未见到明显错误信息。

  ....查看listner.log文件,发现如下信息(很多个类似的错误记录,摘两个上来)

  .........................

  02-JUL-2003 10:30:09 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*******)(USER=*****))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*******)(PORT=1136)) * establish * ORCL * 12500

  TNS-12500: TNS:listener failed to start a dedicated server process

  .TNS-12540: TNS:internal limit restriction exceeded

  ..TNS-12560: TNSrotocol adapter error

  ...TNS-00510: Internal limit restriction exceeded

  ....32-bit Windows Error: 8: Exec format error

  02-JUL-2003 10:30:10 * (CONNECT_DATA=(SID=ORCL)(CID=(PROGRAM=***.EXE)(HOST=*****)(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=1203)) * establish * ORCL * 12500

  TNS-12500: TNS:listener failed to start a dedicated server process

  .TNS-12540: TNS:internal limit restriction exceeded

  ..TNS-12560: TNSrotocol adapter error

  ...TNS-00510: Internal limit restriction exceeded

  ....32-bit Windows Error: 8: Exec format error

  .....................

  此时,原来已连接上服务器的用户还能正常使用。查看此时session达到50多个。

  ....重启oracle服务后,能连接新的用户数,但当并发用户数达到15个以上时,再次报同样的错误

   原因分析:

  ....系统资源耗竭,意味着系统分配给oracle的内存用尽了。虽然我们有2G的物理内存,但正常情况下系统只能给oracle分配1.3G的内存,这1.3G的内存中,包括了SGAPGAoracle需要使用的全部内存。在独占模式下,每一个用户将单独分配50MSort_area_size)左右的内存。在本例中,UGA分配了约2G,按每一个用户分配50M内存计算,连接数达到15个时,总分配内存已达到2G,将不能再增加新的连接数。如果要解决这个问题,在不做大的调整的前提下,要么减小SGA大小,要么减小为每一个会话分配的内存大小,以能连接更多的用户。

   解决过程:

  ....查阅了oracle文档,文档里提出来了几个解决的办法:

  1 重置init.ora参数文件,调小以下四个参数的值:

  ....sort_area_size

  ....hash_area_size

  ....bitmap_merge_area_size

  ....create_bitmap_area_seze

  ....open_cursone

  2 减小oracle Job队列数量(job_queue_processes)和并发队列数(parallel_max_servers)

  3 重置并减小会话/线程使用的堆栈大小

  4 oracle改为mts模式

  ....结合本实例的具体情况,决定调整的主要目标为减小用户的PGA大小。

  ....构成PGA的主要内容有sort_area_size, hash_area_size, open_cursor, 以及oracle 堆栈和TNS 堆栈。在本实例中,排序区为64Khash区为128K(缺少值),打开的游标数与应用有关,不能随便减小了,然而oracle堆栈和TNS堆栈都是1M,却有较大的减小的余地。因此,调整的目标定为减小这两个堆栈的大小。

  ....使用orastack 命令来减小这两个堆栈的大小:

  D:\oracle\ora81\bin>orastack oracle.exe 500000

  Couldn't open file with CreateFile()

  GetLastError() == 32

  ....停止oracle服务和TNS服务,再运行以上命令

  D:\oracle\ora81\bin>orastack oracle.exe 500000

  Dump of file oracle.exe

  Current Reserved Memory per Thread = 1048576

  Current Committed Memory per Thread = 4096

  New Reserved Memory per Thread = 500000

  D:\oracle\ora81\bin>orastack tnslsnr.exe 500000

  Dump of file tnslsnr.exe

  Current Reserved Memory per Thread = 1048576

  Current Committed Memory per Thread = 4096

  New Reserved Memory per Thread = 500000

  重新启动oracle服务和TNS服务,打开数据库,用户连接到服务器,经测试,用户数到50以上时数据库仍然运行正常,解决了本实例存在的问题。

  五 小结

....事实上,正如oracle文档所指出的那样,要增加用户连接数的途径很多,除了减小用户堆栈之外,还可以减小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用内存。在本安全应用中,宜将两者(减小用户堆栈与增加oracle可用内存)结合起来使用,以提高数据库性能。但是,这种方式下,同样不可能无限制地增加用户连接数。要想使用户连接数达到更大,则应使用MTS方式。

案例3

前题:Ora-12500错误一般是系统资源紧张造成

环境:websphere,Oracle9.2.0.1,AIX

状况:用户连接过程中,达到一定数量后,再也不能正常连接。单独连接数据库报12500错误,小机用户oracle不能正常连接小机。

分析:

   针对数据库来:

      1 processes=300

      2 v$resource_limitmax_utilization(processes)=119

      3 数据库最大连接(session)=119+9=128

   针对操作系统:

      1 lsattr -El sys0 -a maxuprocsmitty system

       每个用户的最大线程数为128

  这下终于知道问题出在哪里了

处理:修改maxuproc256

    方法1chdev -l sys0 -a maxuproc=256

    方法2smitty system




  上一篇: 案例分析:ORA-01461错误   下一篇: 案例分析:ORA-25153: Temporary...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·案例分析:ORA-01461错误
·案例分析:ORA-01178错误释疑
·案例分析:ORA-01000: maximum o...
·案例分析:ora-04031与ora-04030...
·oracle大师谈:OS与oracle异同探...
·问题释疑:如何配置才能使客户端...
·32bit oracle 扩展SGA原理
·强烈推荐:oracle10g+rac配置sta...
·关于数据库open的深入探究
·oracle优化:oracle诊断性能问题
·案例分析:ORA-25153: Temporary...
·Oracle优化经典文章--磁盘I/O和碎...
·oracle问题小结一:ORACLE常见错...
·Java用OCI驱连Oracle数据库的实现...
·Oracle数据库ASM功能详解
·阿里巴巴公司DBA笔试题
·案例解决:一次oracle掉电的处理...
·我的oracle笔记,欢迎收看!
·如何确定导致刷新组刷新失败的物...
·添加字段对SQL的影响
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接