Oracle的闪回数据库(Flashback Database)类似于数据库的倒带按钮,可以在用户对数据库造成了逻辑数据损坏的情况下,将数据库恢复到正确的状态。下图说明了闪回数据库的过程。
视频讲解如下:
https://www.bilibili.com/video/BV1KUm6YJEDi/?aid=113458171416...
一、 闪回数据库简介
使用闪回数据库时,通过还原自先前某个时间点以来发生的所有更改,可快速将数据库恢复到较早的时间点。这个操作速度很快,因为不需要还原备份。使用这个功能可撤消导致逻辑数据损坏的更改。如果数据库发生介质丢失或物理损坏,则必须使用传统恢复方法。
要使用闪回数据库的功能,Oracle数据库必须是归档模式。
二、 【实战】使用闪回数据库恢复数据
在了解到了什么是Oracle数据库的闪回数据库后,下面将通过一个具体是示例来演示如何使用闪回数据库恢复数据。
(1)使用数据库管理员登录数据库,并将Oracle数据库设置为归档模式。
(2)执行语句确认闪回数据库的功能是否开启。
SQL> select flashback_on from v$database;
# 输出的信息如下:
FLASHBACK_ON
------------------
NO
# 默认情况下,闪回数据库的功能是关闭的。
(3)开启数据库的闪回功能。
SQL> alter database flashback on;
(4)确认闪回数据库的功能是否开启。
SQL> select flashback_on from v$database;
# 输出的信息如下:
FLASHBACK_ON
------------------
YES
# YES表示已经启用了闪回数据库的功能。
(5)记录当前的时间和SCN号。
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "current time",
timestamp_to_scn(sysdate) SCN from dual;
# 输出的信息如下:
current time SCN
---------------------- ----------
2025-03-25 12:07:42 2756159
(6)执行一个误操作,例如:误删除了c##scott用户。
SQL> drop user c##scott cascade;
(7)通过闪回数据库执行数据库的恢复。
SQL> shutdown immediate
SQL> startup mount
SQL> flashback database to scn 2756159;
(8)打开数据库。
SQL> alter database open;
# 此时将输出下面的错误信息:
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
(9)打开数据库时使用resetlogs选项。
SQL> alter database open resetlogs;
# resetlogs表示在打开数据库时,将重做日志重置到SCN 2917260的时间点上。
# 因此,SCN 2917260的时间点后续的重做日志将会丢失。
# 因此闪回数据库的本质其实是一个不完全恢复。
(10)检查c##scott用户是否恢复。
SQL> conn c##scott/tiger
Connected.
SQL> show user
USER is "C##SCOTT"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。