闪回功能介绍与使用

来源:这里教程网 时间:2026-03-03 22:39:09 作者:

Oracle闪回技术是现代Oracle数据库不可或缺的灾难恢复和数据分析工具包。它通过利用数据库内部的撤销机制和专用日志,提供了远超传统恢复方法的 速度、精度和易用性 。理解不同闪回技术的原理、适用场景、依赖和限制,对于DBA高效地进行数据恢复、审计、排错和保障业务连续性至关重要。根据具体需求(恢复整个库、单个表、查询历史、恢复删除的表)选择正确的闪回技术是关键。

选择哪种闪回技术?

场景 推荐技术 主要依赖 是否需要重启DB
查看过去某个时间点的数据 闪回查询 (Flashback Query) Undo 数据
查看一行数据的历史变更记录 闪回版本查询 (Version Query) Undo 数据
查看/撤销某个特定事务的更改 闪回事务查询 (Txn Query) Undo 数据
恢复误删/误改的单个表 (非DROP/TRUNCATE) 闪回表 (Flashback Table) Undo 数据 + ROW MOVEMENT
恢复意外DROP掉的表 闪回删除 (Flashback Drop) 回收站 (Recycle Bin)
恢复整个数据库到过去时间点 (大规模损坏) 闪回数据库 (Flashback DB) 闪回日志 (Flashback Logs)  (需MOUNT)

查看闪回区大小 

show parameter db_recovery_file_dest_size

扩大闪回区大小 

alter system set db_recovery_file_dest_size=4G scope=both;

开启数据库闪回功能: 

1. 确保数据库处于归档模式 

archive log list

2. 设置闪回恢复区 

设置闪回区大小: 

SQL> alter system set db_recovery_file_dest_size=30g scope=both;

设置闪回区位置: 

SQL>  alter system set db_recovery_file_dest='/oracle/soft' scope=both;

设置闪回目标为 5 天,以分钟为单位,每天为 1440 分钟: 

SQL>alter system set db_flashback_retention_target = 7200 scope=both;

3. 打开闪回功能 

SQL>alter database flashback on;

4. 确认闪回特性已开启 

SQL> select flashback_on from v$database;

关闭数据库闪回功能: 

SQL>alter database flashback off;

闪回数据库 

SQL> select flashback_on from v$database; 
 
FLASHBACK_ON 
------------------ 
YES 
 
SQL> 
SQL> 
SQL> select * from v$recovery_file_dest; 
 
NAME 
-------------------------------------------------------------------------------- 
SPACE_LIMIT                                            SPACE_USED                   SPACE_RECLAIMABLE               NUMBER_OF_FILES 
----------- ---------- ----------------- --------------- 
E:\app\product\10.2.0\oradata\flashbck    1.0737E+11 2.9558E+10                 0                                        67 
 
 
SQL> 
SQL> 
SQL> SELECT oldest_flashback_time FROM v$flashback_database_log; 
 
OLDEST_FLASHBA 
-------------- 
18-12月-18 
 
SQL> 
SQL> 
SQL> ALTER SESSION SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; 
 
会话已更改。 
 
SQL> SELECT oldest_flashback_time FROM v$flashback_database_log; 
 
OLDEST_FLASHBACK_TIME 
------------------------- 
18-12月-2018 23:58:47 
 
SQL> 
SQL> shutdown immediate; 
数据库已经关闭。 
已经卸载数据库。 
ORACLE 例程已经关闭。 
SQL> 
SQL> 
SQL> startup mount; 
ORA-32004: obsolete and/or deprecated parameter(s) specified 
ORACLE 例程已经启动。 
 
Total System Global Area 1.3959E+10 bytes 
Fixed Size                  2089760 bytes 
Variable Size             905972960 bytes 
Database Buffers         1.3036E+10 bytes 
Redo Buffers               14684160 bytes 
数据库装载完毕。 
SQL> 
SQL> 
SQL> flashback database to timestamp to_timestamp('2018-12-20 04:00:00','yyyy-MM-dd hh24:mi:ss'); 
 
闪回完成。 
 
SQL> 
SQL> 
SQL> 
SQL> alter database open; 
alter database open 
* 
第 1 行出现错误: 
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项 
 
 
SQL> 
SQL> 
SQL> alter database open resetlogs; 
 
数据库已更改。 
 
SQL> select open_mode from v$database; 
 
OPEN_MODE 
---------- 
READ WRITE 
 
SQL> 
SQL> 
SQL> 
SQL> ALTER SESSION SET nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; 
 
会话已更改。 
 
SQL> SELECT oldest_flashback_time FROM v$flashback_database_log; 
 
OLDEST_FLASHBACK_TIME 
------------------------- 
18-12月-2018 23:58:47

相关推荐