--- 说明闪回数据库

--- 使用闪回表将表内容还原到过去的特定时间点

--- 从删除表中进行恢复

--- 使用闪回查询查看截止到任一时间点的数据库内容

--- 使用闪回版本查询查看某一行在一段时间内的各个版本

--- 使用闪回事务查询查看事务处理历史记录或行

会还原表及其关联对象(如索引、约束条件、触发器等)中的数据。

所谓闪回表,就是将表里的数据回退到历史的某个时间点,比如回退到用户误删除数据之前的时间点,从而将误删除的数据恢复回来,在这个操作过程中,数据库仍然可用而且不需要额外的空间。

闪回表利用的是UNDO表空间里记录的数据被改变前的值,因此,如果闪回表时所需要的
undo数据,由于保留时间超过了初始化参数undo_retention所指定的值,从而导致该undo数据库数据被其他事务覆盖的话,那么就不能恢复
到指定的时间了,除非在UNDO表空间上指定了retention guarantee选项。

使用闪回表,可将一组表恢复到特定的时间点,而不需要执行传统时间点恢复操作。

在数据库联机时,通过只回退对指定表及其相关对象所做的更改,闪回表操作可原位完成。

闪回表语句可作为单个事务处理来执行。必须成功闪回所有表,否则会回退整个事务处理。

· 使用闪回表,可将一个或多个表恢复到特定的时间点,而不需要还原备份

· 从回滚段表空间检索数据后可执行闪回表操作

· 执行闪回表操作需要FLASHBACK TABLE 权限

· 必须对要执行闪回操作的表启动行移动

//由于闪回表的操作会修改表里的数据,从而有可能引起数据行的移动。比如某一行数据当前在A数据块里,而在把表闪回到以前的某个时间点时,在那个时间上,该行
数据位于B数据块里,于是在闪回表的操作中,数据行从当前A数据块转移到B数据块,因此在闪回表之前,必须启动数据行移动特性。

闪回表:注意事项

·  整个FLASHBACK TABLE 语句是在一个事务处理中执行的。数据操作语言(DML)互斥锁。

·  会保留所有现有的索引。不会重新创建删除的索引。还会自动保留相关的提交时实体化视图。

·  FLASHBACK TABLE 语句只要不违反任何表约束条件,就闪回FLASHBACK TABLE 语句中指定的表。
不能对系统表、远程表和固定表执行闪回表操作。

1. 实验:闪回表用法

SYS@ORCL>conn tyger/tyger
Connected.

TYGER@ORCL>create table tyger as select * from scott.emp;
Table created.

TYGER@ORCL>select count(*) from tyger;
  COUNT(*)
----------
        14

TYGER@ORCL>select dbms_flashback.get_system_change_number from dual;              
 //查看当前系统SCN

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1045621

TYGER@ORCL>delete from tyger where rownum <5;
4 rows deleted.

TYGER@ORCL>commit;
Commit complete.

TYGER@ORCL>select count(*) from tyger;
  COUNT(*)
----------
        10

TYGER@ORCL>alter table tyger enable row movement;                  
  //启用表tyger的行移动
Table altered.

TYGER@ORCL>flashback table tyger to scn 1045621;
Flashback complete.

TYGER@ORCL>select count(*) from tyger;
  COUNT(*)
----------
        14

实验2:启用闪回数据库

1. 设置闪回恢复区保留时间3天

SYS@ORCL>show parameter flashback
NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
db_flashback_retention_target        integer                          1440              //db_flashback_retention_target 用于定义一个时间上限  单位是分钟

SYS@ORCL>alter system set db_flashback_retention_target=4320;

SYS@ORCL>show parameter flashback
NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
db_flashback_retention_target        integer                          4320

2. 查看当前闪回状态,未开启闪回,开启闪回(mount状态开启闪回)

SYS@ORCL>select flashback_on from v$database;
FLASHBACK_ON
------------------
NO

SYS@ORCL>alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38759: Database must be mounted by only one instance and not open.

SYS@ORCL>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ORCL>startup mount;
ORACLE instance started.

Total System Global Area  314572800 bytes
Fixed Size                  1219160 bytes
Variable Size             121636264 bytes
Database Buffers          188743680 bytes
Redo Buffers                2973696 bytes
Database mounted.

3. 开启闪回,必须在归档模式下开启 

SYS@ORCL>archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     29
Next log sequence to archive   31
Current log sequence           31

SYS@ORCL>alter database flashback on;
Database altered.

4. 打开数据库,查看闪回状态

SYS@ORCL>alter database open;
Database altered.

SYS@ORCL>select flashback_on from v$database;
FLASHBACK_ON
------------------
YES

实验3:闪回数据库用途                      -----实验参考eygle 的循序渐进oracle

SYS@ORCL>conn tyger/tyger
Connected.
TYGER@ORCL>select count(*) from tyger;
  COUNT(*)
----------
         1

TYGER@ORCL>select count(*) from test;
  COUNT(*)
----------
        14

TYGER@ORCL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.

TYGER@ORCL>select sysdate from dual;
SYSDATE
-------------------
2014-03-11 15:47:14

TYGER@ORCL>truncate table tyger;
Table truncated.

TYGER@ORCL>select sysdate from dual;
SYSDATE
-------------------
2014-03-11 15:47:38

TYGER@ORCL>truncate table test;
Table truncated.

TYGER@ORCL>select sysdate from dual;
SYSDATE
-------------------
2014-03-11 15:48:03

闪回需要在Mount状态下进行,可以指定Timestamp/SCN/Sequence进行闪回。

首先将数据库闪回到第一时间点,以Redo only的方式打开数据库:

SYS@ORCL>startup mount;
ORACLE instance started.

Total System Global Area  314572800 bytes
Fixed Size                  1219160 bytes
Variable Size             130024872 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.

SYS@ORCL>flashback database to timestamp
  2  to_timestamp('2014-03-11 15:47:14','yyyy-mm-dd hh24:mi:ss');
Flashback complete.

SYS@ORCL>alter database open read only;                
    //以read only原因:如果数据恢复的不够理想,可以关闭数据库继续进行恢复
Database altered.

SYS@ORCL>select count(*) from tyger.tyger;
  COUNT(*)
----------
         1

SYS@ORCL>select count(*) from tyger.test;
  COUNT(*)
----------
        14

数据恢复不理想,继续进行恢复     ---前提:以redo only打开数据库

SYS@ORCL>startup mount;
ORACLE instance started.

Total System Global Area  314572800 bytes
Fixed Size                  1219160 bytes
Variable Size             130024872 bytes
Database Buffers          180355072 bytes
Redo Buffers                2973696 bytes
Database mounted.

SYS@ORCL>flashback database to timestamp
  2  to_timestamp('2014-03-11 15:47:38','yyyy-mm-dd hh24:mi:ss');
Flashback complete.

SYS@ORCL>alter database open read only;
Database altered.

SYS@ORCL>select count(*) from tyger.tyger;
  COUNT(*)
----------
         0

SYS@ORCL>select count(*) from tyger.test;
  COUNT(*)
----------
        14

如果数据恢复确认完成,就可以以resetlogs打开数据库,恢复工作       ------重置日志,不能再flashback至resetlogs之前的时间点

SYS@ORCL>alter database open resetlogs;
Database altered.

oracle闪回表详解的更多相关文章

  1. oracle 闪回功能详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  2. Oracle闪回技术详解

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

  3. Oracle 闪回表实验

    工:闪回表实验 1.结构测试表flb_test,数据不小于10000行: TEST_USER1@PROD>create table flb_test(id number,dd date); Ta ...

  4. Oracle闪回表

    Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小 ...

  5. MySQL Flashback 闪回功能详解

    1. 简介 mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据.在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos).比如忘了带wh ...

  6. oracle的 分表 详解 -----表分区

    此文从以下几个方面来整理关于分区表的概念及操作:         1.表空间及分区表的概念         2.表分区的具体作用         3.表分区的优缺点         4.表分区的几种类 ...

  7. 【转】oracle的 分表 详解 -----表分区

    转载:https://www.cnblogs.com/congcidaishangjiamianju/p/8045804.html 一 表空间及分区表的概念 表空间: 是一个或多个数据文件的集合,所有 ...

  8. Oracle闪回flashback

    参考资料:Using Oracle Flashback Technology Oracle 11g的新特性闪回操作 闪回查询 闪回查询 闪回版本查询 闪回事务查询 闪回数据 闪回表 闪回删除 闪回数据 ...

  9. Oracle闪回详解

      1.问题定义 闪回是dba做的工作.现在也可授权给某个用户. 闪回的定义:就是将用户错误的操作回恢到以前的状态.即使你的事务提交的commit. 如果你删除了一个表.Drop table(DDL) ...

随机推荐

  1. ORM之PetaPoco入门(二)--Petapoco基本用法

    1. Petapoco基本用法 1.1. 创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件.命名为:PetapocoTest. 程 ...

  2. ruby 疑难点之—— attr_accessor attr_reader attr_writer

    普通的实例变量 普通的实例变量,我们没法在 class 外面直接访问 #普通的实例变量,只能在 class 内部访问 class C1 def initialize(name) @name = nam ...

  3. [改善Java代码]注意方法中传递的参数要求(replaceAll和replace的区别)

    有这样一个简单的需求:写一个方法,实现从原始字符串中删除与之匹配的所有子字符串,比如"蓝蓝的天,白云飘"中,删除"白云飘",输出"蓝蓝的天," ...

  4. css3 选择器记

    css3 选择器 根据所获取页面中元素的不同,把css3选择器分为五大类: 基本选择器 层次选择器 伪类选择器 动态伪类选择器 目标伪类选择器 语言伪类选择器 UI元素状态伪类选择器 结构伪类选择器 ...

  5. AngularJS Tabular Data with Edit/Update/Delete

    效果 首先,我们先建立一些数据,当然你可以从你任何地方读出你的数据 var app = angular.module('plunker', ['ui.bootstrap']); app.control ...

  6. Exception与相关

    怎么写一个exception类, 直接抛出去,主要是写一个构造函数里面的Msg消息,这个可以提前写出来. try...catch..finally 一般都是一起的,try 中有异常执行语句, catc ...

  7. 检测SqlServer服务器内存是否瓶颈

    性能监视器临视以下数据: Memory->Available MBytes  可用的内存  windows系统不低于1G,如果可用内存不多,则系统要求sqlserver释放内存 Paging F ...

  8. VR开发中性能问题—OculusWaitForGPU

    http://blog.csdn.net/cartzhang/article/details/50788894 VR开发中性能问题-OculusWaitForGPU 本文章由cartzhang编写,转 ...

  9. OC10_文件练习

    // // TextHander.h // OC10_文件练习 // // Created by zhangxueming on 15/6/19. // Copyright (c) 2015年 zha ...

  10. @Resource和@Autowired的区别

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...