show parameter background_dump_dest
得到的路径有时候结尾是alert,有时候是trace,前者打开是实时的log.xml日志,后者是关联到alert中错误信息条目的具体错误信息
通过alert找到对应的trace文件,找到错误原因
报错信息:
ORA-04030: out of process memory when trying to allocate 1049100 bytes (KSFQ heap,KSFQ Buffers)
sga_max_size指的是可动态分配的最大值﹐而sga_target是当前已分配的最大sga。
报错可能原因:
- sga_max_size设置的值大于操作系统对单个进程可分配内存的最大值。
- sga_target>sga_max_size
我遇到的情况是原因一,当时通过命令
show parameter sga_max_size
得到sga_max_size = 6000m,这样一看肯定是设置的太大了,于是通过网上的方法
1. 设置rman从SGA取内存
alter system set dbwr_io_slaves=2 scope=spfile;
alter system set backup_tape_io_slaves=true scope=spfile;
2. 调整SGA大小
alter system set sga_target=1500m;
alter system set sga_max_size=1500m scope=spfile;
3. 设置使用内存最大大小
alter system set large_pool_size=80m;
4. 重启oracle service
可是重启了发现除了sga_max_size = 4000m之外,其他都是改变的值。明明设置的是1500m怎么自己变了,继续查找alert的log看有没有异常,找到后,连接到对应trace发现如下
说明1500m对于oracle来说太小了,自己设置到了4000多。