环境:RHEL 6.4 + Oracle 11.2.0.4

目录:

一、闪回查询

二、闪回事物

三、闪回表

四、Flashback Data Archive

五、闪回数据库

Reference

一、闪回查询

```
-- 初始化参数undo_retention
undo_retention=1800 (1800s=0.5h),若条件允许,可以适当调大此参数。
-- 是否强制保留undo_retention的时间
select tablespace_name, retention from dba_tablespaces where tablespace_name like 'UNDO%';
alter tablespace undotbs1 retention guarantee;
```

1.1 闪回查询举例

select count(1) from t1 as of timestamp systimestamp - interval '5' minute;
```
--操作T1表删除一条记录
SQL> select count(1) from t1;
COUNT(1)
----------
100
SQL> delete from t1 where id=1;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select count(1) from t1;
COUNT(1)
----------
99
--闪回查询5分钟之前T1的状态,重新插入误删除的那条记录。
SQL> select count(1) from t1 as of timestamp systimestamp - interval '5' minute;
COUNT(1)
----------
100
SQL> insert into t1 select * from t1 as of timestamp systimestamp - interval '5' minute where id = 1;
1 row created.
SQL> commit;
Commit complete.
SQL> select count(1) from t1;
COUNT(1)
----------
100
```

1.2 闪回版本查询举例

```
--得到当前的SCN
select dbms_flashback.get_system_change_number from dual;
--Get Current SCN:3218516
--更新操作
update t1 set contents = 'AAA' where id = 1;
commit;
update t1 set contents = 'BBB' where id = 1;
commit;
select dbms_flashback.get_system_change_number from dual;
--Get Current SCN:3218522
--删除,插入,更新操作
delete from t1 where id = 1;
commit;
insert into t1 values(1,1,'CCC');
commit;
update t1 set contents = 'DDD' where id = 1;
commit;
select dbms_flashback.get_system_change_number from dual;
--Get Current SCN:3218530
```
查询SCN在3218516 and 3218530之间的行id=1的完整历史:
```
select versions_startscn, versions_endscn, versions_xid, versions_operation, id, contents
from t1
versions between scn 3218516 and 3218530
where id = 1;

VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID V ID CONTENTS


      3218529                 01001700D0090000 U          1 DDD
3218526 3218529 09000500AD0A0000 I 1 CCC
3218524 0A001C00D3090000 D 1 BBB
3218521 3218524 02002100B60A0000 U 1 BBB
3218518 3218521 08001800B60A0000 U 1 AAA
3218518 1 rMLTDXxxqXOZnqYRJwInlGfGBTxNkAszBGEUGELqTSRnFjRGbi

6 rows selected.

<h1 id="2"> 二、闪回事物 </h1>
flashback_transaction_query包含对数据库执行的所有更改,包括DDL操作。
由于undo表空间有限,因此flashback_transaction_query中只包含一部分事物。
<h2 id="2.1">2.1 闪回事物查询的先决条件</h2>必须先启用重做日志流的其他日志记录。闪回事物查询既需要增强的重做信息,也需要撤销信息。

--开启重做日志流的其他日志记录

alter database add supplemental log data;

alter database add supplemental log data(primary key) columns;

--赋予相关权限给操作闪回事物的用户

grant execute on dbms_flashback to jingyu;

grant select any transaction to jingyu;

<h2 id="2.2">2.2 闪回事物查询</h2>

select start_scn, commit_scn, logon_user, operation, table_name, undo_sql

from flashback_transaction_query

where xid = hextoraw('05000E00C70B0000');

START_SCN COMMIT_SCN LOGON_USER OPERATION TABLE_NAME UNDO_SQL


3528038 3528039 JINGYU INSERT T1 delete from "JINGYU"."T1" where ROWID = 'AAAVvOAAFAAAACHAAA';

3528038 3528039 JINGYU BEGIN

<h1 id="3"> 三、闪回表 </h1>
核心命令:

--删除表记录

delete from t1;

commit;

--需要启用row movement

alter table t1 enable row movement;

--闪回表T1

flashback table t1 to timestamp systimestamp - interval '3' minute;

实际操作过程如下:

SQL> delete from t1;

100 rows deleted.

SQL> commit;

Commit complete.

--由于未启用row movement,闪回表会报错ORA-08189:

SQL> flashback table t1 to timestamp systimestamp - interval '3' minute;

flashback table t1 to timestamp systimestamp - interval '3' minute

*

ERROR at line 1:

ORA-08189: cannot flashback the table because row movement is not enabled

SQL> alter table t1 enable row movement;

Table altered.

SQL> flashback table t1 to timestamp systimestamp - interval '3' minute;

Flashback complete.

SQL> select count(1) from t1;

COUNT(1)

   100

SQL> alter table t1 disable row movement;

Table altered.

<h1 id="4"> 四、Flashback Data Archive </h1>
如果数据库中的一部分表需要长的多的保留期。
Flashback Data Archive仅记录UPDATE和DELETE语句,不记录INSERT语句。

--创建表空间(可以使用现有表空间,但Oracle建议最好使用专用表空间)

create tablespace fda1;

create tablespace fda2;

create tablespace fda3;

--创建闪回归档

create flashback archive fa_config tablespace fda1 retention 10 year;

create flashback archive fa_data tablespace fda1 retention 1 year;

--数据字典视图dba_flashback_archive, dba_flashback_archive_ts查看闪回归档、闪回归档和表空间的关系

set linesize 1000

col FLASHBACK_ARCHIVE_NAME for a20

col CREATE_TIME for a34

col LAST_PURGE_TIME for a34

col OWNER_NAME for a20

select * from dba_flashback_archive;

select * from dba_flashback_archive_ts;

--权限 flashback archive administer(有这个系统权限才可以创建和修改FDA),flashback archive(有这个对象权限才能启用对表的跟踪)

--给闪回归档增加表空间

alter flashback archive fa_data add tablespace fda3 quota 50M;

--清除归档fa_data归档中2015年11月17日前的所有行:

alter flashback archive fa_data purge before timestamp to_timestamp('2015-11-16 00:00:00','YYYY-MM-DD HH24:MI:SS');

--表分配到闪回归档

alter table T1 flashback archive fa_config;

alter table T2 flashback archive fa_data;

--查询DBA_FLASHBACK_ARCHIVE_TABLES分析使用FDA的表

select * from dba_flashback_archive_tables;

--查询5年前T1表的数据量(对用户而言,AS OF查询使用的是FDA还是UNDO表空间是完全透明的)

select count(1) from t1 as of timestamp systimestamp - interval '5' year;

<h1 id="5"> 五、闪回数据库 </h1>
<h2 id="5.1">5.1 配置闪回数据库</h2>
5.1.1 开启闪回数据库:

--必须配置闪回恢复区

show parameter db_recovery

--必须归档模式

shutdown immediate;

startup mount exclusive;

alter database archivelog;

--设置闪回保留的目标时间(只是target,2880分钟=两天)

alter system set db_flashback_retention_target=2880;

--开启数据库闪回

alter database flashback on;

--打开数据库

alter database open;

5.1.2 关闭闪回数据库:

startup mount exclusive;

alter database flashback off;

alter database open;

<h2 id="5.2">5.2 使用闪回数据库</h2>
RMAN和SQL>提示符下都可以执行闪回。但二者有些细微差别。
例如RMAN可以基于线程和特定日志号进行闪回。

--RMAN基于线程和特定日志号进行闪回举例

RMAN> flashback database to sequence=307 thread=2;

--在SQL>提示符下,闪回到一小时前的状态

shutdown immediate;

startup mount exclusive;

flashback database to timestamp sysdate-(1/24);

--read only打开检查确定是要恢复的状态

alter database open read only;

--最后resetlogs打开

alter database open resetlogs;

--从闪回数据库排除表空间(创建时指定或后期修改flashback off)

alter tablespace dbs_d_test flashback off;

--若重新启用表空间闪回,需要打开flashback后,重新启动数据库。

alter tablespace dbs_d_test flashback on;

--使用担保还原点fla_init

create restore point fla_init guarantee flashback database;

flashback database to restore point fla_init;

<h2 id="5.3">5.3 监视闪回数据库</h2>

--查询可以将数据库闪回到多久之前

select * from v$flashback_database_log;

--查询数据库的闪回状态

select current_scn, flashback_on from v$database;

--监视每小时生成闪回数据的速率

select * from v$flashback_database_stat;

<h1 id="6">Reference</h1>
- OCP 认证考试指南 (1Z0-053)[M]. 清华大学出版社, 2010.

Oracle配置和使用闪回的更多相关文章

  1. Oracle的回收站和闪回查询机制(一)

    实际工作中,我们经常会遇到一些情况,误删除某些表或某些表的某些记录,这时候就需要我们将这些记录重新插入进去.如何才能解决这个问题呢? Oracle的Flashback query(闪回查询)为我们解决 ...

  2. oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复

    我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...

  3. Oracle学习(十三):闪回

    1.知识点:能够对比以下的录屏进行阅读 SQL> --1. 错误地删除了记录 SQL> --2. 错误地删除了表 SQL> --3. 查询历史记录 SQL> --4. 怎样撤销 ...

  4. Oracle Flashback Technology【闪回技术】

    -------------------------与其他数据库相比,Oracle的闪回让开发者多了一条选择的路. Flashback的目的 先看下Oracle官方文档中的解释: Oracle Flas ...

  5. oracle数据库flashback系列--闪回数据库在dataguard中的使用

    很多人在学习flashback database这个oracle技术的时候,都会有一个疑问,就是如果我只有一个数据库作为生产库的话,是否有这样的业务需求导致我们要把数据库闪回到以前的时间点?以及这样做 ...

  6. Oracle的回收站和闪回查询机制(二)

    上一篇中讲诉了Oracle中一些闪回查询(Flashback Query),这是利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).要注意的是,Flashback Query仅仅是查询以前 ...

  7. oracle recyclebin详解(闪回删除的表)

    今天在SOA应用数据库上运用DBMS_REDEFITION包进行在线非分区表转换分区表操作时,本想DROP掉建的临时表cube_scope_temp不小心后面忘记加"temp"直接 ...

  8. oracle 单实例DG(闪回技术四)

    一,flashback Oracle Flashback技术是一组数据库特性,它可以让你查看数据库对象的过去状态,或者将数据库对象返回到以前的状态,而无需使用基于时间点的介质恢复.根据数据库的变化,闪 ...

  9. Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据

    闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上.实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO命令就可以了解这些信息.用 ...

随机推荐

  1. Python之路Day14--html

    本节内容: 一.HTML 二.CSS 三.JS HTML 1.一套规则,浏览器认识的规则. 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ****** - 数据 ...

  2. WPF之命令浅谈

    一.认识命令 1.1命令的特点 提到“命令”,我们应该想到命令的发出者,命令的接受者,命令的内容,准备工作,完成任务,回报工作...与事件中的发送者,接受者,消息,处理,处理,处理一一对应,如果是单纯 ...

  3. 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)

    前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...

  4. 剑指Offer面试题:4.从尾到头打印链表

    一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...

  5. 《CLR.via.C#第三版》第二部分第12章节 泛型 读书笔记(六)

    终于讲到泛型了.当初看到这个书名,最想看的就是作者对泛型,委托,反射这些概念的理解.很多人对泛型的理解停留在泛型集合上,刚开始我也是,随着项目越做越多,对待泛型的认识也越来越深刻. 泛型的概念:泛型是 ...

  6. 企业IT管理员IE11升级指南【4】—— IE企业模式介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  7. Android学习——uses-sdk标签详解

    1 前言 我们都知道,Android的版本在不断的迭代,并且每个版本都加入了不同的新特性.那么随着Android的用户量越来越多,Android的开发人员就必须熟悉Android各个版本的特性并且确保 ...

  8. 我的LESS编译方案

    背景 近期项目前端决定使用less,简单介绍一下,详细信息有兴趣查看官方文档(http://www.lesscss.net/article/home.html) LESSCSS是一种动态样式语言,属于 ...

  9. 微冷的雨之Java中的多线程初理解(一)

    在讲解多线程前,我们必须理解什么是多线程?而且很多人都会将进程和线程做对比. 进程和线程 进程:进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在 ...

  10. 《Entity Framework 6 Recipes》中文翻译系列 (42) ------ 第八章 POCO之使用POCO

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第八章 POCO 对象不应该知道如何保存它们,加载它们或者过滤它们.这是软件开发中熟 ...