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

问题描述 投票:0回答:3

当我尝试备份 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
3个回答
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)
;

如果共享池已经是最大的,并且您已经达到 1GB 的限制

memory_target
那么我担心您对 XE 不走运,应该考虑标准版。


1
投票

以下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

0
投票

如果您使用 ASMM(自动共享内存管理),请增加“SGA_TARGET”以匹配“SGA_MAX_SIZE”参数。

alter system set SGA_MAX_SIZE=8914M scope=spfile;

alter system set SGA_TARGET=8914M scope=spfile;

如果您使用 AMM(自动内存管理),请增加“MEMORY_TARGET”以匹配“MEMORY_MAX_TARGET”参数。

alter system set MEMORY_MAX_TARGET=2G scope=spfile;

alter system set MEMORY_TARGET=2G scope=spfile;

然后重新启动数据库。

检查“STREAMS_POOL_SIZE”的值也是个好主意

show parameter streams_pool;

select * from v$sgainfo;

来源: https://支持 .oracle.com/knowledge/Oracle%20Database%20Products/1907256_1.html

快乐编码;

© www.soinside.com 2019 - 2024. All rights reserved.