db_recovery_file_dest_size参数的作用是限制闪回恢复区可存放文件总大小。一旦将参数db_recovery_file_dest_size设置为非零值后“很难”恢复为默认值“0”。这里我给出两种可以将此参数恢复为默认值“0”的方法,一种是“迂回策略”,一种是reset方法。1.查看默认情况下db_recovery_file_dest_size参数值db_recovery_file_dest_size参数的默认值是“0”。SYS@PROD> show parameter db_recovery_file_dest_sizeNAME TYPE VALUE------------------------------------ ----------- -------------db_recovery_file_dest_size big integer 0SYS@PROD> col name for a20SYS@PROD> select * from v$recovery_file_dest;NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES----- ----------- ---------- ----------------- ---------------0 0 0 02.将db_recovery_file_dest_size参数调整为非零值SYS@PROD> alter system set db_recovery_file_dest_size=4g;System altered.SYS@PROD> show parameter db_recovery_file_dest_sizeNAME TYPE VALUE------------------------------------ ----------- ------------db_recovery_file_dest_size big integer 4GSYS@PROD> select * from v$recovery_file_dest;NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES----- ----------- ---------- ----------------- ---------------4294967296 0 0 03.尝试将db_recovery_file_dest_size参数修改为“0”SYS@PROD> alter system set db_recovery_file_dest_size=0;alter system set db_recovery_file_dest_size=0*ERROR at line 1:ORA-02097: parameter cannot be modified because specified value is invalidORA-19803: Parameter DB_RECOVERY_FILE_DEST_SIZE is out of range (1 -18446744073709551614)报错信息非常显然,db_recovery_file_dest_size参数大小必须介于1~18446744073709551614之间,也就是说不可以调整为其默认值“0”。有朋友说,是不是可以尝试使用scope=spfile方式调整此参数。注意,也是不可以的。验证如下。SYS@PROD> alter system set db_recovery_file_dest_size=0 scope=spfile;System altered.此处貌似修改成功,但是这样调整后数据库将无法重新启动,报错信息如下。SYS@PROD> startup;ORA-19803: Parameter DB_RECOVERY_FILE_DEST_SIZE is out of range (1 - 18446744073709551614)一样的报错原因,db_recovery_file_dest_size参数大小必须介于1~18446744073709551614之间。4.迂回处理方法既然使用常规方法无法达到我们将db_recovery_file_dest_size参数调整为“0”的目的,那我们应该如何应对这个需求呢。经过尝试,可以通过pfile迂回的达到恢复的目的。1)使用当前的spfile生成pfileSYS@PROD> create pfile from spfile;File created.2)使用vi命令将pfile中的db_recovery_file_dest_size参数信息删除掉[oracle@secdb1 ~]$ vi $ORACLE_HOME/dbs/initPROD.ora……*.db_recovery_file_dest_size=4294967296……注:如果经过上面scope=spfile方法调整过的话,pfile中的信息如下:*.db_recovery_file_dest_size=0方法是一样的,将整行信息删除掉。3)停止数据库并生成spfile,并用spfile启动数据库SYS@PROD> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SYS@PROD> create spfile from pfile;File created.SYS@PROD> startup;ORACLE instance started.Total System Global Area 314572800 bytesFixed Size 1219184 bytesVariable Size 109053328 bytesDatabase Buffers 201326592 bytesRedo Buffers 2973696 bytesDatabase mounted.Database opened.4)查看修改成果SYS@PROD> show parameter db_recovery_file_dest_sizeNAME TYPE VALUE------------------------------------ ----------- -----------db_recovery_file_dest_size big integer 0SYS@PROD> col name for a20SYS@PROD> select * from v$recovery_file_dest;NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES------ ----------- ---------- ----------------- ---------------0 0 0 0目的达到。
5.使用直截了当的reset方法