当 Oracle 数据库发生逻辑损坏时,可以使用闪回技术简单快捷地进行数据库的恢复。

闪回数据库使用闪回日志执行闪回。闪回删除使用回收站。其它所有技术都使用还原数据。并不
是所有闪回功能都会修改数据库。有些功能只是一些用来查询数据以往版本的方法

一、闪回数据库
使用闪回数据库,通过还原自先前某个时间点以来发生的所有更改,可快速将数据库恢复到过去
的某个时间点上的状态。使用闪回数据库功能时,不需要还原备份。闪回数据库功能可以方便地
撤消导致逻辑数据损坏的更改。如果数据库发生介质丢失或物理损坏,则必须使用传统的方法进
行恢复。
1. 配置闪回数据库的方法
SQL>shutdown immediate;
SQL>startup mount exclusive;
SQL>alter system set db_flashback_retention_terget=2880 scope=both;
SQL>alter system set DB_RECOVERY_FILE_DEST_SIZE=20G scope=both;
SQL>alter system set db_recovery_file_dest='+FRA' scope=both;
SQL>alter database flashback on;
SQL>alter database open;

注意:DB_FLASHBACK_RETENTION_TARGET 初始化参数用来设置保留目标,可指定数据库所
能闪回的上限(以分钟为单位)。此参数只是一个目标,并不提供任何保证,闪回时间间隔取决
于在快速恢复区中保存的闪回日志的数据量。
查询确认闪回数据库是否已经启用:
SQL>select flashback_on from v$database;

2. 闪回数据库的方法
闪回数据库必须以 EXCLUSIVE 模式装载才能执行 FLASHBACK DATABASE 命令,而且在完成时
必须使用 RESETLOGS 选项打开数据库。
在使用 RMAN 命令 FLASHBACK DATABASE 命令执行闪回数据库操作时,可以使用 SEQUENCE
和 THREAD 指定作为下限的重做日志序列号和线程号,RMAN 只选择可用于闪回到指定序列号(但
不包括指定序列号)的文件。
也可以使用 FLASHBACK DATABASE 的 SQL 命令将数据库恢复到过去的某个时间或 SCN. 如果

使用 TO SCN 子句,则必须提供一个编号。如果指定 TO TIMESTAMP, 则必须提供一个时间戳
值。还可以指定还原点名称,例如:
RMAN> FLASHBACK DATABASE TO TIME="TO_DATE('2013-05-27 09:00:00',
'YYYY-MM-DD HH24:MI:SS')";
RMAN> FLASHBACK DATABASE TO SCN=23565;
RMAN> FLASHBACK DATABASE TO SEQUENCE=223 THREAD=1;
或者:
SQL> FLASHBACK DATABASE TO TIMESTAMP(SYSDATE-1/24);
SQL> FLASHBACK DATABASE TO SCN 53943;
SQL> FLASHBACK DATABASE TO RESTORE POINT b4_load;
3. 闪回数据库测试
本节实验测试基于时间戳的数据库闪回。
1) 创建用于实验的测试表 hr.t_obj:
SQL>create table hr.t_obj as select * from dba_objiects;
SQL>select count(*) from hr.t_obj;

2) 获取当前系统时间:
SQL>select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') tm from dual;

3) 删除 hr 用户及其对象:
SQL>drop user hr cascade;
SQL>select count(*) from hr.t_obj;
4) 建立对照表
SQL>select count(*) from system.tab1;
5) 执行闪回数据库操作,恢复 hr
SQL>shutdown immediate;
SQL>startup mount;
SQL>flashback database to timestamp to_timestamp
    2   ('2014-11-03 10:48:48','yyyy-mm-dd hh24:mi:ss');
SQL>alter database open resetlogs;

6) 验证
SQL>select count(*) from hr.t_obj;
SQL>select count(*) from system tab1;

可以看到,执行闪回数据库时间戳之前的更改都得到了恢复,之后的更改不再有效。因此,闪回
数据库是对数据库的整体回退。
 二、表的删除闪回
表删除(drop)闪回的原理是使用回收站技术,被删除的对象会临时放入回收站中并且仍属于其
所有者。当删除的表移到回收站时,会使用系统生成的名称重命名该表及其关联对象和约束条件。
回收站本身也是一个数据字典表,它用来维护删除对象的原始名称与其系统生成名称之间的关系。
使用 DBA_RECYCLEBIN, USER_RECYCLEBIN 视图可查询回收站的内容。
要使用闪回删除功能,必须将 FLASHBACK TABLE 或 FLASHBACK ANY TABLE 系统权限授予
使用闪回表功能的用户。此外,还必须将 SELECT, INSERT, DELETE 和 ALTER 对象权限授予
用户。
1. 表的删除闪回语法
FLASHBACK TABLE table_name TO BEFORE DROP [RENAME TO new_name];
2. 表的删除闪回测试
1) 删除 hr.t_obj 表:
SQL>conn hr/hr
SQL>select count(*) from hr.t_obj;
SQL>drop table hr.t_obj;
SQL>select count(*) from hr.t_obj;

2) 查询回收站并执行闪回删除:
SQL>select object_name, original_name, can_undrop, base_object
    2   from user_recyclebin;
SQL>flashback table hr.t_obj to before drop;
SQL>select count(*) from hr.t_obj;

三、闪回查询
闪回查询通常用于检索一条记录的所有历史版本,回溯单独的事务或者回溯从指定时间以来对特
定表的所有变化。
1. 闪回查询的语法
SELECT <column_name_list> FROM <table_name> 
AS OF <SCN> --- 使用 as of scn
或 AS OF <TIMESTAMP> --- 使用 as of timestamp
 
[WHERE <filter_conditions>]
[GROUP BY <unaggregated columns>]
[HAVING <group_filter>]
[ORDER BY <column_positions_or_name>]
2. 闪回查询测试
1) 创建实验用测试表 tab1:
SQL>create table hr.tab1 as select user_id, username from dba_users where 1=0;
SQL>insert into hr.tab1 select user_id, username from dba_users where user_id < 10;
SQL>commit;
SQLselect * from hr.tab1;

2) 对表进行删除操作,并进行闪回查询:
SQL>conn hr/hr;
SQL>select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') tm from dual;
SQL>delect tab1 where username='SYS';
SQL>select * from tab1;
SQL>seelct *from tab1 as of timestamp to_timestamp ('2022-08-01 11:00:00', 'yyyy-mm-dd hh24:mi:ss');

四、闪回表
1. 表闪回的方法
使用闪回表的先决条件是必须启用表的行迁移:
ALTER TABLE schema_name.table_name ENABLE ROW MOVEMENT;
表闪回的语法:
FLASHBACK TABLE schema_name.table_name TO SCN <scn_number>
-- 基于 SCN 的表闪回
或 TO TIMESTAMP <timestamp> -- 基于 TIMESTAMP 的表闪回
或 TO RESTORE POINT <restore_point> -- 基于 RESTORE POINT 的表闪回
[<ENABLE | DISABLE> TRIGGERS]
2. 表闪回测试
本节实验基于 RESTORE POINT 的表闪回。
基于 RESTORE POINT 的表闪回首先要创建适当的还原点,创建还原点的语法为:
CREATE RESTORE POINT point_name;
对于闪回成功之后无用的闪回点可以及时删除掉,删除闪回点的语法为:
DROP RESTORE POINT point_name;
1) 创建用于闪回表的测试表 hr.tab2,并创建还原点 p1:
SQL>create table hr.tab2 as select user_id, username from dba_users where 1 = 0;
SQL>alter table hr.tab2 enanle row movement;
SQL>insert into hr.tab2 seelct user_id, username from dba_users where user_id < 10;
SQL>select * from hr.tab2;
SQL>create restore point p1;

2) 对表 hr.tab2 进行插入操作,并创建还原点 p2:
SQL>insert into hr.tab2 select user_id, username from dba_users
    2   where user_id >= 10 and user_id < 20;
SQL> select * from hr.tab2;
SQL>select * from hr.tab2;
SQL>create restore point p2;

3) 从表 hr.tab2 进行删除,创建还原点 p3:
SQL>delect hr.tab2 where user_id = 5;
SQL>seelct * from hr.tab2;
SQL>create restore point p3;

4) 开始执行闪回表操作:
SQL>flashback table hr.tab2 to restore point p1;
SQL>select * from hr.tab2;
SQL>flashback table hr.tab2 to restore point p2;
SQL>select * from hr.tab;
SQL>flashback table hr.tab2 to restore point p3;
SQL>select * from hr.tab2;

5) 删除还原点:
SQL>fdrop restore point p1;
SQL>drop restore point p2;
SQL>drop restore point p3;

五、闪回版本查询
闪回版本查询指的是 Oracle 可以针对特定的对象来查询某一特定时段内该对象变化的所有情
况,也可以根据特定的需要来将该对象修正到特定的时刻。
闪回版本查询同闪回查询、闪回表一样,都是使用了 UNDO 段的数据,即数据变更的历史副本,
当 UNDO 段的数据由于空间变化而被清除后,则无法进行闪回。
1. 闪回版本查询语法
SELECT <columns> FROM <schema_name.table_name>
VERSIONS BETWEEN SCN <minimum_scn> AND <maximum_scn>
-- 基于 SCN 的版本查询
或者:
SELECT <columns> FROM <schema_name.table_name>
VERSIONS BETWEEN timestamp 
to_timestamp('start_timestamp') and to_timestamp('end_timestamp')
-- 基于 TIMESTAMP 的版本查询
2. 闪回版本查询测试
使用上节课闪回表查询创建的测试表 hr.tab2:
SQL>col USER_ID format 99999
SQL>col USERNAME format a10
SQL>seelct user_ID, username, versions_xid, versions_startscn,
   2    versions_endscn, versions_operation
   3    from hr.tab2 versions between scn minvalue and maxvalue;

其中:
versions_xid - 记录指定版本事务的唯一标识符。
versions_startscn - 记录的起始 SCN 号。
versions_endscn -- 记录的终止 SCN 号。
versions_operation - 记录的操作类型(I 表示插入,U 表示更新,D 表示删除)。

闪回事务查询是对闪回版本查询的扩展。从某种程度上来说,闪回版本查询通常用于更细粒度的
查询,如针对特定的记录。而闪回事务则是针对某一事务进行闪回,是基于事务级别的。闪回事
务查询是通过查询视图 flashback_transaction_query 来获得某个或多个特定事务信息,
同时可根据该视图中提供的 undo_sql 列中的语句来反转事务,从而保证数据的完整性。
要使用闪回事务查询,必须要启用补充日志记录功能并建立正确的权限。例如,要对上一节闪表
操作创建的测试表 tab2 使用闪回事务处理,就要以 SYSDBA 权限在 SQL*Plus 中执行下列设
置步骤:

SQL>alter database add supplemental log data;
SQL>alter database add supplemental log data (primary key)  columns;
SQL>grant execute on dbms_flashback to hr;
SQL>grant select any transaction to hr;

然后对 hr.tab2 进行增删改操作,然后按照十六进制的行 ID 进行闪回事务查询了:

Oracle数据库的闪回技术相关推荐

  1. 达梦数据库的闪回技术

     什么是达梦数据库的闪回?          达梦数据库的闪回技术就是在事务提交以后,将事务操作的记录在回滚段中保留一段时间,以便通过用户指定的时刻,进行闪回查询,闪回技术可以在一定程度上恢复用户误操 ...

  2. oracle数据库归档闪回,oracle数据库开归档闪回模式

    10G 归档相关 转:http://blog.163.com/z_rx/blog/static/2763637620077811571555/ 关于Oracle 10g 归档方式的讨论:关闭归档/启用 ...

  3. Oracle数据库中闪回恢复的详细分析

    Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的.这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了.oracle10g大 ...

  4. oracle数据库归档闪回,[Oracle]Oracle的闪回归档

    Oracle的闪回归档 场景需求,由于管理数据库的一些核心表,在实施初期会有人为误删除的问题.Oracle 11gR2提供了闪回归档的特性,可以保证不用RMAN来恢复误删除的数据.实践如下: 1.创建 ...

  5. oracle中闪回概念,Oracle数据库的闪回操作

    通过DELETE删除数据后相当于放入回收站,一般情况下可以找回:通过UPDATE更新数据后数据库也会保留数据快照.闪回就是恢复指定时间的数据快照以达到恢复数据的目的. 根据步骤一查询出数据快照,恢复数 ...

  6. 数据库----Oracle中的闪回(flashback)技术

    目录 前言 正文 Flashback介绍 闪回表数据(Flashback Table) 1.闪回到具体时间点 2. 闪回到10分钟之前 闪回删表(Flashback Drop) 1. 闪回被删掉的sc ...

  7. Oracle 闪回技术详解(flashback)

    文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...

  8. 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  9. oracle对查询结果求和_Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复 ...

最新文章

  1. Adam那么棒,为什么还对SGD念念不忘 (3)—— 优化算法的选择与使用策略
  2. 支持多种小程序!阿里云ARMS推出小程序监控
  3. 没有足够的权限删除OU
  4. HTML5-Canvas 图形变换+状态保存
  5. .Net 事件类型的实现和推荐做法
  6. WINDOWS下与LINUX下写C程序的区别
  7. Summer Training day6 coseforces339D 线段树、位操作
  8. idea 执行 java jar_idea打包java可执行jar包的实现步骤
  9. php算法求出一个数可以被分解成多少个_小学数学必考的34个数学重难点公式,赶紧给孩子收藏!...
  10. redis主从和持久化
  11. 计算机网络第三版周舸答案,计算机网络技术基础第3版周舸第一章节计算机网络基础知识课件教学.ppt...
  12. [POJ2796]Feel Good
  13. 公交线路图-数据结构课程设计C++实现
  14. 严重的PHP缺陷可导致QNAP NAS 设备遭RCE攻击
  15. GRE单词积累(1)
  16. java火焰纹章攻略女神之剑_火焰纹章风花雪月图文攻略 主线流程+角色培养+转职系统 白云之章女神再生仪式②-游侠网...
  17. python 发送带附件邮件到钉钉邮箱+邮件内容带有表格
  18. 打造高效的项目团队,促进项目进度管理
  19. iOS22 地图定位- 苹果自带地图
  20. A - 可以教学姐画画嘛QAQ

热门文章

  1. serveless 思想 Midway.js 框架使用教程(四)
  2. iOS 打包系统构建加速
  3. 日常记录20191129
  4. 中山大学计算机专业研究生报录比,中山大学考研报录比
  5. nodejs+express+mysql 之 简单的在线HTML编辑器
  6. 从个人喜好的角度 来聊聊Note7和iPhone7 Plus
  7. Linux基于qt的开题报告,基于qt图像的开题报告
  8. 避免吸收别人负能量的四种方法
  9. 如何解决灾难性遗忘和概念漂移这两个问题?
  10. windows常见的命令操作大全