SQL数据恢复之 - 闪回查询

适用场景:误删除数据行,且时间在 UNDO 保留期内(通常 15-30 分钟、24小时)。

Oracle

  • 查看系统设置的 UNDO 保留时间参数值:可使用以下 SQL 语句查看 UNDO_RETENTION 参数设置的值,该参数指定了 UNDO 数据保留的最短时间(以秒为单位)。
SHOW PARAMETER undo_retention;
-- 或者
SELECT name, value
FROM v$parameter
WHERE name = 'undo_retention';
-- 或者
SELECT to_char(begin_time, 'dd - mon - rr hh24:mi') begin_time,
       to_char(end_time, 'dd - mon - rr hh24:mi') end_time,
       tuned_undo_retention
FROM v$undo_stat
ORDER BY end_time;

步骤概要

        第一步:历史记录中,根据删除时间找到删除操作;

        第二步:执行闪回查询得到删除数据;

        第三步:查询结果复制到表中。

        恢复语句(闪回查询):

-- 恢复删除
SELECT * 
FROM "SZKS"."TBLWIPEQPMATERIALLOG" 
AS OF TIMESTAMP TO_TIMESTAMP('2025-06-04 09:50:58', 'YYYY-MM-DD HH24:MI:SS') 
WHERE ROWID = 'AABKS6AARAAK3mXAAD';

恢复的几种方式:(本文章只讲述第一种)

闪回查询

详细步骤:工具栏 -- 历史记录  -- 根据误删时间找到误删操作  -- 执行恢复语句 ;

举个例子:假设A表有图一数据,误删数据后如图二。

在此处找到历史日志

  • [2025-06-04 09:50:59.77]:操作发生的时间戳。
  • [172.*.*.87Oracle]
    • 172.16.7.87:数据库服务器的 IP 地址。
    • Oracle:数据库实例名(或服务名)。
  • [48241]会话 ID(Session ID,简称 SID),标识发起该操作的数据库会话。
  • [ORA]:操作类型(此处为 Oracle 相关操作)。
  • DELETE FROM ...:具体执行的 SQL 语句。
  • Time: 0.023s:SQL 语句执行耗时。

执行查询语句,如果未查到相关数据,删除操作时间可在59附件前推。

把图三查询到的数据复制到需恢复表,效果如图四。

意外情况:说明UNDO 保留期内数据已被覆盖,此方法不适用。

注意事项

  1. 时间点准确性

    • 恢复时间点必须早于删除操作时间(如删除发生在10:45:16,则使用10:45:15或更早)。
    • 若无法确定具体时间,可尝试多个临近时间点。
  2. 闪回数据有效期

    • 数据必须在 Oracle 的UNDO_RETENTION参数保留期内(通常为 15-30 分钟,具体取决于数据库配置)。
    • 若超出保留期,需通过备份恢复。
  3. 唯一性约束冲突

    • 若表有唯一约束(如主键),需确保恢复的数据不会导致冲突。
    • 可先删除当前可能存在的冲突行,再恢复数据。
  4. 权限要求

    • 需要FLASHBACK ANY TABLESELECT ANY TRANSACTION权限

****************************************  若有帮助,一键三连  **************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值