网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.导出oracle数据库对象---同义词,.
.如何才能避免Oracle数据库的密码.
.设置sql进行跟踪.
.ora-02085错误.
.Oracle 10g Release2新功能之变化.
.Oracle 9i初始化参数文件.
.oracle基本概念的学习笔记.
.怎样做8i完全(备份)与完全(恢.
.TUX 2.0使用手册--一、什么是TUX.
.在Oracle9i Release 2中使用PL/S.
.Oracle中使用SQL MODEL定义行间计.
.如何使每个用户有独立的cgi-bin目.
.oracle data pump步骤.
.菜鸟经验:oracle与weblogic自动.
.oracle8i学习笔记(2).
.ORACLE使用LogMiner分析重做日志.
.Oracle与Access表之间的导入和导.
.ORACLE SQL性能优化系列 (三).
.Oracle数据库技术(36).
.Oracle 10g RMAN的备份测试.

oracle开发 TNS-12500的解决过程

发表日期:2008-2-9



  一 环境:
  
  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的内存中,包括了SGA、PGA等oracle需要使用的全部内存。在独占模式下,每一个用户将单独分配50M(Sort_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 堆栈。在本实例中,排序区为64K,hash区为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方式。
上一篇:oracle开发 表占用空间统计——脚本 人气:621
下一篇:Oracle开发之ASP调用oracle存储过程 人气:968
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐