分析和解决ora-4030错误

** 分析和解决 ora-4030 错误

**

** ORA-4030 ** ** 意味着什么?

**

这个错误意味着 oracle 服务器进程不能从操作系统获得更多的内存。这里的内存指的是 PGA( 程序全局区 ) 以及由配置决定的它的子项。对于专用的服务器进程,内存包括堆栈区、 UGA (用户全局区)。 UGA 包括用户会话数据、游标信息和排序区。在多线程配置中(共享服务器), UGA 处于 SGA (系统全局区)中,它不会造成 ora-4030 错误。

因此, ora-4030 意味着进程需要更多的内存(堆栈、 UGA 或者 PGA )来执行它的工作。

是什么引起了这个错误?

这个错误表示操作系统不能分配足够的内存。这个错误可能是你的进程本身引起的,例如你的进程需要太多的内存,或者其它的原因引起操作系统内存枯竭,例如 SGA 区分得太大或者太多的进程竞争系统虚拟内存(物理内存+交换分区)。许多操作系统会限制某个进程获得的内存以保证系统稳定。

请按以下步骤检查你的系统:

· 是否仍有足够的内存供分配?

· 操作系统是否有限制?

· Oracle 数据库是否有限制?

· 哪一个进程需要过多的内存?

· 如何收集那个(需要过多内存的)进程正在做什么的信息?

这些将在下一节里讨论。

进一步讨论主题:

· 避免此类错误的一般建议

· 参考

** 是否仍有足够的内存供分配?

**

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

1.OpenVMS 系统:显示那些能告诉你物理内存和页面文件使用情况的信息。

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 2261 60201088 249984 DISK$BOBBIE_USER3:[SYS0.PAGEFILE]PAGEFILE.SYS 462224 405296 499968

作为一般的原则,页面文件中的空闲容量总量应该不低于总容量的一半。交换文件应该几乎不使用,空闲的容量应该几乎和总容量一样。

1.Windows 系统:在任务管理器中查看内存使用情况。

2.Unix 系统:每一个 Unix 系统都有自己的工具来检测全部内存的使用情况,例如 top,vmstat….. ,并且每一个系统都有所不同。

o top 常用来显示物理内存和交换空间的情况。

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

o vmstat 显示空闲物理内存情况

Sample top output on Linux:

在 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

.....

如果有足够的内存,那么请检查一下是否操作系统有强制限制。如果内存被耗尽了,我们就要找出这些内存被用在了哪里。

** 操作系统是否有限制?

**

如果仍有充足的虚拟内存剩余,可能是我们不能使用申请使用的那部分内存。请检查操作系统是否有限制。

1.OpenVMS 系统:要检查你能使用的物理内存的总量,请检查工作(页面)区配额( working set quotas )和页面文件配额 (pagefile quota) 。请查询 OpenVMS 使用指南确定配额情况和如何修改它们。根据使用进程的不同以及启动它们方式的不同,配额使用将不同于 oracle 的统计。 Process/id=

 1<process id="">/quota  将显示对于一个特定的进程还有多少剩余配额可使用。 
 2
 3UAF&gt; show  oracle7 
 4
 5Username:  ORACLE7  Owner:  Oracle7  DBA 
 6
 7Account:  SUPPORT  UIC:  [200,2]  ([SUPPORT,ORACLE7]) 
 8
 9CLI:  DCL  Tables:  DCLTABLES 
10
11Default:  DISK$BOBBIE_USER1:[ORACLE7] 
12
13LGICMD:  LOGIN   
14Flags: 
15
16Primary  days:  Mon  Tue  Wed  Thu  Fri 
17
18Secondary  days:  Sat  Sun 
19
20No  access  restrictions 
21
22Expiration:  (none)  Pwdminimum:  6  Login  Fails:  0 
23
24Pwdlifetime:  (none)  Pwdchange:  3-DEC-1997  15:38 
25
26Last  Login:  27-MAY-2003  14:54  (interactive),  26-MAY-2003  16:15  (non-interactive) 
27
28Maxjobs:  0  Fillm:  1200  Bytlm:  180000 
29
30Maxacctjobs:0  Shrfillm:  0  Pbytlm:  0 
31
32Maxdetach:  0  BIOlm:  500  JTquota:  8192 
33
34Prclm:  20  DIOlm:  500  WSdef:  2500 
35
36Prio:  4  ASTlm:  4000  WSquo:  4096 
37
38Queprio:0  TQElm:  4000  WSextent:  30000 
39
40CPU:  (none)  Enqlm:  18000  Pgflquo:  750000 
41
42Authorized  Privileges:  ..... 
43
44$  sho  proc/id=20200139/quota 
45
4624-JUN-2003  12:30:54.39  User:  ORACLE7  Process  ID:  20200139 
47
48Node:  BOBBIE  Process  name:  "ORA_BOB901_PMON" 
49
50Process  Quotas: 
51
52Account  name:  SUPPORT 
53
54CPU  limit:  Infinite  Direct  &lt;sp</process>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus