问题:我在将Oracle的内存管理方式改为自动内存管理时,出现ORA-00844错误,请问应当怎样解决?
解答:这个错误不应该算作Oracle的bug,由于你设置了Oracle的MEMORY_TARGET参数的值小于了SGA_TARGET和PGA_TARGET的总和,因此才会报错。
[oracle@yangtk ~]$ sqlplus '/ as sysdba'
SQL*Plus: Release 11.1.0.6.0 - Production on Wed Jan 16 07:30:33 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> set pages 100 lines 120 SQL> show parameter target
NAME TYPE VALUE------------------------------------ -----------archive_lag_target integer 0db_flashback_retention_target integer 1440fast_start_io_target integer 0fast_start_mttr_target integer 0memory_max_target big integer 0memory_target big integer 0pga_aggregate_target big integer 100Msga_target big integer 252MSQL> alter system set memory_target = 220m scope = spfile;
System altered.
SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORA-00844: Parameter not taking MEMORY_TARGET into account, see alert log for more information
其实这个错误很多情况下是由于人为设置的参数太小造成的。但是Oracle在此处存在两个问题,首先,没有通过错误信息告诉用户,是哪些参数的值设置导致的问题。第二点尤为严重,Oracle的错误信息显示,进一步的错误信息去alert文件中寻找,但是:
SQL> host [oracle@yangtk ~]$ tail -
30 /data/oracle/diag/rdbms/ora11g_p/ora11g/trace/alert_ora11g.log Wed Jan 16 07:42:00 2008ARCH shutting downARC1: Archival stoppedWed Jan 16 07:42:00 2008ARCH shutting downARC0: Archival stoppedWed Jan 16 07:42:00 2008ARC3: Becoming the 'no FAL' ARCHARC3: Becoming the 'no SRL' ARCHARC3: Archiving disabledARCH shutting downARC3: Archival stoppedARC2: Archival stoppedThread 1 closed at log sequence 268Successful close of redo thread 1Completed: ALTER DATABASE CLOSE NORMALALTER DATABASE DISMOUNTCompleted: ALTER DATABASE DISMOUNTARCH: Archival disabled due to shutdown: 1089Shutting down archive processesArchiving is disabledArchive process shutdown avoided: 0 activeWed Jan 16 07:42:02 2008Stopping background process VKTM: ARCH: Archival disabled due to shutdown: 1089Shutting down archive processesArchiving is disabledArchive process shutdown avoided: 0 activeWed Jan 16 07:42:05 2008Instance shutdown complete
大家可以发现,在alert文件中没有任何的错误信息,看来Oracle在尝试启动直接进行了参数的检查,这个检查过程就直接报错了,不过即使报错也应该记录到alert文件中,何况错误信息中明明显示要在alert文件中寻找进一步的错误。
解决方法:创建pfile,然后修改MEMORY_TARGET的值即可解决此问题。
示例:
SQL> create pfile='/home/oracle/initora11g.ora' from spfile;
File created.
SQL> host echo 'memory_target=367001600' >> /home/oracle/initora11g.ora
SQL> startup pfile=/home/oracle/initora11g.oraORACLE instance started.
Total System Global Area 267825152 bytesFixed Size 1299316 bytesVariable Size 176163980 bytesDatabase Buffers 88080384 bytesRedo Buffers 2281472 bytesDatabase mounted.Database opened.
SQL> create spfile from pfile='/home/oracle/initora11g.ora';File created.