1、模拟delete对象删除
2、查看误删除表的基本信息
col object_name for a20
col owner for a20
select object_id,object_name,owner from dba_objects
where object_name='TEST1' and owner='SCOTT';
set linesize 1000
col segment_name for a20
col segment_type for a10
col tablespace_name for a20
select segment_name,segment_type,tablespace_name,bytes,blocks,extents from dba_segments where segment_name='TEST1' and owner='SCOTT';
select segment_name,file_id,block_id,blocks from dba_extents where segment_name='TEST1' and owner='SCOTT';
3、查看误删除前数据块信息
cat finddatablock.sh
#!/bin/bash
. ~/.bash_profile
for ((i=936;i<=3455;i++))
do
objectid=`echo p /d dba 4,$i ktbbh.ktbbhsid.ktbbhod1 | bbed parfile=bbed.par | grep 'ktbbhod1'| awk '{print $5}'`
if [ "$objectid" = "87375" ];then
echo $i;
fi;
done
sh finddatablock.sh > finddatablock.out
4、开始修复
cat repair.sh
cat finddatablock.out | while read i
do
len=`echo p /d dba 4,$i offset 0 kdbt[0] | bbed parfile=bbed.par | grep 'kdbtnrow' | awk '{print $4}'`
if [ -n "$len" ]; then
for ((j=0;j<$len;j++))
do
offset=`echo p dba 4,$i *kdbr[$j] | bbed parfile=bbed.par | grep '^ub1*.*rowdata' | awk '{print $3}' | sed 's/@//g'`
echo "assign /x dba 4,$i offset $offset = 0x2c"
done
fi
echo "sum apply dba 4,$i"
done
sh repair.sh > repair.log
bbed parfile= bbed.par cmdfile= repair.log
--不清缓存看不到新数据
恢复成功
!!注意,恢复后的表需要立即做个备份,然后删除重建,否则会有莫名其妙的问题




