Oracle随笔

一上午oracle报了各种的错- -

mark下 windows下每个进程最大占用2G内存 sga和pga如果未手动指定大小 会自行分配这两G

为了sga有更大的空间执行语句 所以要对pga进行手动的调整

查一下pga的大小:
SQL> show parameter pga_aggregate_target

NAME TYPE VALUE
------------------------------- ----------- --------
pga_aggregate_target big integer 91M

通过查询V$PGA_TARGET_ADVICE视图 取pga在被占用100%时的大小 将pga修改为这个大小

修改pga语句:alter system set pga_aggregate_target=64m scope=spfile;

不过将pga调小后 发现问题依然存在 只要tomcat一起动开oracle就报ora-04030的错误

上网查阅 说可以将sga继续放大 把sga放到3.4G pga放到1.2G

这时候致命的问题就来了 因为我误判这个服务器为64位的系统(因为我的电脑右键可以识别10G的内存) 所以我就按照网上说的 修改了。

重启以后发现oracle起不来了。。现象是服务可以启动 但是连接不上 提示实例未启动 我判断原因是因为32位的系统不支持独立进程占用太大内存(但连接不上实例也就没法改回sga)

然后经过高人指点 通过cmd连接到了plsql 虽然连接不上实例 但是可以在这里修改存放sga、pga配置的文件,虽然我知道这个配置文件在哪 但是这个文件经过转码 不支持直接打开修改,通过这个sql语句修改为可以用记事本打开的文件:

Create pfile='D:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA' From spfile='D:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL_pfile.ORA'

pfile的路径就是可以修改的文件,spfile的是oracle本身的

然后修改pfile中sga和pga的大小 通过这个新建的spfile启动oracle实例:
startup pfile='D:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL_pfile.ORA'

再将spfile恢复到原pfile

最后再启动实例就可以了

最后解决04030的方案:查询tomcat启动后oracle的线程数,发现一旦超过某个固定的值 就会报这个错误(但并没有超出oracle本身的process)

我们用了1、优化代码 减少数据库查询次数,优化索引 2、限制同时在线人数 保证连接数个数

这样这个问题才告一段落

ps。

网上也有人说这个错误是oracle的bug 有一个补丁可以解决这个问题 但是由于系统已经上了生产 不敢直接拿来用

查process的语句:

select count(*) from v$session;
select count(*) from v$process;

Select count(*) from v$session where status='ACTIVE'

posted @ 2011-03-12 16:23  gladto  阅读(425)  评论(0编辑  收藏  举报