redo被删导致的各种问题处理12c

背景:某现场(oracle 12.2)所有redo文件(包括current、active等)被误删(redo的后缀被写成了.log)

1、恢复redo

startup mount

set lines 400 pages 9999

col MEMBER for a50

select v1.status, v1.group#, member, sequence#, first_change# from v$standby_log v1, v$logfile v2 where v1.group# = v2.group#;

image.png

alter database clear unarchived logfile group 1;

alter database clear unarchived logfile group 2;

alter database clear unarchived logfile group 3;

2、保证数据库能启动

设置scn激增:--event 10015已经无法实现scn激增,12.2可以使用event 21307096 来实现scn激增,level1为增加100万,level 3增加300万

show parameter event

备份spfile:create pfile from spfile;

alter system set event="21307096 trace name context forever, level 3" scope=spfile;

设置忽略一致性问题,强制打开数据库

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

并将undo_management设为manual,redo损坏可能导致undo段有问题

alter system set undo_management=manual scope=spfile;

shutdown immediate

startup mount

alter database open resetlogs;

此时数据库报ora-00600 kcbzib_kcrsds_1错,且数据库自动down,需要重建控制文件,

startup mount

alter database backup controlfile to trace;

oradebug setmypid

oradebug tracefile_name

shutdown immediate

startup nomount

按照trace创建控制文件

CREATE CONTROLFILE REUSE DATABASE  ...

select member from v$logfile;

recover database using backup controlfile until cancel; --使用上述查询的某个redo文件

alter database open resetlogs;

3、undo新建

create undo tablespace undotbs2 *** --新建undo表空间

shutdown immediate

将pfile中的undo_tablespace=undotbs2

create spfile from pfile;

startup mount

show parameter undo

alter database open;

drop tablespace undotbs1 including contents and datafiles;

 

4、遗留问题处理

根据业务人员反馈,有个sql无法正常执行,报错如下

image.png

ora-00600 qosdDirRead: dircnt mismatch

搜了下mos,貌似是12.1的一个bug,在12.2中已经被修复,还有个文档

http://blog.itpub.net/28572479/viewspace-2683635/ 提SR解决的,但是这里通过另一种方法解决

经测试发现,库能正常写,只有在涉及某张表时会出现这个mismatch错误

准备重建此表恢复,但由于现场没有备份,数据泵也无法导出,只能尝试使用odu恢复此表

odu具体配置可参考https://www.yuque.com/sipc/database/thteny或者https://mp.weixin.qq.com/s/MByTaVdZltpP-R60VmoHvA

但此次unload table ossdb.IM_SERVICENO_SAP auto 时,抽取0行数据

image.png

但跟业务确认此表并不是空表,所以根据dba_objects中的DATA_OBJECT_ID(此情景下DATA_OBJECT_ID与OBJECT_ID不同,应该是表ddl过恢复

unload table ossdb.IM_SERVICENO_SAP object 144164

成功抽取出40万数据

 

以下语句得到表的定义:

set lines 400 pages 9999 long 99999;

select dbms_metadata.get_ddl('TABLE','IM_SERVICENO_SAP','OSSDB') from dual;

 

drop table OSSDB.IM_SERVICENO_SAP;

使用sqlldr导入40万条数据,查询正常不再报错

 

5、建议:redo的后缀取名为.dbf以防被误删

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值