伺服器增加記憶體後無法重啟資料庫的問題及解決

jeanron100發表於2014-04-07
前幾天生產環境需要做伺服器的擴容,把原本64G的記憶體擴到了128G.然後調整了一些其他的kernel引數,在此基礎上需要調整sga的大小,以便分配更多的快取。
環境是11gR2的RAC環境,這時候rac有一個明顯的優點就顯現出來了,就是沒有downtime。一個例項一個例項的改動,調整kernel,db引數都很方便管理。
所在的每個伺服器只有一個oracle_home,各有兩套rac環境在同一個unix賬戶下。所以我啟停資料庫的時候也是一套環境一套環境的來。反正節點也不多。
我先是按照要求把sga調整了一下,從20G調整到40G,這樣一個伺服器兩套環境就佔用80G,還有68G的空餘。
然後保證另一個節點能夠正常failover之後,開始改動,很多改動完一套環境,倒也沒出什麼問題,
開始第二套環境的時候,按照步驟先啟停,做檢查。
然後準備重啟資料庫的時候,報了下面的錯誤。顯示記憶體問題,還有空間的問題,我檢查了一把空間情況,沒有發現什麼問題。
用free -m檢查記憶體使用情況,空餘記憶體還多著呢。

Connected to an idle instance.
SQL> startup nomount
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
SQL> !oerr ora 27102

檢視metalink(ID 301830.1),說是核心引數的配置不夠。
核心引數的值如下:
Last login: Sun Mar 30 22:42:16 2014 from xxxx
-bash-4.1$ cat /proc/sys/kernel/shmall
16383998
-bash-4.1$ cat /proc/sys/kernel/shmmax
67108855808

CAUSE

shmall is the total amount of shared memory, in pages, that the system can use at one time.

SOLUTION

Set shmall equal to the sum of all the SGAs on the system, divided by the page size. 

來做個演算,

shmall應該是shmmax/page_size=67108855808/4096=16383998,這個和當前的設定相等
但是同一個unix賬戶下有兩套環境,需要分配兩套sga。所以shmall就遠遠不夠了,需要同時修改shmmax,一般建議為記憶體的90%左右。

調整後引數值如下:
-bash-4.1$ cat /proc/sys/kernel/shmall
33030178

-bash-4.1$ cat /proc/sys/kernel/shmmax
135291609088

然後需要sysctl給啟用一下。

再重啟資料庫就沒有問題了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1137256/,如需轉載,請註明出處,否則將追究法律責任。

相關文章