误删除oracle数据文件时的恢复方法
当误删除oracle数据文件后,文件系统上虽然看不到被删除的数据文件了,但仍可以通过prmscan工具扫描底层磁盘上的oracle数据块,并将这些数据块重组以达到数据恢复的目的。
prmscan 适用于以下的场景:
误手动删除了文件系统(任意文件系统 NTFS、FAT、EXT、UFS、JFS等)或ASM上的数据文件
文件系统损坏,导致数据文件大小变成0 bytes即数据文件被清零
文件系统损坏,导致文件系统无法MOUNT加载
ASM存储元数据损坏,导致diskgroup无法mount加载
文件系统或ASM其中的LV或PV被物理破坏或丢失
以上场景均可以利用prmscan直接扫描文件系统或ASM对应的 PV、LV 中的残余未被覆盖的oracle block,来实现对这些oracle数据块的合并重组,以达到数据恢复的目的。
PRMSCAN是基于JAVA语言开发的,可以跨一切支持JDK 1.6以后操作系统,包括Windows、Linux、Solaris、AIX、HP-UX。
操作方法
- 01
例如下面的例子中linux上/u01文件系统挂载点对应/dev/sdb1分区,该文件系统挂载点下的oracle数据文件被维护人员误操作删除了。 这里我们使用prmscan的扫描oracle数据文件块和合并功能,从损坏的文件系统中直接将数据文件都重组出来。
- 02
扫描整个磁盘 [oracle@dbdao01 ~]$ java -jar PRMScan.jar –scan /dev/sdb1 –guess 8k –scan 选项代表扫描 /dev/sdb1 设备,并指定Oracle blocksize 为8k
- 03
[oracle@dbdao01 ~]$ java -jar PRMScan.jar –outputsh ./8kfull.txt –outputsh 代表写出一个可以合并已扫描到信息的SHELL文件 即这里的8kfull.txt
- 04
[oracle@dbdao01 ~]$ sh 8kfull.txt 执行8kfull.txt即可以 在当前目录下生成所有需要合并的数据文件 如下 [oracle@dbdao01 ~]$ ls -ll PD* -rw-r–r– 1 oracle oinstall 295428096 Jul 28 00:37 PD_DBF1.dbf -rw-r–r– 1 oracle oinstall 83427328 Jul 28 00:37 PD_DBF2.dbf -rw-r–r– 1 oracle oinstall 220266496 Jul 28 00:37 PD_DBF3.dbf -rw-r–r– 1 oracle oinstall 1324482560 Jul 28 00:38 PD_DBF4.dbf
- 05
使用PRM-DUL扫描这些数据文件
- 06
核对恢复到sqlldr导入文件中的恢复数据量