头图

Oracle的闪回数据库(Flashback Database)类似于数据库的倒带按钮,可以在用户对数据库造成了逻辑数据损坏的情况下,将数据库恢复到正确的状态。下图说明了闪回数据库的过程。
image.png

视频讲解如下:
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"

赵渝强老师
36 声望15 粉丝

20年以上的IT行业从业经历,清华大学计算机软件工程专业毕业,京东大学大数据学院院长,Oracle中国有限公司高级技术顾问;曾在BEA、甲骨文、摩托罗拉等世界500强公司担任高级软件架构师或咨询顾问等要职,精通大...