shell 获取ora报错信息_ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析...
概述
前段時間使用的oracle 11g數據庫,在用一段時間后(開始要較長時間才出現,后來較短時間就出現),頻繁報ORA-04030錯誤,具體錯誤信息是 ORA-04030: 在嘗試分配...字節(jié)(...)時進程內存不足。
根據異常信息,可以很容易的判斷是由于內存使用過多,分配不足所致的,但是服務器本身內存并不小,由此可以說明oracle在分配內存時,應該是有限制的,當超出這個限制的時,就會出現這個錯誤。
網上說法很多,下面整理了下一般處理的一個思路和方法。
1、是否仍然有足夠的可用內存?
主要使用操作系統特定的工具(top、topas、vmstat、swapon -s)來檢查內存使用情況。如果有足夠的內存可用,那么就需要檢查操作系統是否存在強制限制。如果內存已被耗盡,那么就需要找出內存被用到了哪些地方。
2、是否設置了操作系統限制?
如果仍有足夠的內存可用,那么有可能是進程需要使用的內存量是不被允許的。使用命令“ulimit -a”查看操作系統限制。尤其對于“data seg size”選項,應該設置為 unlimited。在 RAC 或 GRID 環(huán)境中,由于數據庫監(jiān)聽是通過 CRS 進行啟動,所以監(jiān)聽繼承了 root 用戶的 ulimit 限制。如果在 root 的 ulimit限制中 data(kbytes)的限制為 1310kb,那么表示每個通過監(jiān)聽連接的進程能分配的內存資源不能超過1310kb。
3、是否設置了 Oracle 限制?
查詢參數 PGA_AGGREGATE_TARGET 的大小,該參數限制一個實例可以分配的 PGA 總量。以下查詢用于查找分配給所有會話的 PGA 區(qū)的內存總量:
SELECT SUM(VALUE) / 1024 / 1024 PGA_SIZE_MBFROM V$SESSTAT S, V$STATNAME NWHERE N.STATISTIC# = S.STATISTIC#AND NAME = 'session pga memory';4、哪個進程需要的內存過多?
一些操作會需要大量的進程內存,例如,大型的 PL/SQL 表或大量的排序操作。
可以使用以下查詢來查找所有 Oracle 進程的 PGA 和 UGA 大小:
SELECT SID, NAME, VALUEFROM V$STATNAME N, V$SESSTAT SWHERE N.STATISTIC# = S.STATISTIC#AND NAME LIKE 'session%memory%'ORDER BY 3 ASC;通常,從操作系統的角度來確認進程內存使用情況,是一個好辦法。畢竟,使用過多內存的不一定是 Oracle Server 進程。
5、如何收集有關進程實際正在執(zhí)行的任務的信息?
可以做 heapdump,然后分析 dump 結果:
SQL> select PID from v$process p, v$session s where p.addr=s.paddr and sid=;SQL> oradebug setorapid SQL> oradebug unlimitSQL> oradebug dump errorstack 3SQL> oradebug dump heapdump 536870917SQL> oradebug tracefile_name (shows the path and filename information)SQL> oradebug close_trace或者使用 event,如下所示:
設置系統級事件來產生 ORA-04030 錯誤時的 trace 文件,設置 event 如下:
alter system set events '4030 trace name errorstack level 3;name HEAPDUMP level 536870917';得到報錯的 dump 文件后,關閉生成 event:
alter system set events '4030 trace name errorstack off';alter system set events '4030 trace name HEAPDUMP off';實際上引起ORA-04030的原因,是不能分配更多的內存,解決辦法有兩種,其一是加大內存,其二是對oracle的內存控制參數進行調整,使其內存分配更適合于當前的應用程序。
后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下!!
總結
以上是生活随笔為你收集整理的shell 获取ora报错信息_ORA-04030: 在尝试分配...字节(...)时进程内存不足的原因分析...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pix4d怎么查看点云数据_python
- 下一篇: vsflexgrid单元格换行后自动使用