Oracle数据误删的恢复办法

Oracle数据误删的恢复办法

删除语句案例:

在2022-04-12 12:00:00执行了这样的一条语句

DELETE FROM P_USER U WHERE U.CITY = '北京'

恢复步骤:

  1. 如果你找不到操作的具体时间,先查询最近有关这个表的操作:

    SELECT * FROM v$sql WHERE sql_text LIKE '%表名%' ORDER BY FIRST_LOAD_TIME DESC
    
    -- 只查看操作sql和操作时间:
    SELECT SQL_TEXT, FIRST_LOAD_TIME FROM v$sql WHERE sql_text LIKE '%表名%' ORDER BY FIRST_LOAD_TIME DESC
    
    -- 案例:
    SELECT SQL_TEXT, FIRST_LOAD_TIME FROM v$sql WHERE sql_text LIKE '%P_USER%' ORDER BY FIRST_LOAD_TIME DESC
    

    从展示的数据中找到执行删除的语句和对应时间

  2. 查找出被误删除的数据

    SELECT * FROM 表名 AS OF timestamp to_timestamp( 时间, 'yyyy-mm-dd hh24:mi:ss' ) WHERE 删除的条件);
    
    -- 案例:
    SELECT * FROM P_USER AS OF timestamp to_timestamp( '2022-04-12 12:00:00', 'yyyy-mm-dd hh24:mi:ss' ) WHERE CITY = '北京');
    
  3. 将数据插回

    INSERT INTO 表名 ( SELECT * FROM 表名 AS OF timestamp to_timestamp( 时间, 'yyyy-mm-dd hh24:mi:ss' ) WHERE 删除的条件 );
    
    -- 案例:
    INSERT INTO P_USER ( SELECT * FROM P_USER AS OF timestamp to_timestamp( '2022-04-12 12:00:00', 'yyyy-mm-dd hh24:mi:ss' ) WHERE CITY = '北京' );
    

至此,误删的数据恢复就完成了


版权声明:本文为Yingduo_Lance原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。