exp导出报错EXP-00008: ORACLE error 4031 encountered

导出exp失败
. exporting synonyms
EXP-00008: ORACLE error 4031 encountered
ORA-04031: unable to allocate 4096 bytes of shared memory ("java pool","java/lang/StringBuffer","joxlod exec hp","SGAClass")
EXP-00000: Export terminated unsuccessfully


分析:新建的数据库环境,10.2.0.5版本,shared memory是3G 网上查询是shared pool碎片太多导致的无法分配内存;
使用alter system flush shared_pool临时释放share_pool后仍然报错,随即重启了,仍然报错,然后上METALINK[ID 1377133.1]中解决方案如下:
Reduce the minimum values for the dynamic sga components to allow memory manager to make changes as needed 
or increase value of sga_target to provide more sga memory.


回想起昨天曾经在线减少过SGA_TARGET,
查询select sum(min_size)/1024/1024/1024 from v$sga_dynamic_components发现各个组件分配的最小内存之和等于SGA_TARGET,也就是没有
剩余的内存提供给ORACLE来自动调节,尝试在线增大SGA_TARGET参数后问题消失,同理,如果通过减少db_cache_size或者其他组件内存也可以解决。


体会:
SGA的设置一共通过以下一些参数来指定
db_cache_size
share_pool_size
large_pool_size
java_pool_size
stream_pool_size
log_buffer
在线缩小SGA_TARGET的时候,只能缩小到各项指定的组件参数之和的数值,如果指定了db_cache_size,shared_pool_size,java_pool_size,
large_pool_size,streams_pool_size参数后会默认为最小分配的内存,如果这些参数的和等于SGA_TARGET的时候,实际上ORACLE并不能动态的在
各种组件间调节内存。或者不指定具体的内存分配,仅仅指定SGA_TARGET。

你可能感兴趣的:(Oracle)