管理oracle11g內存設置 解決ora-02097 ora-00838 ora-00845報錯問題

Oracle對內存的管理的 優化從未間斷,從8i到11g不斷地提出新的管理概念。每個本版都對內存管理進行了簡化:
1、8i->9i:PGA的自動管理;
2、9i->10g:SGA的自動管理;
3、10g->11g:MEMORY(SGA+PGA)的自動管理。

在11g中oracle引入了自動化內存管理(Automatic Memory Management)概念,僅用兩個參數就能完成oracle的內存管理工作。DBA的工作看來又要輕鬆不少了,看看兩個參數:

MEMORY_TARGET:oracle所能使用的最大內存,該參數可以動態調整。

MEMORY_MAX_TARGET:MEMORY_TARGET參數所能動態設定的最大值,不能動態調整,需要重啓數據庫

注:oracle的內存管理方式可以根據本版向下兼容的,11g可以實現10g,9i,8i時的管理方式。


SQL> show parameter sga
NAME         TYPE VALUE
---------------- ----------- --------------
lock_sga      boolean     FALSE
pre_page_sga   boolean     FALSE
sga_max_size   big integer   12864M
sga_target    big integer    0


SQL> show parameter pga
NAME             TYPE    VALUE
--------------------  ----------- ----------
pga_aggregate_target big integer  0


SQL> show parameter mem
NAME                TYPE VALUE
------------------------- ----------- -----------
hi_shared_memory_address  integer  0
memory_max_target     big integer 12864M
memory_target        big integer 12864M
shared_memory_address    integer  0


可以總結一下MEMORY之間互相制約的順序;

memory_max_target==>memory_target===>sga_max_size==>sga_target 

此外, Memory_target還有下面的這個:

Memory_Target = SGA_Target + pga_aggregate_target


案例一:

問題1、修改了sga_target/pga_aggregate_target的值,導致他們之和大於memory_target;

問題2、修改memory_target值,導致其小於sga_target/pga_aggregate_target之和,也會報錯;

SQL>startup 啓動數據庫 報錯:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 4016M

問題概括:Memory_Target 小於 SGA_Target與 pga_aggregate_target之和


解決方法:

上述參數的配置信息都存放在$ORACLE_HOME/dbs/spfile.ora文件中,但是該文件爲二進制文件,不可以直接修改;只能通過SQL語句創建出它的副本pfile文件進行修改vi/vim,然後替換即可。(此時DB已經被shutdown了,無法startup,但是仍可由spfile來創建pfile)


第一種解決方法: 還原先前狀態,不做修改。

1)SQL>create pfile from spfile;

2)[oracle@ORACLE247 dbs]$ vim $ORACLE_HOME/dbs/initorcl.ora

3)刪除行 *.sga_target=***** 

4)SYS> create spfile from pfile;

5)SYS> startup 即可


第二種方法,將sga_target修改爲一個正確的值:

1)創建pfile初始化文檔;

2)修改 *.sga_target=X (X等於MEMORY_TARGET的值減去PGA的值(大於10M,PGA最小值));

3)由修改後的PFILE創建SPFILE;

4)啓動DB即可;


第三種方法,修改增大 *.memory_target的值,

1)與第二種方法類似,創建pfile初始化文檔;

2)修改增大 *.memory_target=Y(Y值是不能大於/dev/shm tmpfs共享文件系統的大小,否則會報案例二的錯);

[root@ORACLE247 ~]# df -h |grep /dev/shm
tmpfs                  16G  8.2G  7.5G  53% /dev/shm


案例二:問題:設置的Memory_Target值過大

SQL>startup 啓動數據庫 報錯:

ORA-00845: MEMORY_TARGET not supported on this system


問題原因:物理內存大小>=Memory_Target大小設置>=/dev/shm tmpfs共享文件系統的大小


解決方法:

方法一:參照案例一中的方法三,修改Memory_Target大小;


方法二:修改/dev/shm 的大小,修改方法又有兩種:

1)[root@ORACLE247 ~]# cat /etc/fstab | grep tmpfs 

這個是靜態修改,需要重啓系統才能生效。

2)[root@ORACLE247 ~]# mount -o remount,size=4G /dev/shm

這是通過重新掛載來修改其大小,不需要重啓。

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