Oracle数据库常见的数据误删除操作Delete、Drop、Truncate对应的恢复策略

Delete误删除数据恢复策略

将表数据恢复到指定scn(system change number)

  1. 查看数据库当前scn

    select current_scn from v$database
    
  2. 逐步缩小scn号查询误删前的表数据

    select * from ${schema_name.object_name} as of scn 1139437
    
  3. 设置允许表行移动

    alter table ${schema_name.object_name} enable row movement
    
  4. 将表数据恢复到指定scn

    flashback table ${schema_name.object_name} to scn 1139437
    

将数据恢复到某一时间点

  1. 根据时间戳查看表数据情况

    select * from ${schema_name.object_name} as of timestamp to_timestamp('2018-09-17 09:50:11','yyyy-mm-dd hh24:mi:ss')
    
  2. 设置允许表行移动

    alter table ${schema_name.object_name} enable row movement
    
  3. 将表数据恢复到某一时间点

    flashback Table ${schema_name.object_name} to timestamp to_timestamp('2018-09-17 09:50:11','yyyy-mm-dd hh24:mi:ss')
    

Drop误删除数据恢复策略

通过查看Oracle的回收站,可以查到被删除的表、索引等,通过下列语句可以实现表数据恢复。

  1. 查询回收站是否存在误删的表记录

    select count(*) from recyclebin where original_name=${table_name}
    
  2. 还原指定表

    flashback table ${schema_name.object_name} to before drop
    
  3. 清空回收站

    purge table ${schema_name.object_name}
    

Truncate误删除数据恢复策略

原理

通过元数据及数据块,然后将被TRUNCATE的用户数据块的内容取代其用户数据块的内容,以“骗”过Oracle,让它读出这些数据,实现数据恢复。

局限

  1. 经过测试,如果表被truncate后,未执行其它操作,数据可以使用fy_recover_data恢复回来。
  2. 如果表被truncate后新数据进入表,使用fy_recover_data包执行truncate恢复,发现返回的数据是truncate之后插入的数据。
  3. 如果表被truncate后,其所在表空间被覆盖,使用fy_recover_data包执行truncate恢复,发现返回的数据只有一部分。

操作过程如下

  1. 导入FY_Recover_Data.pck包

    @/home/oracle/FY_Recover_Data.pck 
    
  2. 开始执行恢复,只需要两个参数:schema和table_name

    exec fy_recover_data.recover_truncated_table(schema_name,object_name)
    
  3. 根据恢复日志,会创建临时中转表object_name 和 o b j e c t n a m e 和object_name objectname ,恢复的数据保存在 o b j e c t n a m e ,恢复的数据保存在object_name ,恢复的数据保存在objectname$中,将数据还原到object_name表中

    insert into object_name select * from object_name$$
    
  4. 确认数据已经还原回来

    select count(*) from object_name
    

小结

对于使用工具fy_recover_data进行数据恢复,需要确保:

  • truncate之后,需要保证没有新的数据进入表中,否则无法还原;
  • 存放该表的数据文件块不能被覆盖,否则无法完整还原数据。
  • 在发生故障后,可以迅速使用下面语句来关闭/开启表空间的写功能,这样可以保证数据文件不会被覆写。

例如:

	SQL> alter tablespace users read only;
	SQL> alter tablespace users read write;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值