Skip to content
    1. Oracle 提供了几种机制来帮助恢复误删除的数据,其中 RECYCLEBINAS OF TIMESTAMP TO_TIMESTAMP 都是 Oracle 用于恢复误删数据的功能。

    1. RECYCLEBIN (回收站)

    在 Oracle 中,RECYCLEBIN 是一个用于存储被删除对象(如表、索引、视图等)的一种机制。它类似于 Windows 操作系统中的回收站。删除的对象并不会被立即从数据库中物理删除,而是被移到回收站,这样可以防止误删的对象彻底丢失。

    工作原理:

    • 当你删除一个表或其他对象时,Oracle 并不会马上从数据字典中彻底移除该对象。相反,Oracle 会将删除的对象的元数据标记为“已删除”,并将其移动到回收站。
    • 该对象的存储空间不会立即被回收,直到回收站中的对象被清空或手动删除。
    • 你可以通过回收站来恢复被删除的对象。

    主要操作:

    • 查看回收站内容

      sql
      SHOW RECYCLEBIN;
    • 恢复回收站中的对象

      sql
      FLASHBACK TABLE table_name TO BEFORE DROP;

      这会将回收站中的某个表恢复到删除之前的状态。

    • 删除回收站中的对象

      sql
      PURGE RECYCLEBIN;

      这个命令会彻底删除回收站中的所有对象,释放其占用的空间。

    • 清空回收站

      sql
      PURGE TABLE table_name;

      这个命令只会清除某个特定表在回收站中的内容。

    注意事项:

    • RECYCLEBIN 功能默认启用,但可以通过 ALTER SYSTEM SET RECYCLEBIN=OFF; 禁用。
    • 该机制主要针对表、索引等数据库对象,而不适用于数据行(行级数据)。行级数据需要通过 闪回查询 或其他方式恢复。

    2. AS OF TIMESTAMP (闪回查询)

    AS OF TIMESTAMP 是 Oracle 提供的 闪回查询(Flashback Query)的一种方式,允许你查询某个时间点的数据状态。通过该功能,你可以查看或恢复误删除的记录,而不需要依赖于回收站。

    工作原理:

    • Oracle 使用 UNDO 表空间(回滚段)来存储数据的历史版本。通过 AS OF TIMESTAMP,你可以查询表中的数据在特定时间点的状态。
    • 这种方法允许你查询某个时间点的数据状态,哪怕数据已经被删除或更新。

    使用方法:

    • 查询某个时间点的数据: 假设你需要查询 my_table 在某个时间点的数据,可以使用以下 SQL:

      sqlSELECT
        SELECT * FROM TABLE AS OF TIMESTAMP TO_TIMESTAMP('2024-12-24 10:00:00', 'YYYY-MM-DD HH24:MI:SS');

      这个查询会返回在 2024-12-24 10:00:00 时刻的数据。

    • 使用 SCN (系统更改号): 你也可以使用 SCN(System Change Number)来查询某个特定的系统状态:

      sqlSELECT
        AS OF SCN 123456;

    恢复被删除的记录:

    你可以使用 闪回查询 看到删除之前的记录,并通过查询结果将其恢复。

    恢复表的内容:

    如果你想恢复整个表到某个时间点的状态,可以使用 闪回表(FLASHBACK TABLE)

    sql
    FLASHBACK TABLE my_table TO TIMESTAMP TO_TIMESTAMP('2024-12-24 10:00:00', 'YYYY-MM-DD HH24:MI:SS');

    这会将 my_table 恢复到特定时间点的状态,恢复删除的行。

    注意事项:

    • UNDO 表空间大小:闪回查询依赖于 UNDO 表空间,因此其保留的数据历史版本是有限的,通常取决于回滚段的配置及其大小。
    • 如果 UNDO 数据被覆盖或已经过期,无法通过闪回查询恢复数据。
    • 如果你没有启用 闪回表 或者 闪回数据库 等功能,恢复过程可能会受到限制。

    3. 总结

    • RECYCLEBIN:提供了表级别的恢复功能,适用于通过 DROP 删除的表、索引等数据库对象。它类似于操作系统中的回收站,删除的对象会被暂时保存在回收站中,直到清空回收站。
    • AS OF TIMESTAMP:提供了基于时间点的查询能力,可以查询数据库中某一时间点的所有数据状态。适用于恢复误删除的记录或查询历史数据(不局限于表的删除)。

    这两者是 Oracle 提供的两种主要的误删除恢复机制,使用场景有所不同。回收站适用于对象级别的恢复,而闪回查询适用于数据行级别的恢复