现象:当应用程序(ERP等)连接数达到一定数量后,就无法登录。
listener.log中出现:
TNS-12518: TNS: 监听程序无法分发客户机连接
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
32-bit Windows Error: 233: Unknown erroralert_aaa.log中出现:
Errors in file d:\oracle\product\10.2.0\admin\jserp\bdump\aaa_psp0_1892.trc:
ORA-27300: OS system dependent operation:spcdr:9261:4200 failed with status: 997
ORA-27301: OS failure message: 重叠 I/O 操作在进行中。
ORA-27302: failure occurred at: skgpspawn客户端程序提示:
TNS-12518: TNS: 监听程序无法分发客户机连接另外有的程序提示:
Tns error struct:
ns main err code: 12564
TNS-12564: TNS: 拒绝连接
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
----------------------------------------------------
服务器情况:windows 2003 server企业版(32bit)
12GB内存
启动加了PAE参数oracle情况:
10g Enterprise Edition Release 10.2.0.1.0
shared模式---------------------------------------------------
经过不断的尝试改变sessiones、processes、sga_max_size、sga_target的设置,发现一个规律:
Sga_max_size和sga_target设置越小,可连接的用户越多,但速度越慢。反之,Sga_max_size和sga_target设置越大,可连接的用户越少,但速度越快。比如:
当sga设置为200MB时候,session达到304(process为309),应用程序还可继续连接,但是非常慢。
当sga设置为600MB时候,session达到290(process为295),应用程序就无法连接了。
当sga设置为1500MB时,很快地应用程序就无法连接了(可能只有几十个session就完蛋了,当时没有统计,sql plus也连不上)。网上的做法:1、sessiones不够大,我设置了600,出问题的时候使用远远不到600。
2、有的说是1.7G的限制,可是当出现问题的时候,OS总占用内存还不到1.7GB。
3、PGA太小,原来480MB,后面改成600MB、800MB都没啥变化。
4、10.2.0.1.0版本的bug(p5639232)造成的,今天升级至10.2.0.4,现象依然存在。
listener.log中出现:
TNS-12518: TNS: 监听程序无法分发客户机连接
TNS-12560: TNS: 协议适配器错误
TNS-00530: 协议适配器错误
32-bit Windows Error: 233: Unknown erroralert_aaa.log中出现:
Errors in file d:\oracle\product\10.2.0\admin\jserp\bdump\aaa_psp0_1892.trc:
ORA-27300: OS system dependent operation:spcdr:9261:4200 failed with status: 997
ORA-27301: OS failure message: 重叠 I/O 操作在进行中。
ORA-27302: failure occurred at: skgpspawn客户端程序提示:
TNS-12518: TNS: 监听程序无法分发客户机连接另外有的程序提示:
Tns error struct:
ns main err code: 12564
TNS-12564: TNS: 拒绝连接
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
----------------------------------------------------
服务器情况:windows 2003 server企业版(32bit)
12GB内存
启动加了PAE参数oracle情况:
10g Enterprise Edition Release 10.2.0.1.0
shared模式---------------------------------------------------
经过不断的尝试改变sessiones、processes、sga_max_size、sga_target的设置,发现一个规律:
Sga_max_size和sga_target设置越小,可连接的用户越多,但速度越慢。反之,Sga_max_size和sga_target设置越大,可连接的用户越少,但速度越快。比如:
当sga设置为200MB时候,session达到304(process为309),应用程序还可继续连接,但是非常慢。
当sga设置为600MB时候,session达到290(process为295),应用程序就无法连接了。
当sga设置为1500MB时,很快地应用程序就无法连接了(可能只有几十个session就完蛋了,当时没有统计,sql plus也连不上)。网上的做法:1、sessiones不够大,我设置了600,出问题的时候使用远远不到600。
2、有的说是1.7G的限制,可是当出现问题的时候,OS总占用内存还不到1.7GB。
3、PGA太小,原来480MB,后面改成600MB、800MB都没啥变化。
4、10.2.0.1.0版本的bug(p5639232)造成的,今天升级至10.2.0.4,现象依然存在。
32位且内存>2.5G,试试下面的:
sga_max_size=1600m
db_cache_size=1200m
shared_pool_size=200m
java_pool_size=80m
large_pool_size=80m
pga_aggregate_target=250m 64位的t:
sga_max_size=系统内存*0.8*0.8
db_cache_size=sga_max_size*0.7
shared_pool_size=sga_max_size*0.18
java_pool_size=sga_max_size*0.1
large_pool_size=sga_max_size*0.1
pga_aggregate_target=系统内存*0.8*0.2 还有的书中介绍,数据库缓冲区中:
oracle内存的80%
共享池 19%
redo日志缓冲区及其他1%; 这是本人以前记下的经验值,供楼主试一下。
db_cache_size、shared_pool_size、java_pool_size、large_pool_size的设置都为0,难道ASMM不可靠?
是说OS的boot.ini中加了PAE参数,不加OS压根儿就不认识12GB,只认识3个多GB
dispatchers为(protocol=tcp)(dispatchers=3)(service=aaaxdb)
当session达到304,os内存使用1.15GB,oracle.exe占用内存714MB,oracle.exe线程数量595,此时可连接sga配置为600M,pga配置为500MB时:
当session达到295,os内存使用1.56GB,oracle.exe占用内存1.13GB,oracle.exe线程数量565,此时就不能连接了
你的环境TNS-12518:的根本原因是内存分配的问题,建议升级到64bit 的os+64bit的oradcle。
目前你的环境需要保证sga+(pga实际使用值)<2g,且保证process足够大才不会报TNS-12518。
ps: pga的值<>pga的实际使用值,在压力情况下pga的实际值远远大于pga的值。