| « | 十月 2008 | » | ||||
|---|---|---|---|---|---|---|
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
今天有朋友数据库启动报错,向我求助。其中报错信息如下:
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
要使用10g的SGA动态调整,前提条件就是要
statistics_level=typical 或 all
因为oracle需要使用系统级的统计信息来确定各个内存区域的大小。
古董 | 02/12/2007, 19:22