设为首页 加入收藏

TOP

诊断并解决ORA-4030错误(DocID1548826.1)(一)
2015-11-21 01:59:58 来源: 作者: 【 】 浏览:2
Tags:诊断 解决 ORA-4030 错误 DocID1548826.1


适用于:



Oracle Database - Enterprise Edition - 版本 8.1.7.4 和更高版本
本文档所含信息适用于所有平台

用途

如何诊断 ORA-4030 错误

排错步骤

诊断并解决 ORA-4030 错误

ORA-4030 意味着什么?

你可能在日志文件中或者屏幕上看到这个错误: ORA-04030 'out of process memory when trying to allocate %s bytes (%s,%s)'
该错误意味着 Oracle Server 进程无法从操作系统分配更多内存。该内存由 PGA(Program Global Area)组成,其内容取决于服务器配置。对于专用的服务器进程,内存包含堆栈以及用于保存用户会话数据、游标信息和排序区的 UGA(User Global Area)。在多线程配置中(共享服务器),UGA 被分配在 SGA(System Global Area)中,所以在这种配置下 UGA 不是造成 ORA-4030 错误的原因。


因此,ORA-4030 表示进程需要更多内存(堆栈 UGA 或 PGA)来执行其任务。

是什么导致了该错误?

由于发生了这个错误,您因此无法从操作系统分配内存。这个错误可能是进程本身导致的,例如进程需要过多的内存,或者一些其他原因导致操作系统内存被耗尽,例如 SGA 太大或系统虚拟内存(物理内存 + 交换空间)中要容纳的进程过多。许多操作系统会对单个进程能够获取的内存量加以限制,以便自我保护。所以我们就会有下列问题:

问题:

是否仍然有足够的可用内存?
是否设置了操作系统限制?
是否设置了 Oracle 限制?
哪个进程需要的内存过多?
如何收集有关进程实际正在执行的任务的信息?
下面我们将讨论这些内容。

其他主题:

  • ?
有关避免此错误的一般建议

是否仍然有足够的可用内存?

要回答这个问题,我们需要使用操作系统特定的工具来检查内存使用情况。

OpenVMS 系统:show memory 会提供关于物理内存和页面文件使用情况的信息:

Physical Memory Usage (pages): Total Free In Use Modified

Main Memory (256.00Mb) 32768 24849 7500 419

?

.....

?

Paging File Usage (blocks): Free Reservable Total

DISK$BOBBIEAXPSYS:[SYS0.SYSEXE]SWAPFILE.SYS 30720 30720 39936

DISK$BOBBIEAXPSYS:[SYS0.SYSEXE]PAGEFILE.SYS 226160 201088 249984

DISK$BOBBIE_USER3:[SYS0.PAGEFILE]PAGEFILE.SYS 462224 405296 499968

?

作为一般准则,页面文件中的可用空间总和应不低于整个空间总和的一半。

交换文件应几乎不使用,可用空间的大小应大致等于总空间的大小。

Windows 系统:在“任务管理器”的性能选项卡中检查内存使用情况。

Unix 系统:每种 unix 系统通常都有自己的工具来检查系统上的全局内存使用情况,如 top、vmstat……并且在不同的 OS 上,内存管理的运作方式各不相同。

top 通常会显示物理内存和交换空间的统计信息

swapon -s 显示交换空间使用情况

vmstat 显示可用物理内存

Linux 上的 top 输出示例:

top - 10:17:09 up 1:27, 4 users, load average: 0.07, 0.12, 0.05

Tasks: 110 total, 4 running, 105 sleeping, 0 stopped, 1 zombie

Cpu(s): 0.3% user, 1.6% system, 0.0% nice, 98.0% idle

Mem: 1033012k total, 452520k used, 580492k free, 59440k buffers

Swap: 1052248k total, 0k used, 1052248k free, 169192k cached

.....

如果有足够的内存可用,请检查操作系统是否存在强制限制。如果内存已被耗尽,我们就需要找出内存被用到了哪些地方。

是否设置了操作系统限制?

如果似乎仍剩余大量的虚拟内存,那么有可能是我们需要使用的内存量是不被允许的。下面的步骤可以用来检查由操作系统实施的限制。

OpenVMS 系统:若要检查您可以使用的物理内存量,请使用授权工具来检查 working set 配额和页面文件配额。请参阅 OpenVMS 部分,了解使用了哪些配额以及如何修改配额。根据进程类型以及启动的方式,其所用的配额可能不是 Oracle中的那部分配额。show process/id=/quota 会显示某个进程还剩余多少配额。

UAF> show oracle7

?

Username: ORACLE7 Owner: Oracle7 DBA

Account: SUPPORT UIC: [200,2] ([SUPPORT,ORACLE7])

CLI: DCL Tables: DCLTABLES

Default: DISK$BOBBIE_USER1:[ORACLE7]

LGICMD: LOGIN

Flags:

Primary days: Mon Tue Wed Thu Fri

Secondary days: Sat Sun

No access restrictions

Expiration: (none) Pwdminimum: 6 Login Fails: 0

Pwdlifetime: (none) Pwdchange: 3-DEC-1997 15:38

Last Login: 27-MAY-2003 14:54 (interactive), 26-MAY-2003 16:15 (non-interactive)

Maxjobs: 0 Fillm: 1200 Bytlm: 180000

Maxacctjobs: 0 Shrfillm: 0 Pbytlm: 0

Maxdetach: 0 BIOlm: 500 JTquota: 8192

Prclm: 20 DIOlm: 500 WSdef: 2500

Prio: 4 ASTlm: 4000 WSquo: 4096

Queprio: 0 TQElm: 4000 WSextent: 30000

CPU: (none) Enqlm: 18000 Pgflquo: 750000

Authorized Privileges: .....

?

$ sho proc/id=20200139/quota

?

24-JUN-2003 12:30:54.39 User: ORACLE7 Process ID: 20200139

Node: BOBBIE Process name: "ORA_BOB901_PMON"

?

Process Quotas:

Account name: SUPPORT

CPU limit: Infinite Direct I/O limit: 100

Buffered I/O byte count quota: 9994816 Buffered I/O limit: 100

Timer queue entry quota: 99 Open file quota: 29997

Paging file quota: 145968 Subprocess quota: 10

Default page fault cluster: 64 AST quota: 49

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇dbo.Interface_So_Newdrm 下一篇将一张表中的数据作为列名的存储..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: