AIX对很多资源都是有限制的,例如用户能创建的最大进程数限制,用参数maxuproc表示,
如果用户想创建超过maxuproc参数的进程,此时就会创建失败。对于oracle数据库,如果
处于独占模式,那么每一个客户端的连接都会在数据库服务器上创建一个进程,为其服务。
如果此参数maxuproc值过小,很容易达到此限制,应用报错。
大家可以通过如下的命令查看当前系统中设置的maxuproc参数大小,此参数的含义为:单个用户允许的最大进程数。
db_XXX:/home/oracle>$lsattr -El sys0|grep maxuproc
maxuproc 5000 Maximum number of PROCESSES allowed per user True
前不久,我们根据业务的垂直性把一个在AIX上面的oracle数据进行了切分,将其中几个schema迁移到另外一个数据库上。
当时数据迁移是放到晚上进行的。当晚迁移完成后,各项业务正常。
第二天,接到报警,无法连接到数据库。查看ORACLE数据库的监听日志,发现有如下的信息:
23-AUG-2008 10:03:08 * (connect_data=(service_name=tax)(server=dedicated)(CID=(PROGRAM=oracle)(HOST=tax595)(USER=admin))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.168.21)(PORT=53566)) * establish * misc * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
TNS-12540: TNS:internal limit restriction exceeded
TNS-12560: TNS:protocol adapter error
TNS-00510: Internal limit restriction exceeded
IBM/AIX RISC System/6000 Error: 11: Resource temporarily unavailable
立刻查看当前系统进程数参数设置:
db_XXX:/home/oracle>$lsattr -El sys0|grep maxuproc
maxuproc 2000 Maximum number of PROCESSES allowed per user True
查看当前ORACLE的进程数
ps -ef|grep oracle|wc -l
发现此值为1995
至此发现问题,执行以下修改此参数的命令:
chdev -l sys0 -a maxuproc='3000'
问题解决。
阅读(3037) | 评论(1) | 转发(0) |