发新话题
打印

老问题重谈

老问题重谈

首先申明:
在提这个问题之前,我已经在论坛中做过搜索,发现前人已经遇到过类似的问题,奈何没有高人答复,因情况紧急,只好再次发问,尽管我深深明白遇到问题就发问不是一件道德的事,更不符合钻研精神

先说说我的应用环境,数据库是817的版本,是一个医院的HIS系统,传统的CS结构,整个系统运行稳定良好多年。最近涉及到web应用,用asp作了一个简单的网站,其中需要向his数据库中提取统计数据,结果每次在web中一连接数据库,数据库服务就莫名其妙的停掉,多次试验,结果都是如此,报错如下:
ora-12500NS:listener failed to start a dedicated server process.

而数据库使用的是MTS模式,是何原因?请大虾指点一二。
欢迎光临丽江时光!
www.lijiangtime.net

TOP

数据库使用的是MTS模式,为什么报failed to start a dedicated server process?

怀疑数据库的运行模式

TOP

下面是一个坛子里的不错的例子,可以试试,不要在生产是做啊,充分测试后在在生产上操作

TNS-12500,TNS-12540,TNS-12560,TNS-00510解决过程

一 环境:
1 平台: IBM AX360,4G内存 windows 2k advServer sp3 + oracle 816 独占模式
2 内存分配相关参数
..processes................=.1000
..shared_pool_size.........=.240000000
..large_pool_size..........=.614400
..java_pool_size...........=.32768
..db_block_buffers.........=.90000
..db_block_size............=.4096
..log_buffer...............=.163840
..log_checkpoint_interval..=.10000
..sort_area_size...........=.65536
..sort_area_retained_size..=.65536
..open_cursors.............=.100
..job_queue_processes......=.4
..job_queue_interval.......=.10
..max_dump_file_size.......=.10240
3 最大并发用户数:850个左右
二 故障现象:
....当用户数达到一定的数量时(700多)客户端连接服务器时报ora-12560错误,紧跟着报ora-03114错误,不能连接到服务器。此时已连接到服务器的用户能正常访问数据库。
....首先查看警告日志文件,未见到明显错误信息。
....查看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达到760多个。
....重启oracle服务后,能连接新的用户数,但当并发用户数达到750个以上时,再次报同样的错误
三 原因分析:
....系统资源耗竭,意味着系统分配给oracle的内存用尽了。虽然我们有4G的物理内存,但正常情况下系统只能给oracle分配2G的内存,这2G的内存中,包括了SGA、PGA等oracle需要使用的全部内存。在独占模式下,每一个session将单独分配2M左右的内存。在本例中,SGA分配了约600M,按每一个用户分配2M内存计算,连接数达到750个时,总分配内存已达到2G,将不能再增加新的连接数。如果要解决这个问题,在不做大的调整的前提下,要么减小SGA大小,要么减小为每一个会话分配的内存大小,以能连接更多的用户。
四 解决过程:
....查阅了oracle文档,文档里提出来了几个解决的办法:
1 重置init.ora参数文件,调小以下四个参数的值:
....short_area_size
....hash_area_size
....bitmap_merge_area_size
....create_bitmap_area_seze
....open_cursone
2 调小SGA的大小
3 减小oracle Job队列数量(job_queue_processes)和并发队列数(parallel_max_servers)
4 重置并减小会话/线程使用的堆栈大小
5 将oracle改为mts模式
6 更换操作系统为windows NT 企业版
7 使用intel的ESMA硬件支持,即使用大内存
..1) 在intel系统上使用 /3G 开关
..2) 使用PSE36内存
....结合本实例的具体情况,决定调整的主要目标为减小用户的PGA大小。
....构成PGA的主要内容有short_area_size, hash_area_size, open_cursone, 以及oracle 堆栈和TNS 堆栈。在本实例中,排序区为64K,hash区为128K(缺少值),打开的游标数与应用有关,不能随便减小了,然而oracle堆栈和TNS堆栈都是1M,却有较大的减小的余地。因此,调整的目标定为减小这两个堆栈的大小。
....使用orastack 命令来减小这两个堆栈的大小:
D:\oracle\ora81\bin>rastack oracle.exe 500000
Couldn't open file with CreateFile()
GetLastError() == 32
....停止oracle服务和TNS服务,再运行以上命令
D:\oracle\ora81\bin>rastack 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>rastack 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服务,打开数据库,用户连接到服务器,经测试,用户数到1350以上时数据库仍然运行正常,解决了本实例存在的问题。
五 小结
....事实上,正如oracle文档所指出的那样,要增加用户连接数的途径很多,除了减小用户堆栈之外,还可以减小SGA,或者是更改成MTS方式,或者是使用第三方工具增加oracle可用内存。本人前面小结过如何让oracle在32位的windows操作系统上使用超过2G内存的方法( http://www.itpub.net/showthread.php...15&pagenumber=1 ),在本安全应用中,宜将两者(减小用户堆栈与增加oracle可用内存)结合起来使用,以提高数据库性能。但是,这种方式下,同样不可能无限制地增加用户连接数。要想使用户连接数达到更大,则应使用MTS方式。

TOP

楼上的帖子,我早已经搜索到过,非常感谢,不过,问题不在这里
欢迎光临丽江时光!
www.lijiangtime.net

TOP

那在哪里?
...............
你修改(SERVER = DEDICATED)成为(SERVER = SHARED)试试。

TOP

感谢二楼楼主的支持,我正想使用这个东西

TOP

如何查看oracle 堆栈和TNS 堆栈的大小

在不停数据库的情况下,如何查看oracle 堆栈和TNS 堆栈的大小,这两个参数调小对性能影响有多大

TOP

问题没有解决,继续顶

另外补充:web访问数据库使用的接口是ole DB控件,用ODBC链接也一样报错
欢迎光临丽江时光!
www.lijiangtime.net

TOP

如果系统在提示这个错误时,还运行其它的application,你应该检查一下系统的资源!如session最大连接数,process最大进程数等对资源有限制的参数,有必要的话加大相关的参数设置。
其次减少单个会话所占用的资源,如3楼兄弟写的。
你通过WEB连接时,应该检查一下WEB的初始连接数,因为ORACLE会预留出你初始的连接资源,这种情况下可能会导致12500的错误!

TOP

呵,学习中..................
一夜的雨
让感觉变得更迷离

TOP

发新话题