ORA-04030: 在嘗試分配...字節(...)時進程內存不足的原因分析解決方法

      正在使用的oracle 11g數據庫,前天在用一段時間後(開始要較長時間纔出現,後來較短時間就出現),頻繁報ORA-04030錯誤,具體錯誤信息是 ORA-04030: 在嘗試分配...字節(...)時進程內存不足。

        根據異常信息,可以很容易的判斷是由於內存使用過多,分配不足所致的,但是電腦本身內存並不小,由此可以說明oracle在分配內存時,應該是有限制的,當超出這個限制的時,就會出現這個錯誤。

        在網上查了一下,挺多人遇到這個問題,根據自己的實際問題及解決過程,個人認爲下面的說法更準確:

另外值得注意的是max_sga_size和sga_target的設置:

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的值,這時如果內存佔用超過sga_target,也可能會出現ORA-04030的錯誤


         具體解決辦法可參考,使用pl/sql或sqlplus連接上數據庫(出現這個錯誤後,數據已經無法正常訪問,需要請停止數據庫服務,然後再重新啓動),執行如下命令:
1. 設置rman從SGA取內存
alter system set dbwr_io_slaves=2 scope=spfile;
alter system set backup_tape_io_slaves=true scope=spfile;

2. 調整SGA大小
alter system set sga_target=1200m;
//上面語句如果執行出錯,暫不理會,等下面語句全部執行完後,重新啓動oracle service,再次執行這條語句。
alter system set sga_max_size=1200m scope=spfile;

3. 設置使用內存最大大小
alter system set large_pool_size=80m;

4. 重啓oracle service。

5. 查看sga,pga,pool的大小。
show parameter pool

        可參考原文:http://blog.csdn.net/zhangout/article/details/6454794


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章