[20171110]_allow_read_only_corruption参数.txt
--//昨天在修改查询隐含参数脚本时发现一个参数_allow_read_only_corruption,感觉应该可以在异常关闭的情况下以read only打开.--//自己测试看看.1.环境:SYS@book> @ &r/ver1PORT_STRING VERSION BANNER------------------------------ -------------- --------------------------------------------------------------------------------x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionSYS@book> @ &r/hide _allow_read_only_corruptionNAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE--------------------------- ------------------------------------------------ ------------- ------------- ------------_allow_read_only_corruption allow read-only open even if database is corrupt TRUE FALSE FALSE2.测试前准备:SYS@book> create pfile='/tmp/init@.ora' from spfile ;File created.--//修改 /tmp/initbook.ora文件,加入如下内容:*._allow_read_only_corruption=true--//做一个异常关闭数据库.SYS@book> shutdown abort ;ORACLE instance shut down.SYS@book> startup mount pfile='/tmp/init@.ora'ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> show parameter allowNAME TYPE VALUE--------------------------- ------- ------_allow_read_only_corruption boolean TRUE--//说明只要配置了参数在参数文件中,隐含参数实际上也可以使用show parameter.但是像前面带2个下划线参数,show parameter还是无--//法查询.比如:SYS@book> show parameter __java_pool_sizeSYS@book> @ &r/hide __java_pool_sizeNAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE----------------- --------------------------------- ------------- ------------- ------------__java_pool_size Actual size in bytes of java pool FALSE 4194304 4194304SYS@book> alter database open read only;alter database open read only*ERROR at line 1:ORA-16005: database requires recovery--//可以发现不行.也许需要_allow_resetlogs_corruption参数配合.3.继续测试:--//修改 /tmp/initbook.ora文件,加入如下内容:*._allow_resetlogs_corruption=trueSYS@book> @ &r/logfileGROUP# STATUS TYPE MEMBER IS_ GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME------ ---------- ---------- -------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ ------------------- 1 ONLINE /mnt/ramdisk/book/redo01.log NO 1 1 728 52428800 512 1 NO CURRENT 13277659048 2017-11-09 16:18:09 2.814750E+14 2 ONLINE /mnt/ramdisk/book/redo02.log NO 2 1 726 52428800 512 1 YES INACTIVE 13277630208 2017-11-09 09:54:47 13277632611 2017-11-09 10:18:14 3 ONLINE /mnt/ramdisk/book/redo03.log NO 3 1 727 52428800 512 1 YES INACTIVE 13277632611 2017-11-09 10:18:14 13277659048 2017-11-09 16:18:09 4 STANDBY /mnt/ramdisk/book/redostb01.log NO 5 STANDBY /mnt/ramdisk/book/redostb02.log NO 6 STANDBY /mnt/ramdisk/book/redostb03.log NO 7 STANDBY /mnt/ramdisk/book/redostb04.log NO7 rows selected.$ mv /mnt/ramdisk/book/redo01.log /mnt/ramdisk/book/redo01.log_xxx--//这样避免找到redo文件.或者假象redo01.log文件损坏了.SYS@book> shutdown abort ;ORACLE instance shut down.SYS@book> startup mount pfile='/tmp/init@.ora'ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> @ &r/hide allow_r%corrupt%NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE--------------------------- ------------------------------------------------ ------------- ------------- ------------_allow_read_only_corruption allow read-only open even if database is corrupt FALSE TRUE TRUE_allow_resetlogs_corruption allow resetlogs even if it will cause corruption FALSE TRUE TRUESYS@book> alter database open read only;alter database open read only*ERROR at line 1:ORA-16005: database requires recovery$ oerr ora 1600516005, 00000, "database requires recovery"// *Cause: The database requires recovery, and therefore cannot be opened for// read-only access by this instance.// *Action: Perform the necessary recovery and reopen for read-only access.//--//视乎与_allow_resetlogs_corruption无关,取消*._allow_resetlogs_corruption=true设置,重来..SYS@book> shutdown abort ;ORACLE instance shut down.SYS@book> startup mount pfile='/tmp/init@.ora'ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> @ &r/hide allow_r%corrupt%old 10: and lower(a.ksppinm) like lower('%&1%')new 10: and lower(a.ksppinm) like lower('%allow_r%corrupt%%')NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE--------------------------- ------------------------------------------------ ------------- ------------- -------------_allow_read_only_corruption allow read-only open even if database is corrupt FALSE TRUE TRUE_allow_resetlogs_corruption allow resetlogs even if it will cause corruption TRUE FALSE FALSESYS@book> recover database until cancel;ORA-00279: change 13277663682 generated at 11/10/2017 09:14:12 needed for thread 1ORA-00289: suggestion : /u01/app/oracle/archivelog/book/1_728_896605872.dbfORA-00280: change 13277663682 for thread 1 is in sequence #728Specify log: {<RET>=suggested | filename | AUTO | CANCEL}autoORA-00308: cannot open archived log '/u01/app/oracle/archivelog/book/1_728_896605872.dbf'ORA-27037: unable to obtain file statusLinux-x86_64 Error: 2: No such file or directoryAdditional information: 3ORA-00308: cannot open archived log '/u01/app/oracle/archivelog/book/1_728_896605872.dbf'ORA-27037: unable to obtain file statusLinux-x86_64 Error: 2: No such file or directoryAdditional information: 3ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error belowORA-01194: file 1 needs more recovery to be consistentORA-01110: data file 1: '/mnt/ramdisk/book/system01.dbf'SYS@book> alter database open read only;alter database open read only*ERROR at line 1:ORA-16005: database requires recovery--//依旧不行.失望!!4.看看正常关闭数据库丢失某个redo的情况呢?$ mv /mnt/ramdisk/book/redo01.log_xxx /mnt/ramdisk/book/redo01.log--//先恢复到正常状态.SYS@book> shutdown abort ;ORACLE instance shut down.SYS@book> startup mount ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> @ &r/hide allow_r%corrupt%NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE--------------------------- ------------------------------------------------ ------------- ------------- ------------_allow_read_only_corruption allow read-only open even if database is corrupt FALSE TRUE TRUE_allow_resetlogs_corruption allow resetlogs even if it will cause corruption TRUE FALSE FALSESYS@book> recover database until cancel;ORA-00279: change 13277663682 generated at 11/10/2017 09:14:12 needed for thread 1ORA-00289: suggestion : /u01/app/oracle/archivelog/book/1_728_896605872.dbfORA-00280: change 13277663682 for thread 1 is in sequence #728Specify log: {<RET>=suggested | filename | AUTO | CANCEL}/mnt/ramdisk/book/redo01.logLog applied.Media recovery complete.SYS@book> alter database open ;alter database open*ERROR at line 1:ORA-01589: must use RESETLOGS or NORESETLOGS option for database openSYS@book> alter database open NORESETLOGS;Database altered.--//这种情况下是可以NORESETLOGS打开的,因为redo文件设置回来了.SYS@book> select open_mode from v$database ;OPEN_MODE-----------READ WRITESYS@book> shutdown immediate ;Database closed.Database dismounted.ORACLE instance shut down.SYS@book> startup mount pfile='/tmp/init@.ora'ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> @ &r/logfileGROUP# STATUS TYPE MEMBER IS_ GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME------ ------ ---------- -------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ ------------------- 1 ONLINE /mnt/ramdisk/book/redo01.log NO 1 1 728 52428800 512 1 YES INACTIVE 13277659048 2017-11-09 16:18:09 13277684336 2017-11-10 09:54:02 2 ONLINE /mnt/ramdisk/book/redo02.log NO 2 1 729 52428800 512 1 NO CURRENT 13277684336 2017-11-10 09:54:02 2.814750E+14 3 ONLINE /mnt/ramdisk/book/redo03.log NO 3 1 727 52428800 512 1 YES INACTIVE 13277632611 2017-11-09 10:18:14 13277659048 2017-11-09 16:18:09 4 STANDBY /mnt/ramdisk/book/redostb01.log NO 5 STANDBY /mnt/ramdisk/book/redostb02.log NO 6 STANDBY /mnt/ramdisk/book/redostb03.log NO 7 STANDBY /mnt/ramdisk/book/redostb04.log NO7 rows selected.--//当前是/mnt/ramdisk/book/redo02.log.$ mv /mnt/ramdisk/book/redo02.log /mnt/ramdisk/book/redo02.log_xxxSYS@book> alter database open read only ;Database altered.SYS@book> @ &r/hide allow_r%corrupt%NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE--------------------------- ------------------------------------------------ ------------- ------------- ------------_allow_read_only_corruption allow read-only open even if database is corrupt FALSE TRUE TRUE_allow_resetlogs_corruption allow resetlogs even if it will cause corruption TRUE FALSE FALSE--//^_^,这个参数意义不大,要在正常关闭的情况下,redo文件损坏的情况下,可以使用它打开数据库.5.看看使用正常参数启动情况如何?SYS@book> shutdown immediate ;Database closed.Database dismounted.ORACLE instance shut down.SYS@book> startupORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.ORA-03113: end-of-file on communication channelProcess ID: 18301Session ID: 274 Serial number: 3--//因为/mnt/ramdisk/book/redo02.log文件无法找到,启动失败.修改回来:$ mv /mnt/ramdisk/book/redo02.log_xxx /mnt/ramdisk/book/redo02.logSYS@book> startupORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.Database opened.SYS@book> @ &r/hide allow_r%corrupt%old 10: and lower(a.ksppinm) like lower('%&1%')new 10: and lower(a.ksppinm) like lower('%allow_r%corrupt%%')NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE--------------------------- ------------------------------------------------ ------------- ------------- ------------_allow_read_only_corruption allow read-only open even if database is corrupt TRUE FALSE FALSE_allow_resetlogs_corruption allow resetlogs even if it will cause corruption TRUE FALSE FALSE总结:1._allow_read_only_corruption参数意义不大,要在正常关闭的情况下,某个redo文件不存在或者损坏的情况下临时open read only打开.2.一旦数据库文件头与控制文件当前scn不一致,需要恢复是无法使用它,read only打开的,怪不得很少见人提到这个参数.--//补充测试redo损坏不是current的情况.SYS@book> shutdown immediate ;Database closed.Database dismounted.ORACLE instance shut down.SYS@book> startup mount pfile='/tmp/init@.ora'ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> @ &r/logfileGROUP# STATUS TYPE MEMBER IS_ GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME------ ---------- ---------- ------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ ------------------- 1 ONLINE /mnt/ramdisk/book/redo01.log NO 1 1 728 52428800 512 1 YES INACTIVE 13277659048 2017-11-09 16:18:09 13277684336 2017-11-10 09:54:02 2 ONLINE /mnt/ramdisk/book/redo02.log NO 2 1 729 52428800 512 1 NO CURRENT 13277684336 2017-11-10 09:54:02 2.814750E+14 3 ONLINE /mnt/ramdisk/book/redo03.log NO 3 1 727 52428800 512 1 YES INACTIVE 13277632611 2017-11-09 10:18:14 13277659048 2017-11-09 16:18:09 4 STANDBY /mnt/ramdisk/book/redostb01.log NO 5 STANDBY /mnt/ramdisk/book/redostb02.log NO 6 STANDBY /mnt/ramdisk/book/redostb03.log NO 7 STANDBY /mnt/ramdisk/book/redostb04.log NO7 rows selected.$ mv /mnt/ramdisk/book/redo03.log /mnt/ramdisk/book/redo03.log_xxxSYS@book> alter database open ;alter database open*ERROR at line 1:ORA-03113: end-of-file on communication channelProcess ID: 18497Session ID: 274 Serial number: 3--//无法打开数据库.SYS@book> startup mount pfile='/tmp/init@.ora'ORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.SYS@book> alter database open read only ;Database altered.--//还原现场:SYS@book> shutdown immediate ;Database closed.Database dismounted.ORACLE instance shut down.$ mv /mnt/ramdisk/book/redo03.log_xxx /mnt/ramdisk/book/redo03.logSYS@book> startupORACLE instance started.Total System Global Area 634732544 bytesFixed Size 2255792 bytesVariable Size 197133392 bytesDatabase Buffers 427819008 bytesRedo Buffers 7524352 bytesDatabase mounted.Database opened.