【问题标题】:Unable to allocate x bytes of shared memory无法分配 x 字节的共享内存
【发布时间】:2018-07-26 17:42:26
【问题描述】:

当我尝试备份我的 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

我该如何解决这个问题?

【问题讨论】:

    标签: oracle11g oracle-xe datapump


    【解决方案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 不走运,应该考虑标准版。

    【讨论】:

      【解决方案2】:

      按照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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多