从Oracle 10g开始,Oracle提供了自动SGA的管理(简称ASMM),开启ASMM后,我们就不再需要设置shared pool、buffer cache、large pool、java pool和stream pool。但是有时候oracle在自动管理分配内存时,有时候会报ORA-4031错误,网上很多文章都是直接为对应的内存池分配空间,但是有时候是无法分配成功的,因为oracle没办法从别的内存池shrink memory,但是生产系统又没有办法重启数据库,本文提供一种方式来解决这个问题。
故障现象:
ORA-04031: unable to allocate 376 bytes of shared memory ("streams pool","unknown object","streams pool","kwqbsinfy:cco")
Incident details in: /data/diag/diag/rdbms/orcl01/orcl01/incident/incdir_225537/orcl01_ora_45607_i225537.trc
常见分析解决过程:
通过以上的报错,可以很明显发现,该问题是由于steams_pool_size 设置过小,同时oracle又没有办法为streams pool分配内存
查看当前的分配情况
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ --------------------------------- ---