statistics_level與SGA_TARGET衝突

space6212發表於2019-03-05

今天有朋友資料庫啟動報錯,向我求助。其中報錯資訊如下:
SQL> startup
ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information
最後發現問題出在引數設定衝突上,下面模擬這個過程。


--設定引數並重啟
SQL> alter system set statistics_level=basic scope=spfile;

System altered.

SQL> show parameter sga_target

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 160M

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information

這裡報錯資訊不明確,並且有些誤導人。很多人看到這個資訊第一時間是去檢視background_dump_dest引數設定的路徑下檢視alert檔案,但你會發現在那個路徑下alert檔案什麼有用的資訊都沒有。
因為此時oracle例項還沒有起來,oracle還不知道background_dump_dest設定的路徑是什麼,所以,無法把出錯資訊往那個路徑下寫。
這種情況下,oracle會把alert資訊寫到$ORACLE_HOME/dbs下(linux系統),在$ORACLE_HOME/dbs下檢視alert檔案內容:

[oracle@suk1 dbs]$ more alert_test1.log
Wed Nov 28 16:50:10 2007
Cannot set sga_target with statistics_level=BASIC

從這個資訊看,錯誤原因就很明顯了:statistics_level=BASIC和sga_target的設定不相容。

因為在10g中,sga_target>0時,表示啟用sga自動管理特性,這個特性是基於oracle收集到的資料庫執行狀態資料來動態調整SGA的,而如果statistics_level=BASIC的話,oracle只會收集一些很基本的資訊,不會收集SGA自動調整需要的資訊,導致sga自動調整特性不可用。

知道原因了,解決方法有兩種:
1、設定sga_target=0,禁用sga自動調整
2、設定statistics_level=typical

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

相關文章