标签云
asm恢复 bbed bootstrap$ dul kcbzib_kcrsds_1 kccpb_sanity_check_2 kcratr_nab_less_than_odr MySQL恢复 obet ORA-00312 ORA-00704 ORA-00742 ORA-01110 ORA-01200 ORA-01555 ORA-01578 ORA-01595 ORA-600 2662 ORA-600 2663 ORA-600 3020 ORA-600 4000 ORA-600 4137 ORA-600 4193 ORA-600 4194 ORA-600 16703 ORA-600 kcbzib_kcrsds_1 ORA-600 KCLCHKBLK_4 ORA-600 kcratr_nab_less_than_odr ORA-15042 ORA-15196 ORACLE 12C oracle dul ORACLE PATCH Oracle Recovery Tools oracle加密恢复 oracle勒索 oracle勒索恢复 oracle异常恢复 ORACLE恢复 Oracle 恢复 ORACLE数据库恢复 oracle碎片 OSD-04016 YOUR FILES ARE ENCRYPTED 比特币加密文章分类
- MongoDB (1)
- MongoDB恢复 (1)
- Others (2)
- 中间件 (2)
- WebLogic (2)
- 操作系统 (112)
- 数据库 (1,883)
- DB2 (22)
- MySQL (82)
- Oracle (1,708)
- Data Guard (53)
- EXADATA (8)
- GoldenGate (24)
- ORA-xxxxx (168)
- ORACLE 12C (72)
- ORACLE 18C (6)
- ORACLE 19C (15)
- ORACLE 21C (3)
- Oracle 23ai (8)
- Oracle ASM (72)
- Oracle Bug (8)
- Oracle RAC (56)
- Oracle 安全 (6)
- Oracle 开发 (28)
- Oracle 监听 (29)
- Oracle备份恢复 (662)
- Oracle安装升级 (108)
- Oracle性能优化 (62)
- 专题索引 (5)
- 勒索恢复 (91)
- PostgreSQL (37)
- pdu工具 (7)
- PostgreSQL恢复 (13)
- SQL Server (34)
- SQL Server恢复 (14)
- TimesTen (7)
- 达梦数据库 (5)
- 达梦恢复 (3)
- 生活娱乐 (2)
- 至理名言 (11)
- 虚拟化 (2)
- VMware (2)
- 软件开发 (51)
- Asp.Net (9)
- JavaScript (12)
- PHP (2)
- 小工具 (34)
- MongoDB (1)
-
最近发表
- aix平台Oracle数据库由于断电无法启动故障处理
- 断电引起ORA-600 3005故障处理
- 记录一次云存储资源到期之后引起的数据库恢复
- Firebird 损坏数据库数据抢救工具—firebirdext
- Oracle 19c 202610补丁(RUs+OJVM)-19.33
- 由于con$.con#值达到极限,触发数据库增加约束报ORA-600 12807错误
- MongoDB 离线提取工具—mongoext
- .bres勒索病毒加密数据库dmp文件可恢复
- ORA-600 krsm_mrp_rebuild_lf_list.lno_mismatch
- 记录一次0丢失的ORA-00354: 损坏重做日志块标头故障恢复
- 不当数据库恢复操作导致一个月数据丢失
- obet快速修复oracle 位图损坏块
- 不太常见的10.2.0.1的oracle redo损坏恢复
- obet forcecopy功能抢救硬件故障中的数据文件
- kcratr_nab_less_than_odr和system坏块故障处理
- 通过obet 恢复system坏块,打开数据库
- obet dbv功能完整说明
- 分享一例运行在aix上的sap系统数据库恢复过程
- OBET-Oracle Block Editor Tool使用说明
- 几乎动用了所有手段的Oracle故障恢复
分类目录归档:数据库
.[xueyuanjie@onionmail.org].AIR勒索加密数据库恢复
一家医院运行在win上点电子病例的Oracle数据库被加密成扩展名为:.[xueyuanjie@onionmail.org].AIR

通过obet工具对损坏文件的数据块进行检测(obet实现对数据文件坏块检测功能)

通过分析,该数据库被加密破坏了前面32个block(其中第一个为block 0,正在涉及数据文件中有效的block为31个),这个是oracle 11g版本,业务数据从block 128开始存储(被损坏的前面31个主要是文件头和数据文件中数据块分配的位图信息,不涉及业务数据),因此对于这种情况直接使用OraFHR工具进行对文件头重构(Oracle数据库被勒索加密一键open工具–OraFHR)

然后重建ctl并打开库(这些脚本orafhr会自动生成)
SQL> startup nomount pfile='d:/pfile.txt'; ORACLE 例程已经启动。 Total System Global Area 4275781632 bytes Fixed Size 2288080 bytes Variable Size 939525680 bytes Database Buffers 3321888768 bytes Redo Buffers 12079104 bytes SQL> @rectl 控制文件已创建。 SQL> SQL> alter database open resetlogs; 数据库已更改。 SQL> create tablespace expdptbs datafile 'H:\TEMP\oradata\emr\expdptbs01.dbf' size 32M autoextend on; 表空间已创建。
然后使用expdp导出数据,完成本次恢复任务
oracleasm createdisk破坏的acfs文件系统恢复
接到一个朋友请求,客户12.2.0.1的asm被执行了oracleasm createdisk,把之前的asmdisk给重建了

根据以前恢复经验,这个故障会把前面1M的数据全部重置
删除asmlib磁盘导致磁盘组故障恢复
分享oracleasm createdisk重新创建asm disk后数据0丢失恢复案例
这个客户有点特殊,他的asm 磁盘组中跑的不是oracle 数据库而是直接跑acfs,然后再里面跑mysql数据库,也就是利用grid实现mysql的底层高可用,acfs实现共享挂载(我的理解一次也只能启动一个节点的mysql),现在asm disk的头被oracleasm createdisk重置之后,导致asm磁盘组无法mount,从而acfs也无法mount.对于这个故障,让现场提供被破坏磁盘使用dd前面100M 发给我进行分析
使用kfed读取asm disk磁盘头信息
H:\TEMP\0423\0423>kfed read data3_100m kfbh.endian: 0 ; 0x000: 0x00 kfbh.hard: 0 ; 0x001: 0x00 kfbh.type: 0 ; 0x002: KFBTYP_INVALID kfbh.datfmt: 0 ; 0x003: 0x00 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 0 ; 0x008: file=0 kfbh.check: 1096040823 ; 0x00c: 0x41544177 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 005B78600 00000000 00000000 00000000 41544177 [............wATA] 005B78610 00000000 00000000 00000000 00000000 [................] 005B78620 4C43524F 4B534944 41544144 00000033 [ORCLDISKDATA3...] 005B78630 00000000 00000000 00000000 00000000 [................] Repeat 252 times KFED-00322: Invalid content encountered during block traversal: [kfbtTraverseBlock][Invalid OSM block type][][0]
这里可以发现比较明显的asmlib的标记信息ORCLDISKDATA3,证明该磁盘被oracleasm createdisk重建之后,没有再进行kfed修复或者重建新磁盘组
SUCCESS: CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/oracleasm/disks/DATA1' SIZE 1430507M DISK '/dev/oracleasm/disks/DATA2' SIZE 1430507M DISK '/dev/oracleasm/disks/DATA3' SIZE 1430507M ATTRIBUTE 'compatible.asm'='12.2.0.1','compatible.advm'='12.2.0.1','au_size'='4M' SUCCESS: CREATE DISKGROUP CRS EXTERNAL REDUNDANCY DISK '/dev/oracleasm/disks/CRS' SIZE 190732M ATTRIBUTE 'compatible.asm'='12.2.0.1','compatible.advm'='12.2.0.1','au_size'='4M' /* ASMCA */
通过alert日志中磁盘组的创建语句,确认该磁组是ausize为4M,这样的情况下,asm的磁盘头备份备份和au备份应该都是好的,直接通过winhex来确认

再次通过kfed来确认相关磁盘头信息
H:\TEMP\0423\0423>kfed read data3_100m aus=4096k blkn=1022 aun=1|grep name kfdhdb.dskname: DATA_0002 ; 0x028: length=9 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: DATA_0002 ; 0x068: length=9 kfdhdb.capname: ; 0x088: length=0 H:\TEMP\0423\0423>kfed read data3_100m aus=4096k blkn=0 aun=11|grep name kfdhdb.dskname: DATA_0002 ; 0x028: length=9 kfdhdb.grpname: DATA ; 0x048: length=4 kfdhdb.fgname: DATA_0002 ; 0x068: length=9 kfdhdb.capname: ; 0x088: length=0
基于上述情况,证明磁盘头和au的备份都还在,而且au的备份是4M,完全包含了被createdisk破坏的1M数据,直接吧这个au给还原回去理论上就可以了,但是很不幸,这样处理之后,crs启动过程依旧无法找到表决盘

通过分析crs盘的情况,发现它的偏移量是错误的

通过分析是由于磁盘分区问题导致
磁盘 /dev/sdc:200.0 GB, 199996997632 字节,390619136 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 1048576 字节 磁盘标签类型:dos 磁盘标识符:0x00000000 设备 Boot Start End Blocks Id System /dev/sdc1 1 390619135 195309567+ ee GPT 磁盘 /dev/sdd:1500.0 GB, 1499996356608 字节,2929680384 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 1048576 字节 磁盘标签类型:gpt Disk identifier: 99F1679E-DC32-4F6A-B85D-D91C87B09775 # Start End Size Type Name 1 2048 2929678335 1.4T Linux LVM
至此这个被oracleasm createdisk的case完美恢复,数据0丢失
先offline数据文件,再resetlogs导致恢复复杂的故障处理
本来是一个简单的数据文件被误删除,然后通过底层恢复出来数据文件,再启动库就可以的事情,结果由于对oracle的不了解和自以为是,直接把丢失的文件不存在的情况下,offline文件,然后尝试resetlogs打开库,并且进行了各种尝试,结果使得问题比较麻烦.
故障之后现象
通过分析alert日志大概的主要错误,大概梳理故障情况
1. 启动数据库报control03.ctl丢失
Fri Apr 17 21:53:03 2026 MMNL started with pid=16, OS id=3613 ORACLE_BASE from environment = /data/oracle Fri Apr 17 21:53:08 2026 alter database mount ORA-00210: cannot open the specified control file ORA-00202: control file: '/data/oracle/oradata/orcl/control03.ctl' ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 ORA-00210: cannot open the specified control file ORA-00202: control file: '/data/oracle/oradata/orcl/control02.ctl' ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 ORA-205 signalled during: alter database mount...
如果只是这个文件丢失(这里还没有看到其他数据文件丢失的报错),本身是一个非常简单的故障,直接修改control_files参数即可
2. 结果当时操作的人直接rectl
Fri Apr 17 21:57:01 2026
Successful mount of redo thread 1, with mount id 1758675116
Completed: CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/data/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/data/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/data/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512
DATAFILE
'/data/oracle/oradata/orcl/system01.dbf',
'/data/oracle/oradata/orcl/sysaux01.dbf',
'/data/oracle/oradata/orcl/undotbs01.dbf',
'/data/oracle/oradata/orcl/users01.dbf'
CHARACTER SET ZHS16GBK
3.然后启动数据库报错
Fri Apr 17 22:02:43 2026 ALTER DATABASE OPEN Beginning crash recovery of 1 threads parallel recovery started with 3 processes Started redo scan Completed redo scan read 39020 KB redo, 0 data blocks need recovery Started redo application at Thread 1: logseq 11590, block 2, scn 137806010 Recovery of Online Redo Log: Thread 1 Group 1 Seq 11590 Reading mem 0 Mem# 0: /data/oracle/oradata/orcl/redo01.log Completed redo application of 0.00MB Completed crash recovery at Thread 1: logseq 11590, block 78042, scn 137831847 0 data blocks read, 0 data blocks written, 39020 redo k-bytes read Fri Apr 17 22:02:44 2026 Thread 1 advanced to log sequence 11591 (thread open) Thread 1 opened at log sequence 11591 Current log# 2 seq# 11591 mem# 0: /data/oracle/oradata/orcl/redo02.log Successful open of redo thread 1 MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set Fri Apr 17 22:02:44 2026 SMON: enabling cache recovery Successfully onlined Undo Tablespace 2. Dictionary check beginning Tablespace 'TEMP' #3 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'ERP_XXXX' #6 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'ERP_AAAA' #7 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'ABCD' #8 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'ERP_BBBB' #9 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'ERP_XXD' #10 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'ERP_12SF' #11 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'XXX14' #12 found in data dictionary, but not in the controlfile. Adding to controlfile. Tablespace 'P_ZY' #13 found in data dictionary, but not in the controlfile. Adding to controlfile. File #5 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00005' in the controlfile. File #6 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00006' in the controlfile. File #7 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00007' in the controlfile. File #8 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00008' in the controlfile. File #9 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00009' in the controlfile. File #10 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00010' in the controlfile. File #11 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00011' in the controlfile. File #12 found in data dictionary but not in controlfile. Creating OFFLINE file 'MISSING00012' in the controlfile.
4.然后尝试resetlogs操作
Sat Apr 18 05:55:10 2026 ALTER DATABASE MOUNT Successful mount of redo thread 1, with mount id 1758652862 Database mounted in Exclusive Mode Lost write protection disabled Completed: ALTER DATABASE MOUNT Sat Apr 18 05:55:14 2026 ALTER DATABASE OPEN RESETLOGS ORA-1139 signalled during: ALTER DATABASE OPEN RESETLOGS... Sat Apr 18 05:56:29 2026 Starting ORACLE instance (normal) ALTER DATABASE RECOVER DATABASE UNTIL CANCEL Media Recovery Start started logmerger process Parallel Media Recovery started with 4 slaves Sat Apr 18 05:56:29 2026 Warning: Datafile 5 (/data/oracle/orcl/xxxx.dbf) is offline during full database recovery and will not be recovered Warning: Datafile 6 (/data/oracle/orcl/xxxx.dbf) is offline during full database recovery and will not be recovered Warning: Datafile 7 (/data/oracle/orcl/xxxx.dbf) is offline during full database recovery and will not be recovered Warning: Datafile 8 (/data/oracle/orcl/xxxx.dbf) is offline during full database recovery and will not be recovered Media Recovery Not Required Completed: ALTER DATABASE RECOVER DATABASE UNTIL CANCEL Sat Apr 18 05:57:45 2026 ALTER DATABASE OPEN RESETLOGS RESETLOGS after complete recovery through change 137865786 Resetting resetlogs activation ID 1645665187 (0x6216dba3) Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2549.trc: ORA-00367: checksum error in log file header ORA-00322: log 1 of thread 1 is not current copy ORA-00312: online log 1 thread 1: '/data/oracle/oradata/orcl/redo01.log' Sat Apr 18 05:57:45 2026 Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_2554.trc: ORA-00316: log 1 of thread 1, type 0 in header is not log file ORA-00312: online log 1 thread 1: '/data/oracle/oradata/orcl/redo01.log' Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2549.trc: ORA-00367: checksum error in log file header ORA-00322: log 2 of thread 1 is not current copy ORA-00312: online log 2 thread 1: '/data/oracle/oradata/orcl/redo02.log' Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_2554.trc: ORA-00316: log 2 of thread 1, type 0 in header is not log file ORA-00312: online log 2 thread 1: '/data/oracle/oradata/orcl/redo02.log' Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_2554.trc: ORA-00322: log 3 of thread 1 is not current copy ORA-00312: online log 3 thread 1: '/data/oracle/oradata/orcl/redo03.log' Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2549.trc: ORA-00367: checksum error in log file header ORA-00322: log 3 of thread 1 is not current copy ORA-00312: online log 3 thread 1: '/data/oracle/oradata/orcl/redo03.log' Sat Apr 18 05:57:46 2026 Setting recovery target incarnation to 2 Sat Apr 18 05:57:46 2026 Assigning activation ID 1758652862 (0x68d2e9be) Thread 1 opened at log sequence 1 Current log# 1 seq# 1 mem# 0: /data/oracle/oradata/orcl/redo01.log Successful open of redo thread 1 MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set Sat Apr 18 05:57:46 2026 SMON: enabling cache recovery Successfully onlined Undo Tablespace 2. Dictionary check beginning File #5 is offline, but is part of an online tablespace. data file 5: '/data/oracle/oradata/orcl/xxxx.dbf' File #6 is offline, but is part of an online tablespace. data file 6: '/data/oracle/oradata/orcl/xxxx.dbf' File #7 is offline, but is part of an online tablespace. data file 7: '/data/oracle/oradata/orcl/xxxx.dbf' File #8 is offline, but is part of an online tablespace. data file 8: '/data/oracle/oradata/orcl/xxxx.dbf'
到这一步悲剧基本上已经发生,犯了一个在oracle恢复里面比较忌讳的事情,有数据文件offline的情况下,执行resetlogs操作,导致部分数据文件的resetlogs信息没有被及时更新,导致一套库里面,被offline的这个部分数据文件resetlogs信息小于其他online的数据文件的。
5. 后续其他操作各种报错
Completed: ALTER DATABASE MOUNT Sun Apr 19 08:13:02 2026 ALTER DATABASE DATAFILE 5 OFFLINE DROP Sun Apr 19 08:13:02 2026 Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbw0_9212.trc (incident=67094): ORA-00600: internal error code, arguments: [3600], [5], [14], [], [], [], [], [], [], [], [], [] Incident details in: /data/oracle/diag/rdbms/orcl/orcl/incident/incdir_67094/orcl_dbw0_9212_i67094.trc Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbw0_9212.trc: ORA-00600: internal error code, arguments: [3600], [5], [14], [], [], [], [], [], [], [], [], [] DBW0 (ospid: 9212): terminating the instance due to error 471
Tue Apr 21 22:31:23 2026 Assigning activation ID 1758985759 (0x68d7fe1f) Thread 1 opened at log sequence 1 Current log# 1 seq# 1 mem# 0: /data/oracle/oradata/orcl/redo01.log Successful open of redo thread 1 MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set Tue Apr 21 22:31:23 2026 SMON: enabling cache recovery Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4951.trc (incident=87950): ORA-00600: internal error code, arguments: [2662], [0], [137890858], [0], [137891091], [12583056], [] Incident details in: /data/oracle/diag/rdbms/orcl/orcl/incident/incdir_87950/orcl_ora_4951_i87950.trc Errors in file /data/oracle/diag/rdbms/orcl/orcl/incident/incdir_87950/orcl_ora_4951_i87950.trc: ORA-00339: archived log does not contain any redo ORA-00334: archived log: '/data/oracle/oradata/orcl/redo03.log' ORA-00339: archived log does not contain any redo ORA-00334: archived log: '/data/oracle/oradata/orcl/redo02.log' ORA-00339: archived log does not contain any redo ORA-00334: archived log: '/data/oracle/oradata/orcl/redo02.log' ORA-00339: archived log does not contain any redo ORA-00334: archived log: '/data/oracle/oradata/orcl/redo03.log' ORA-00600: internal error code, arguments: [2662], [0], [137890858], [0], [137891091], [12583056], [] Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4951.trc: ORA-00600: internal error code, arguments: [2662], [0], [137890858], [0], [137891091], [12583056], [] Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4951.trc: ORA-00600: internal error code, arguments: [2662], [0], [137890858], [0], [137891091], [12583056], [] Error 600 happened during db open, shutting down database USER (ospid: 4951): terminating the instance due to error 600
接手故障之后分析
使用obet工具直接快速的检查坏块情况和文件头信息,关于obet的介绍参考:
obet实现对数据文件坏块检测功能
Oracle数据块编辑工具( Oracle Block Editor Tool)-obet

dbv检测没任何坏块,比较好好的消息

但是检测数据文件头信息,发现有三种类型的resetlogs的信息,证明进行了多次部分文件的情况下进行了resetlogs操作
恢复处理
1. 使用Oracle Recovery Tools工具修改 resetlogs 信息
由于大量reseltogs 信息不一致,先使用Oracle Recovery Tools修改scn等相关信息Oracle Recovery Tools恢复案例总结—202505(注意选择resetlogs scn最大的文件为参照文件)

2. 重建ctl,打开库

比较幸运直接打开成功(本来也就应该成功,因为客户本身之前丢失主要业务文件的时候多次打开过库)
3. 然后增加temp文件,并expdp导出数据,完成本次恢复工作



加我微信(17813235971)
加我QQ(107644445)

