restore database误操作恢复

接到朋友恢复请求,由于客户的误操作(生产库遇到问题,无法正常open,在没有确认备份和归档日志完全正常的情况下,直接restore database操作),导致原库数据文件被备份中的数据文件还原,而且中间归档丢失,无法一直应用归档把数据文件追到最新.通过Oracle Database Recovery Check脚本check数据库结果如下
datafile-header


这里很明显红色框中数据文件被还原,发现一个可喜的地方,被还原的文件相对都比较小,也就是说相对覆盖的部分可能不会太多.通过alert日志确认数据被rman还原覆盖
restore-datafile

然后继续应用日志恢复
archive-lost

悲剧发生了明显thread 2的sequence 297归档日志发现丢失,进一步发现这个rac(2节点)一共丢失了300个左右的归档日志.到这一步常规方法来说,基本上无解,放弃数据库恢复,因为基于现在的情况客户2014-07-27 07:18:12创建的,目前只是恢复到了2014-10-20 08:26:43日期的数据,而且通过数据库现状判断,数据库主要是写入file 4,也就是users表空间的第一个数据文件中,而该文件已经被还原,强制拉库没有意义.考虑通过bbed修改文件头,跳过相关丢失的归档,继续应用以后的归档,因为跳过的归档太多,基本上不可行(跳过这些丢失的归档之后,后面的归档继续应用会报错).基于这样的情况,抱着一丝丝的希望,rman备份是业务上线之后备份(这样被还原的system里面就有完整的业务数据字典信息).通过对system文件进行分析,确认我们比较幸运,业务数据创建于2014-8月份,而且根据客户的反馈之后基本上没有变更.参考:asm disk header 彻底损坏恢复方法扫描效果比较好,file 4 的觉大部分block均存在
scan-asm

然后通过这些block重组成数据文件然后结合以前的system文件,强制open库,基本上实现客户数据的绝大部分恢复.
export-data

类似案例还有:
asm磁盘组误删除文件恢复
又一例asm格式化文件系统恢复
Oracle 数据文件大小为0kb或者文件丢失恢复
oracle asm disk格式化恢复—格式化为ntfs文件系统
oracle asm disk格式化恢复—格式化为ext4文件系统
alter database create datafile 导致数据文件丢失恢复
分享oracleasm createdisk重新创建asm disk后数据0丢失恢复案例

发表在 非常规恢复 | 标签为 , , , | 评论关闭

oracle 8.1.6因断电无法启动恢复

接到一个oralce 8.1.6的数据库恢复请求,由于断电之后,系统无法正常恢复,通过尝试recover datafile报错如下

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
PL/SQL Release 8.1.6.0.0 - Production
CORE	8.1.6.0.0	Production
TNS for 32-bit Windows: Version 8.1.6.0.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
Tue Oct 16 14:17:01 2018
Media Recovery Datafile: 1
Media Recovery Start
Media Recovery Log 
Recovery of Online Redo Log: Thread 1 Group 1 Seq 146597 Reading mem 0
  Mem# 0 errs 0: D:\ORACLE\ORADATA\ORCL\REDO01.LOG
Tue Oct 16 14:17:02 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA03040.TRC:
ORA-00600: internal error code, arguments: [kcoapl_blkchk], [1], [30547], [6101], [], [], [], []

Tue Oct 16 14:17:03 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA03040.TRC:
ORA-01578: ORACLE data block corrupted (file # 1, block # 30547)
ORA-01110: data file 1: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [kcoapl_blkchk], [1], [30547], [6101], [], [], [], []

Tue Oct 16 14:17:03 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA03040.TRC:
ORA-00314: log 2 of thread 1, expected sequence# 146598 doesn't match 146415
ORA-00312: online log 2 thread 1: 'D:\ORACLE\ORADATA\ORCL\REDO02.LOG'

这里可以获取到两个信息:1)system文件可能有坏块,导致数据库recover的时候报ORA-600 kcoapl_blkchk错误,2)数据库的redo可能异常了,由于8i数据库默认redo 10m,在业务繁忙时候切换较为频繁,而文件系统的cache导致redo信息比较老,而数据文件需要redo比较新,从而无法正常恢复成功。比较明显对于当前这样的情况只能是屏蔽数据一致性,强制拉库

ARC0: media recovery disabled
Tue Oct 16 14:17:39 2018
SMON: enabling cache recovery
Tue Oct 16 14:17:39 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA02256.TRC:
ORA-00600: internal error code, arguments: [2662], [1], [1712082681], [1], [1712107587], [8388610], [], []

Tue Oct 16 14:17:41 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA02256.TRC:
ORA-00600: internal error code, arguments: [2662], [1], [1712082682], [1], [1712107587], [8388610], [], []
ORA-00600: internal error code, arguments: [2662], [1], [1712082681], [1], [1712107587], [8388610], [], []

Tue Oct 16 14:17:43 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA02256.TRC:
ORA-00600: internal error code, arguments: [2662], [1], [1712082682], [1], [1712107587], [8388610], [], []
ORA-00600: internal error code, arguments: [2662], [1], [1712082681], [1], [1712107587], [8388610], [], []

Tue Oct 16 14:17:45 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA02256.TRC:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [2662], [1], [1712082682], [1], [1712107587], [8388610], [], []
ORA-00600: internal error code, arguments: [2662], [1], [1712082681], [1], [1712107587], [8388610], [], []

ORA-600 2662这个错误比较常见,直接推数据库scn,启动库

Tue Oct 16 16:09:11 2018
Errors in file D:\Oracle\admin\orcl\bdump\orclSMON.TRC:
ORA-00600: internal error code, arguments: [4193], [29469], [29477], [], [], [], [], []

Recovery of Online Redo Log: Thread 1 Group 3 Seq 1 Reading mem 0
  Mem# 0 errs 0: D:\ORACLE\ORADATA\ORCL\REDO03.LOG
Tue Oct 16 16:09:12 2018
Errors in file D:\Oracle\admin\orcl\bdump\orclSMON.TRC:
ORA-01595: error freeing extent (3) of rollback segment (2))
ORA-00600: internal error code, arguments: [4193], [29469], [29477], [], [], [], [], []

Tue Oct 16 16:09:13 2018
Completed: ALTER DATABASE OPEN
Tue Oct 16 16:12:06 2018
CREATE ROLLBACK SEGMENT nrbs1 TABLESPACE rbs

Tue Oct 16 16:12:06 2018
Errors in file D:\Oracle\admin\orcl\udump\ORA02252.TRC:
ORA-00600: internal error code, arguments: [4194], [79], [38], [], [], [], [], []

错误比较明显ORA-600 4194,而且已经告知是由于rollback segment 2异常,通过屏蔽回滚段,open数据库,删除老回滚段,创建新回滚段(8i无undo自动管理)

SQL> startup
ORACLE instance started.

Total System Global Area 1549432076 bytes
Fixed Size                    70924 bytes
Variable Size             500707328 bytes
Database Buffers         1048576000 bytes
Redo Buffers                  77824 bytes
Database mounted.
Database opened.

SQL> drop rollback segment "RBS1";

Rollback segment dropped.

SQL> drop rollback segment "RBS2";

Rollback segment dropped.

SQL> drop rollback segment "RBS3";

Rollback segment dropped.

SQL> drop rollback segment "RBS4";

Rollback segment dropped.

SQL> drop rollback segment "RBS5";

Rollback segment dropped.

SQL> drop rollback segment "RBS6";

Rollback segment dropped.

SQL> CREATE ROLLBACK SEGMENT nrbs1 TABLESPACE rbs;

Rollback segment created.

SQL> CREATE ROLLBACK SEGMENT nrbs2 TABLESPACE rbs;

Rollback segment created.

SQL> CREATE ROLLBACK SEGMENT nrbs3 TABLESPACE rbs;

Rollback segment created.

SQL> CREATE ROLLBACK SEGMENT nrbs4 TABLESPACE rbs;

Rollback segment created.

SQL> CREATE ROLLBACK SEGMENT nrbs5 TABLESPACE rbs;

Rollback segment created.

SQL> CREATE ROLLBACK SEGMENT nrbs6 TABLESPACE rbs;

Rollback segment created.

SQL> CREATE ROLLBACK SEGMENT nrbs7 TABLESPACE rbs;

Rollback segment created.

客户安排导出导入,至此该库恢复完成

发表在 非常规恢复 | 标签为 , , , | 评论关闭

ORA-00600 dbkif_find_next_record_1

数据库版本信息

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE	11.2.0.1.0	Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

数据库启动报ORA-00600 dbkif_find_next_record_1错误

alter database open
Beginning crash recovery of 1 threads
 parallel recovery started with 3 processes
Started redo scan
Completed redo scan
 read 133 KB redo, 72 data blocks need recovery
Started redo application at
 Thread 1: logseq 49070, block 14720
Recovery of Online Redo Log: Thread 1 Group 2 Seq 49070 Reading mem 0
  Mem# 0: D:\APP\xff\ORADATA\ORCL\REDO02.LOG
Completed redo application of 0.09MB
Errors in file d:\app\xff\diag\rdbms\orcl\orcl\trace\orcl_ora_2340.trc  (incident=477756):
ORA-00600: ??????, ??: [dbkif_find_next_record_1], [], [], [], [], [], [], [], [], [], [], []
Incident details in: d:\app\xff\diag\rdbms\orcl\orcl\incident\incdir_477756\orcl_ora_2340_i477756.trc
Wed Sep 26 10:52:07 2018
Trace dumping is performing id=[cdmp_20180926105207]
Wed Sep 26 10:52:08 2018
Aborting crash recovery due to error 600
Errors in file d:\app\xff\diag\rdbms\orcl\orcl\trace\orcl_ora_2340.trc:
ORA-00600: ??????, ??: [dbkif_find_next_record_1], [], [], [], [], [], [], [], [], [], [], []
Errors in file d:\app\xff\diag\rdbms\orcl\orcl\trace\orcl_ora_2340.trc:
ORA-00600: ??????, ??: [dbkif_find_next_record_1], [], [], [], [], [], [], [], [], [], [], []
ORA-600 signalled during: alter database open...

这里比较明显,数据库是在做实例恢复的时候遭遇到ORA-600 dbkif_find_next_record_1错误,无法正常应用日志导致该错误,具体原因由于:the NAB and finds it is less than the block# from the on-disk-RBA recorded,对于这种问题,通过人工修改next available block# in the Online Redo Log的相关记录,即可正常open数据库,而且理论上数据0丢失

发表在 ORA-xxxxx, Oracle备份恢复 | 标签为 , | 评论关闭