本文共 2165 字,大约阅读时间需要 7 分钟。
背景:某现场(oracle 12.2)所有redo文件(包括current、active等)被误删(redo的后缀被写成了.log)
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#;
alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 2;
alter database clear unarchived logfile group 3;
设置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;
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;
根据业务人员反馈,有个sql无法正常执行,报错如下
ora-00600 qosdDirRead: dircnt mismatch
搜了下mos,貌似是12.1的一个bug,在12.2中已经被修复,还有个文档
提SR解决的,但是这里通过另一种方法解决
经测试发现,库能正常写,只有在涉及某张表时会出现这个mismatch错误
准备重建此表恢复,但由于现场没有备份,数据泵也无法导出,只能尝试使用odu恢复此表
odu具体配置可参考或者
但此次unload table ossdb.IM_SERVICENO_SAP auto 时,抽取0行数据
但跟业务确认此表并不是空表,所以根据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万条数据,查询正常不再报错
转载地址:http://llwmf.baihongyu.com/