一般和你机器的内存有关:
给你copy一段:
ORACLE最大连接数问题
(2010-09-08 20:27:17)
转载▼
标签:
oracle优化
it
分类: 多少会点
oracle 10g安装在windows 2003 32位 *** 作系统,连接数到120个就不能连接,报ora12518
服务器IBM XSERVER,内存:4G
oracle 数据库配置的主要参数如下:
processes integer 800
sessions integer 885
pga_aggregate_target big integer 350M
sga_max_size big integer 1256M
sga_target big integer 1152M
shared_pool_size big integer 400M
large_pool_size big integer 16M
数据库配置的连接数是800个,但是现在当oracle的连接数达到250个时候,其他的客户端就无法再连接上oracle服务器了,报个错:ORA-12518: TNS: 监听程序无法分发客户机 ;
但是已经连接上数据库的应用还可以正常应用,就是其他没连上的就再也连不上了,除非已有的连接有退出的,其他的才能再联上,就是可连接的总数是250个;
上网查:说是在可以在listenerora中加入一行: direct_handoff_ttc_<listener name>=off,但是依旧不成;
这期间我尝试着把
pga_aggregate_target 改成200或者500等,结果是一样的;
sga_target改成800m后,结果数据库就起不来了,提示说要不能小于1024m;
后来查到有可能是oracle 10g for win32的一个bug,上网下了补丁,打完补丁后的版本是:10203);还怀疑是不是windows 2003的tcp连接数不够,上网查说好像是有这毛病,下了个2003的补丁,把tcp连接数扩到了1000,结果能够达到可以有350个并发连接,但是再多就又连不上了;
现在就是不太清楚究竟是什么参数配置的不合适,(不管是oracle10g的,还是windows 2003的),才会造成实际上没有达到oracle设置的最大连接数时就不能连接了;
又后来,怀疑是不是windows 2003(32位)的问题,于是就装了个64位的windows 2003,同样版本的oracle 10g,装好后就把连接数process参数配置成800,然后做连接测试,一直可以有800个session连接上来,到现在为止,可以大致总结出症结所在了,就是我装的这个windows 2003 server(32位)的 *** 作系统,在安装oracle 10g(10201-10203)时有问题,连接数不能达到系统配置的那么大;可以采用64位的替代。但是我在想,究竟为什么windows 2003 server(32位)的 *** 作系统+oracle 10g数据库连接数会有限制,有没有什么办法,修改一下2003的配置或者oracle 10g的配置, 就可解决掉这个问题,
解决方案:
一、修改oracle参数
1、原有参数
#pga_aggregate_target=67108864
#processes=500
#sessions=555
# pga_aggregate_target此参数是扩大并发连接数占用内存大小。
# 可调整此参数,放大或缩小,同时影响并发数量。
# 公式: 约=可按照并发数量4M
pga_aggregate_target=720M
# processes、sessions是扩大并发连接数,是同时使用。
# 公式: sessions = processes 11 +5
processes=600
sessions=665
2、在监听参数文件LISTENERORA 文件中增加参数
direct_handoff_ttc_listener = off
3、重新启动数据库服务。
二、1、修改Windows系统中Bootini文件
/3GB /PAE
说明:修改 *** 作系统中Bootini文件,可以使oracle使用更多的内存空间。
2、修改用户组策略中锁定内存页大小权限。
参数修改完毕问题解决。
3、重启计算机。看看服务里面的那个 TNS 是不是 自动的, 别“手动”了。
如果是 “自动”的了, 但是还有问题。
那么你需要看看,那个 Oracle 的机器, IP地址是不是 通过 DHCP 动态分配的啊?
如果固定 IP 地址的话,应该不大会产生这类问题。
如果 IP地址发生变化,好像比较容易产生这类问题。用ssh工具连接linux,按以下步骤 *** 作执行。
1、用oracle用户登录进去。
2、export ORACLE_SID=QS5100J; 指定oracle数据库的instance的名称。“QS5100J”为oracle的sid名称。
3、sqlplus /nolog 连接到数据库的sqlplus中。
4、connect /as sysdba; 出现“Connected to an idle instance”停止连接到数据库的应用。
5、shutdown immediate; 关闭数据库,等待数分钟。
6、startup; 启动数据库。
自动执行:写在sql文件中,用符号“@”引入文件执行。
以下文件可以放sql文件中执行
connect /as sysdba;
shutdown immediate;
startup;
手动执行:手动时一行一行输入执行。
使用SSH工具以root用户登录到数据库服务器后,执行以下命令:
1、启动数据库实例
su – oracle
export ORACLE_SID=QS5100Z QS5100Z为数据库名
sqlplus /nolog
conn / as sysdba
startup
exit
emctl start dbconsole 启动控制台
2、启动数据库监听
输入:su – oracle
输入: lsnrctl start
3、查看是否启动成功
su - oracle
ps -ef|grep oracle
4、查看oracle监听状态
su - oracle
lsnrctl status如果你是用redhat系列linux,在/etc/rcd/目录中找到oracle的服务,如果是debain系列linux,在/etc/initd/目录中找到oracle服务,用命令:/etc/initd/oracle
force-reload,可以用root执行权限,普通用户要加入dba组
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)