深入講解調整Oracle SGA大小的解決方法

football2006發表於2008-07-15
在修改資料緩衝區的時候,提示錯誤如下:

  SQL> alter system set db_cache_size=25165824 scope=both;

  alter system set db_cache_size=25165824 scope=both

  *

  ERROR at line 1:

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

  ORA-00384: Insufficient memory to grow cache

  SQL>

  出現這種錯誤的具體原因:

  SGA(sga_max_size)是由共享池(shared_pool_size),緩衝區快取記憶體(db_cache_size 9i以上版本),大型池(large_pool_size),java池(java_pool_size)組成的,在我們安裝的時候這些已經分配了一定的值,由於需求需要對其進行調整。

  現在sga的值是一定的,sga通常是大於等於以上幾項的值之和。

  假如正好sga等於各項之和,那麼調大其中任何一項都會出錯,調小是不成問題的。

  在此情況下也就出現了以上的錯誤:

  下面我們以db_cache_size為例:

  解決方法如下:

  1、調小其它項的值,一般情況下我們不會採用這種方法,隨著業務的增大對記憶體的需求越來越高,估計其它項也沒有調小的餘地

  2、調大sga此時資料庫需要是在關閉狀態,由於sga不是動態引數,所以我們需要修改init$ORACLE_SID.ORA的中sga的大小

  (1)首先建立引數檔案,這是為了保持和伺服器引數檔案一致SQL>create pfile from spfile;

  (2)修改init$ORACLE_SID.ORA中對應的sga_max_size大小

  (3)建立伺服器引數檔案SQL>create spfile from pfile;

  (4)啟動資料庫 修改db_cache_size的大小

  SQL> alter system set db_cache_size=25165824 scope=both;

  System altered.

  修改完畢。

  總結:

  sga_max_size需要重啟資料庫來進行調整,而其中的db_cache_size等可以動態調節,在調節共享池時需要計算好SGA的總容量,假如超過了sga_max_size,就會出現報錯的現象。[@more@]

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

相關文章