oracle日志文件损坏时,用隐含参数启动:_allow_resetlogs_corruption

本文探讨了Oracle数据库隐含参数'_allow_resetlogs_corruption'的使用及其对数据库的影响,包括如何通过该参数强制启动数据库并在Open过程中跳过一致性检查,以及后续的恢复流程和可能遇到的问题。主要内容涵盖了隐含参数的背景、使用限制、测试环境的应用、日志文件损坏的案例分析、使用此参数后的恢复操作和后续数据库Open过程中的注意事项。

Oracle隐含参数:_allow_resetlogs_corruption

提示:Oracle的隐含参数只应该在测试环境或者在Oracle Support的支持下使用。

 

在使用_disable_logging进一步的测试中,试图通过switch logfile进行日志切换,结果重起居然报出日志文件损坏。

 

SQL> startup
ORACLE instance started.

Total System Global Area   97588504 bytes
Fixed Size                   451864 bytes
Variable Size              33554432 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select count(*) from t;
select count(*) from t
                     *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> create table t as select * from dba_users;

Table created.

SQL> select count(*) from t;

  COUNT(*)
----------
        12

 

试图通过switch logfile触发检查点:

 

SQL> alter system switch logfile;

System altered.


SQL> insert into t select * from t;

12 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from t;

  COUNT(*)
----------
        24

 

日志文件损坏(未测试是否可以重复出现):

 

SQL> startup force;
ORACLE instance started.

Total System Global Area   97588504 bytes
Fixed Size                   451864 bytes
Variable Size              33554432 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.
ORA-00354: corrupt redo log block header
ORA-00353: log corruption near block 3 change 897612314 time 10/19/2005 14:19:34
ORA-00312: online log 3 thread 1: '/opt/oracle/oradata/conner/redo03.log'

 

损坏的是active的日志文件:

 

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1          1        159   10485760          1 NO  INACTIVE             897592312 19-OCT-05
         2          1        158   10485760          1 NO  INACTIVE             897572310 19-OCT-05
         3          1        160   10485760          1 NO  ACTIVE               897612314 19-OCT-05
         4          1        161    1048576          1 NO  CURRENT              897612440 19-OCT-05

 

只好使用另外一个隐含参数_allow_resetlogs_corruption强制启动数据库,设置此参数之后,在数据库Open过程中,Oracle会跳过某些一致性检查,从而使数据库可能跳过不一致状态,Open打开:

 

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;

System altered.

SQL> shutdown immediate;
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area   97588504 bytes
Fixed Size                   451864 bytes
Variable Size              33554432 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 897612315 generated at 10/19/2005 16:54:18 needed for thread 1
ORA-00289: suggestion : /opt/oracle/oradata/conner/archive/1_160.dbf
ORA-00280: change 897612315 for thread 1 is in sequence #160


Specify log: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/opt/oracle/oradata/conner/system01.dbf'


ORA-01112: media recovery not started


SQL> alter database open resetlogs;

Database altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area   97588504 bytes
Fixed Size                   451864 bytes
Variable Size              33554432 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.

 

 

幸运的时候数据库就可以成功Open,如果不幸可能会遇到一系列的Ora-600错误(最常见的是2662错误)此时就需要使用多种手段继续进行调整恢复。 
如果注意观察alert日志,我们可能会发现类似以下日志:

 

 

Fri Jun 10 16:30:25 2005
alter database open resetlogs
Fri Jun 10 16:30:25 2005
RESETLOGS is being done without consistancy checks. This may result
in a corrupted database. The database should be recreated.
RESETLOGS after incomplete recovery UNTIL CHANGE 240677200
Resetting resetlogs activation ID 3171937922 (0xbd0fee82)

 

 

Oracle告诉我们,强制resetlogs跳过了一致性检查,可能导致数据库损坏,数据库应当重建。
不一致恢复最后恢复到的Change号是:240677200

通常使用此方法Open数据库之后,应该立即通过导出、导入重建数据库

<think>我们正在讨论Oracle数据库中的隐藏参数`_allow_resetlogs_corruption`。根据引用内容,我们知道:-引用[1]和引用[2]都提到了将该参数设置回默认值false的操作。-引用[3]提到在恢复设置该参数为true,但并没有直接说明默认值。因此,我们可以得出结论:`_allow_resetlogs_corruption`的默认值是`false`。回答用户问题:Oracle的隐藏参数`_allow_resetlogs_corruption`的默认值为`false`。用户可能还想知道:1.这个参数的作用是什么?2.在什么情况下需要修改这个参数?3.修改这个参数有什么风险?根据引用内容,这个参数通常用于数据库恢复过程中允许在存在损坏的情况下强制打开数据库(通过重置日志)。但这是非常规操作,可能会导致数据不一致,因此只有在紧急情况下才使用,并且在成功打开数据库后应该立即将其重置为默认值(false)。为了提供更全面的回答,我们可以解释该参数的用途和注意事项。生成相关问题:1.`_allow_resetlogs_corruption`参数的具体作用是什么?2.在哪些场景下需要设置`_allow_resetlogs_corruption`为true?3.修改`_allow_resetlogs_corruption`参数有哪些风险?4.除了`_allow_resetlogs_corruption`,还有哪些类似的隐藏参数用于数据库恢复?现在,我们组织回答:</think>### Oracle `_allow_resetlogs_corruption` 参数详解 #### 1. **默认值** `_allow_resetlogs_corruption` 是 Oracle 的隐藏参数(以 `_` 开头),其**默认值为 `false`**。 此设置表明 Oracle 默认禁止在日志损坏强制打开数据库,以保障数据一致性[^1][^2]。 #### 2. **参数作用** - **功能**:允许在 Redo 日志或控制文件损坏,强制使用 `RESETLOGS` 方式打开数据库。 - **使用场景**:仅用于灾难恢复(如无法通过常规恢复解决的数据文件/日志损坏),需配合 `RECOVER DATABASE UNTIL CANCEL` 使用[^3]。 - **风险**: 强制打开可能导致数据逻辑损坏、事务丢失或字典不一致,需立即备份并重建数据库[^3]。 #### 3. **配置示例** ```sql -- 临启用(需重启) ALTER SYSTEM SET "_allow_resetlogs_corruption"=true SCOPE=spfile; -- 恢复默认值(需重启) ALTER SYSTEM RESET "_allow_resetlogs_corruption" SCOPE=spfile; ``` > **注意**:修改后必须重启数据库生效(`SCOPE=spfile`)[^1][^2]。 #### 4. **关键注意事项** 1. **Oracle 官方立场**: 隐藏参数不受官方支持,仅在 Oracle Support 指导下使用。 2. **操作流程**: 启用参数 → 尝试恢复 → 强制打开 → **立即重置为默认值** → 全库导出重建[^1][^2]。 3. **替代方案**: 优先使用 `RMAN` 块修复、闪回或数据泵导出,避免触发此参数。 --- ### 相关问题 1. `_allow_resetlogs_corruption` 和 `_allow_terminal_recovery_corruption` 有何区别? 2. 使用 `RESETLOGS` 强制打开数据库后,如何安全迁移数据? 3. 哪些场景下必须通过隐藏参数恢复数据库?常规恢复流程是什么? 4. 如何监控 Oracle 隐藏参数的修改记录? [^1]:参数修改回默认值 `false` 的操作示例 [^2]: 重置隐藏参数到默认值的标准语法 [^3]: 灾难恢复中关键隐藏参数的作用说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值