shutdown abort模式丢失redo,使用隐含參数启库

本文记录了一次Oracle数据库因Redo Log损坏导致无法正常启动的问题及解决过程。通过设置隐含参数_allow_resetlogs_corruption,成功绕过损坏的日志文件并重新打开数据库。
shutdown abort模式
丢失redo log
无法open数据库
通过告警报错ORA-00354: corrupt redo log block header 从该错误能够看出当前日志的redo block的header出现故障,导致oracle无法读取redo进行恢复。通过下面检查发现数据库文件头都一致。没有须要恢复的文件,可是因为数据库是非正常关闭。last_change scn没有被写入,数据库推断须要恢复。则读取对应的redo log group 3。可是此时该文件已经损坏。


SYS@orcl11g>alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery


SYS@orcl11g>recover database;
ORA-00283: recovery session canceled due to errors
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/opt/oracle/oradata/orcl11g/redo03.log'
ORA-27046: file size is not a multiple of logical block size
Additional information: 1


SYS@orcl11g>recover database until cancel;
ORA-00279: change 5168496 generated at 10/29/2014 23:48:23 needed for thread 1
ORA-00289: suggestion : /opt/oracle/flash_recovery_area/ORCL11G/archivelog/2014_10_29/o1_mf_1_159_%u_.arc
ORA-00280: change 5168496 for thread 1 is in sequence #159


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log '/opt/oracle/flash_recovery_area/ORCL11G/archivelog/2014_10_29/o1_mf_1_159_%u_.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


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/orcl11g/system01.dbf'



增加下面隐含參数:
SYS@orcl11g>show parameter _allow
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
_allow_error_simulation              boolean                TRUE
_allow_resetlogs_corruption          boolean                TRUE

这时候发现数据库时能够打开的
SYS@orcl11g>
SYS@orcl11g>
SYS@orcl11g>alter database open resetlogs;

Database altered.

SYS@orcl11g>




发现日志文件已经被重建:
SYS@orcl11g>select group#,status from v$log;
    GROUP# STATUS
---------- ------------------------------------------------------------
         1 CURRENT
         2 UNUSED
         3 UNUSED

SYS@orcl11g>alter system switch logfile;

System altered.

SYS@orcl11g>/

System altered.

SYS@orcl11g>/

System altered.


SYS@orcl11g>select group#,status from v$log;
    GROUP# STATUS
---------- ------------------------------------------------------------
         1 CURRENT
         2 INACTIVE
         3 ACTIVE



<think>好的,我现在需要回答用户关于如何安全使用shutdown abort命令进行Oracle数据库紧急关闭的问题。首先,我得回顾一下用户提供的引用内容,确保回答准确。 根据引用[1],shutdown abort是一种终止方式关闭数据库的方法,会立即结束实例,不进行数据写入。引用[3]提到,使用abort选项时,Oracle不会将SGA的数据写入文件,重新打开时需要实例恢复。引用[4]则讨论了shutdown abort的风险和解决方案,强调这是极端措施,需要谨慎使用。 用户想知道如何“安全地”使用这个命令,虽然shutdown abort本身并不安全,但可能是在紧急情况下必须的。所以,我应该先说明这个命令的风险,然后给出步骤,同时建议后续恢复措施。 需要分步骤说明操作过程,可能包括连接数据库、执行命令、后续检查等。同时,必须强调只有在必要时使用,并确保有备份或恢复计划。此外,引用相关的内容来支持说明,比如引用[3]提到的实例恢复过程,以及引用[4]中的潜在风险。 可能还需要比较其他关闭方式,如shutdown immediate,帮助用户理解为什么abort是最后手段。然后,确保回答结构清晰,步骤明确,并生成相关问题。</think>### 如何安全使用 `shutdown abort` 进行Oracle数据库紧急关闭 #### 1. **理解 `shutdown abort` 的风险** `shutdown abort` 是Oracle数据库最直接的关闭方式,但会立即终止所有会话和进程,**不会执行数据缓冲区的写入操作**,可能导致数据丢失数据库状态不一致[^3]。因此,它仅适用于以下极端场景: - 数据库无响应且无法通过正常方式关闭 - 服务器即将断电或硬件故障等紧急情况 - 其他关闭方式(如 `shutdown immediate`)超时失败 #### 2. **操作步骤** ```sql -- 步骤1:以sysdba身份登录数据库 sqlplus / as sysdba -- 步骤2:执行紧急关闭命令 shutdown abort; -- 步骤3:关闭后重新动并检查状态 startup ``` 执行后,数据库会直接关闭实例,**不进行数据文件和日志文件的同步**[^3]。 #### 3. **关闭后的必要操作** 1. **强制动并恢复** 重数据库时,Oracle会自动触发**实例恢复**(通过重做日志前滚提交事务、回滚未提交事务): ```sql startup ``` 2. **检查告警日志** 查看 `alert_<SID>.log`,确认恢复是否成功: ```bash tail -f $ORACLE_BASE/diag/rdbms/<dbname>/<SID>/trace/alert_<SID>.log ``` 3. **验证数据一致性** 使用工具检查关键表或执行导出测试: ```sql analyze table <表名> validate structure cascade; ``` #### 4. **降低风险的替代方案** 优先尝试更安全的关闭方式: - **`shutdown immediate`** 等待活动事务回滚后关闭(推荐首选)[^2] - **`shutdown transactional`** 等待所有事务提交后关闭(适合低负载环境) #### 5. **预防措施** - **定期备份**:确保在紧急关闭前有可用的冷备份或RMAN备份[^4] - **监控会话**:通过 `v$session` 提前终止阻塞进程,避免强制关闭 - **配置闪回**:用闪回数据库功能,快速回退到关闭前的状态 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值