- ORA-04030: out of process memory when trying to allocate 88 bytes
ORA-04030:嘗試分配88字節時進程內存不足(以下信息為轉載整理,僅供參考)
根據異常信息,可以很容易的判斷是由於內存使用過多,分配不足所致的。此時需要考慮是本身內存不足還是其他原因。
若本身內存很大,出現內存不足的可能性很低。需要考慮oracle在分配內存的時候是有限制的,超出此限制則產生此錯誤。
max_sga_size指的是可動態分配的最大值﹐而sga_target是當前已分配的最大sga。
max_sga_size是不可以動態修改的﹐而sga_target是可動態修改﹐直到max_sga_size的值(前提是你設定的max_sga_size>sga_target的情況)
如果在實例啟動時﹐max_sga_size < sga_target或max_sga_size沒設定﹐則啟動后max_sga_size的值會等於sga_target的
https://blog.csdn.net/lixiaoer757/article/details/80594266 轉載
故障原因是由於數據庫監聽是通過 crs 進行啟動,所以繼承了 root 用戶的 ulimit 限制,在 root 的 ulimit 限制中 data(kbytes) 的限制為 131072kb,即每個通過監聽連接的進程能分配的內存資源不能超過 131072kb,所以在通過 PLSQL Developer 工具連接數據庫(需要通過 Oracle 的監聽建立連接)創建索引時,該操作申請的內存資源達到該限定時就會報 ORA-04030 的錯誤
1)是否有足夠的可用內存
2)是否設置了oracle限制
PGA 設置的大小為 8400M,根據單個會話使用 PGA 的期望尺寸(也可以認為是實際分配的最大尺寸)計算公式是:min(5%pga_aggregate_target,50%_pga_max_size,_smm_max_size),可以簡單計算下 min(5%*8400M,50%1680M,840M)=420M(其中_pga_max_size 的單位為 bytes,_smm_max_size 的單位為 kb),即單個會話能使用 PGA 的期望尺寸為 420M,那報錯的會話是否超過了該限制。
檢測辦法:查看trace文件
3)哪個進程需要的內存過多
檢測辦法:查看trace文件
4)是否設置了操作系統的限制
查看操作系統限制,oracle用戶限制
產生原因:(PLSQL Developer 是通過監聽程序建立的進程連接;sqlplus 是在數據庫服務器上直接創建創建的連接,繞過了監聽程序建立的進程)
避免方法:
1)在安裝 Oracle 軟件創建數據庫之前應該對主機層面的內核參數、limit 限制等進行規范的修改,以避免類似問題的發生。
2)配置合理的內存,例如物理內存和交換空間
3)使用自動 PGA 內存管理可降低 ORA-04030 錯誤的概率
https://blog.csdn.net/lzw5210/article/details/73550266 轉載
今天使用LogMiner找回誤更新的數據時,查詢v$logmnr_contents時,遇到了“ORA-04030: out of process memory when trying to allocate 152 bytes (Logminer LCR c,krvtadc)”錯誤。查了一下My Oracle Support,發現出現ORA-04030錯誤的原因,特摘錄在此。
如果指定了COMMITTED_DATA_ONLY選項而且發出了查詢,則LogMiner會在內存中的單個事務中逐步處理所有的重做記錄, 直到 logminer 找到該事務的提交記錄。 因此,可能會耗盡內存,在這種情況下將出現“Out of Memory”錯誤
ORA-04030: out of process memory when trying to allocate 152 bytes (Logminer LCR c,krvtadc)
APPLIES TO:
Oracle Database - Enterprise Edition - Version 10.2.0.4 to 12.1.0.1 [Release 10.2 to 12.1]
Information in this document applies to any platform.
This problem can occur on any platform.
SYMPTOMS
Select against logminer fails with ORA-4030 (Logminer LCR c,krvtadc).
Following query failed:
SELECT username, TO_CHAR(timestamp,'HH24:MI:SS'), substr(sql_redo,1,110)
FROM v$logmnr_contents
WHERE seg_owner='
AND seg_name IN ('
FROM v$logmnr_contents where
ERROR at line 2:
ORA-4030: out of process memory when trying to allocate 56 bytes (Logminer LCR c,krvtadc)
CAUSE
According to the documentation in Oracle® Database Utilities:
If the COMMITTED_DATA_ONLY option is specified and you issue a query, LogMiner stages all redo records within a single transaction in memory until LogMiner finds the commit record for that transaction. Therefore, it is possible to exhaust memory, in which case an "Out of Memory" error will be returned.
EXECUTE DBMS_LOGMNR.ADD_LOGFILE (logfilename => '
options => DBMS_LOGMNR.NEW);
EXECUTE sys.DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => '
options =>dbms_logmnr.committed_data_only);
SOLUTION
If this occurs, you must restart LogMiner without the COMMITTED_DATA_ONLY option specified and reissue the query.
REFERENCES
https://www.cnblogs.com/kerrycode/p/10206255.html 轉載