在生产的过程中报这个错,造成现场无法生产。后果是十分严重的。
一开始我们没太留意就直接重启Oracle数据库,这样可以实现短暂的恢复但是没过几分钟还是报错。
然后我们就根据报错的提示做了一下分析。
ORA-04031错误是Oracle数据库的内存分配错误,它表示在SGA(System Global Area)中无法分配足够的共享内存空间。具体来说,这个错误通常发生在共享池(Shared Pool)中,这是SGA的一个组件,用于缓存SQL和PL/SQL语句的执行计划、共享数据字典等。
根据这个错误分析然后我们就误入歧途了,想着给共享池加空间。但是还是不行。
实际的原因非常简单,应该是当初他们在安装数据库后没有给Oracle设置AMM或者ASMM模式,导致Oracle没有办法自动根据服务器大小来分配数据库所需的内存。
然后根据根据此命令查看给Oracle分配的内存:
SELECT value/1024/1024 AS size_mb
FROM v$parameter
WHERE name = 'sga_target';
这命令执行后出现是数值单位是MB,你可以在/1024得到G这单位。
当执行完这条命令后我瞬间崩溃了,因为给他分配的内存只有1G大小,然而我们的服务器的内存有100多个G,我估计这100多个G是他们以前以SQL太慢给加的。一直加一直加,就加到了100多个G,最后发现数据是抬着超级跑车在龟速前行。
后来我们把Oracle的内存改成了100G