无法分配x字节的共享内存

时间:2012-07-24 06:12:17

标签: oracle11g oracle-xe datapump

当我尝试备份我的oracle数据库时,我收到了以下错误。

UDE-04031: operation generated ORACLE error 4031
ORA-04031: unable to allocate 16 bytes of shared memory ("shared pool","SELECT j
ob_id FROM v$datapum...","SQLA","tmp")
ORA-06512: at "SYS.KUPV$FT_INT", line 2904
ORA-06512: at "SYS.KUPC$QUE_INT", line 572
ORA-25254: time-out in LISTEN while waiting for a message
ORA-06512: at "SYS.DBMS_DATAPUMP", line 3326
ORA-06512: at "SYS.DBMS_DATAPUMP", line 4551
ORA-06512: at line 1

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

SGA的共享池部分内存不足。

当您似乎使用XE 11g时,我假设您正在使用自动内存管理。所以我先试试 增加初始化参数MEMORY_TARGET(如果新MEMORY_MAX_TARGET超出,则MEMORY_TARGET)。

请注意,XE中限制为最大1GB(请参阅http://docs.oracle.com/cd/E17781_01/install.112/e18802/toc.htm#BABHJHHC)。

要将其更改为SYS执行:alter system set MEMORY_TARGET=1GB;

要使用其他参数MEMORY_MAX_TARGET更改scope=pfile执行,您必须重新启动该实例。

如果这没有帮助(已设置最大1GB):部分禁用AMM并将初始化参数shared_pool_size设置为250MB(或更多)以扩大共享池(以其他组件为代价,缓冲区)缓存,...)然后再试一次。

在SGA中使用

来查看当前对池的内存分配
select nvl(pool,name) pool
      ,sum(bytes)/1024/1024 MB 
  from v$sgastat 
 group by nvl(pool,name)
;

如果共享池已经是最大的,而memory_target已经达到了1GB的限制,那么我担心你对XE运气不好,应该考虑标准版。

答案 1 :(得分:0)

跟随 GWu答案

以下是保存 Oracle Express 11.2 的命令(您当然可以更改参数值)

ALTER SYSTEM SET MEMORY_MAX_TARGET=1000m SCOPE=SPFILE;

ALTER SYSTEM SET MEMORY_TARGET=1000m SCOPE=SPFILE;

SHUTDOWN IMMEDIATE

STARTUP