解决oracle报Ora-04031错误

错误现象:

1
04031, 00000, "unable to allocate %s bytes of shared memory ("%s","%s", "%s","%s")"

这个错误临时解决办法:

1
alter system flush shared pool;

但是这个方式治标不治本,过段时间还是会出现这个错误。

根本的解决办法:

1
2
3
ALTER SYSTEM SET sga_target=8192M SCOPE=SPFILE;
ALTER SYSTEM SET sga_max_size=8192M SCOPE=SPFILE;
#这个值的大小根据服务器内存大小判断,一般设置成物理内存的一半是没有问题的。

另外要注意shared pool size的值要设置为0.

操作系统Kernel.shmmax的值要改大一些:

1
2
vi /etc/sysctl.conf
kernel.shmmax=34359738368

立即生效:

1
sysctl -p

这一行如果没有就增加,这样问题就彻底解决了。