Flashback data Archive

1、说明

Flashback data archive在它的有效期内将保存事物改变的信息。

FDA包含一个或者多个表空间,我们可以创建多个FDA,当以sysdba登录时,可以指定default FDA

默认情况下,FDA关闭的,当具备以下条件时,我们可以启用FDA。

1、you have the flashback archive object

privilege on the flashback archive to use for that table.

2、the table is neither nested ,clustered temporary remote or

external.

3、table contains wither long nor nested columns

当FDA启动后,只有具有Flashbave archive

administer权限的用户或者sysdba登录的用户才可以禁用FDA

等选择闪回数据归档为了闪回一个特殊的表的时候,需要这个表满足数据保留要求和归档保留时间,在你所拥有的闪回对象的权限

--查看用户sunying的权限

select * from dba_sys_privs where grantee='SUNYING';

--赋予该用户flashback archive 权限

grant flashback archive administer to sunying

在oracle 10g中的flashback包括 flashback version query\transaction

query\database\table\drop 等。这些闪回技术当中,除了flashback

database依赖于闪回日志之外,其他的技术都是依赖于undo撤销数据,都与数据库初始化参数undo_retention密切相关。它们是从撤销数据中读取信息来构造旧数据的,这就有个限制,undo中的信息不能被覆盖,但是undo段是循环使用的,只要事物提交,之前的undo信息就可能被覆盖,虽然可以通过undo_retention等参数来延长undo的存活期,但这个参数会影响所有的事物,设置过大,可能导致undo

tablespace快速膨胀。

oracle 11g中的flashback增加了:flashback data

archive特性,该技术与之前的flashback实现机制不同,通过将变化数据令外存储到创建的闪回归档区(flashback

archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略并且可以根据需要指定那些数据库对象需要保存历史变化数据,而不是将数据库中所有对象的变化数据都保存下来,这样可以极大减少空间需求。

Flashback data archive并不是记录数据库的所有变化,而是记录了指定表的数据变化,所以flashback

data archive是针对对象的保护,是flashback database的有力补充。

通过flashback data

archive,可以查询指定对象的任何时间点(只要满足保护策略)的数据,而且不需要用到undo,这在有审计需要的韩靖,或者是安全性特别重要的高可用数据库中,是一个非常好的特性,缺点就是如果表变化非常频繁,对空间的要求可能很高。

2、闪回数据归档区

闪回数据归档区是闪回数据归档的历史数据存储区域,在一个系统中,可以有一个默认的闪回数据归档区,也可以创建其他许多的闪回数据归档区域。每一个闪回数据归档区都可以有一个唯一的名称,同时,每一个闪回数据归档区都对应了一定的数据保留策略。例如可以配置归档区flashback_data_archive_1中的数据保留期为1年,而归档区Flashback_data_archive_2的数据保留期为2天或者更短,以后如果将表防盗对应的闪回数据归档区,则就按照该归档区的保留策略来保留历史数据。

闪回数据归档区是一个逻辑概念,是从一个或者多个表空间中拿出一定的空间,来保存表的修改历史,这样就摆脱了对undo撤销数据的依赖,不利用undo就可以闪回到归档策略内的任何一个时间点上。

Flashback archive相关数据字典

* 代表dba或者user

*_flashback_archive:展示闪回数据归档文件的信息

*_flashback_archive_ts:展示闪回数据归档文件所在的表空间

*_flashback_archive_tables:展示闪回数据归档文件中的表的信息

select * from dba_flashback_archive;

select * from user_flashback_archive;

select * from dba_flashback_archive_ts;

select * from user_flashback_archive_ts;

select * from dba_flashback_archive_tables;

select * from user_flashback_archive_tables;

Flashback archive的后台进程

oracle11g为Flashback data

archive特性专门引入了一个新的后台进程FBDA,用于将追踪表(traced table,也就是将指定使用flashbadata

archive的table)的历史变化数据转存到闪回归档区。

--flashback archive的后台进程

select name,description from v$bgprocess where name='FBDA'

select * from v$bgprocess where name='FBDA'

Flashback archive的限制条件

1)Flashback data archive只能在ASSM的tablespace上创建

2)Flashback data

archive要求必须使用自动undo管理,即undo_management参数为auto。

show parameter undo_management;

3、Flashback data archive的相关操作

3.1 创建一个闪回归档

create flashback archive

1)闪回数据归档区的名称

2)第一个闪回数据归档区的名称

3)(可选)在第一个表空间中定义闪回数据归档区的最大值,除非你的空间引用了第一个表空间是没有限制的,否则必须制定这个值

4)保存时间(保证表在归档区的存储日期)

创建FDA时,可以执行以上4个参数,没有执行flashback

archive的配额,默认为unlimited,这里的配额,指的是用户对表空间的配额。

如果以sysdba登录,还可以制定default flashback data

archive,如果美欧制定,也可以通过alter flashback archive命令来指定。

--查看当前的表空间

select * from v$tablespace

--查看数据文件的存放位置

select * from dba_data_files

--创建几个测试表空间

create tablespace FDA1 datafile

'D:/APP/SUNYING/ORADATA/ORCL/FDA01.dbf' size 100M;

create tablespace FDA2 datafile

'D:/APP/SUNYING/ORADATA/ORCL/FDA02.dbf' size 100M;

create tablespace FDA3 datafile

'D:/APP/SUNYING/ORADATA/ORCL/FDA03.dbf' size 100M;

create tablespace FDA4 datafile

'D:/APP/SUNYING/ORADATA/ORCL/FDA04.dbf' size 100M;

--创建一个默认的flashback archive,配额为10M,数据保留期为1年

create flashback archive default fla1 tablespace fda1 quota 10M

retention 1 year;

--默认flashback archive只能有一个

create flashback archive default fla3 tablespace fda1 quota 10M

retention 1 year;

ERROR at line 1:

ORA-55609: Attempt to create duplicate default Flashback

Archive

这里报错了,我们可以是使用alter flashback 来修改默认的Flashback Archive.

测试一下:

SQL> conn / as sysdba;

Connected.

SQL> revoke unlimited tablespace from dvd;

Revoke succeeded.

SQL> alter user dvd quota 10m on fda4;

User altered.

SQL> conn dvd/dvd;

Connected.

SQL> create flashback archive fla5 tablespace fda4

retention 1 day;

create flashback archive fla5 tablespace fda4 retention 1 day

ERROR at line 1:

ORA-55621: User quota on tablespace "FDA4" is not enough for

Flashback Archive

报错。

修改用户的配合,在创建,成功:

SQL> conn / as sysdba;

Connected.

SQL> grant unlimited tablespace to dvd;

Grant succeeded.

SQL> conn dvd/dvd;

Connected.

SQL> create flashback archive fla5 tablespace fda4

retention 1 day;

Flashback archive created.

3.2 altering a flashback data archive

修改语句 alter flashback archive:

1)修改flashback data archive的保存时间

2)可以清除一些或者所有的数据

3)可以添加、修改、删除表空间。

注意:

删除flashback data archive的所有表空间会引起一个错误。

如果你使用sysdba登录,才可以膝盖默认的flashback archive。

先用我们具有flashback archive administer 权限的用户试试:

SQL> conn dvd/dvd;

Connected.

SQL> alter flashback archive fla1 set default;

alter flashback archive fla1 set default

*

ERROR at line 1:

ORA-55611: No privilege to manage default Flashback Archive

报错,没有权限,用sysdba 测试成功:

SQL> conn / as sysdba;

Connected.

SQL> alter flashback archive fla1 set default;

Flashback archive altered.

注意一点,只能有一个默认的Flashback archive.

SQL> select flashback_archive_name name,

status from dba_flashback_archive;

NAME STATUS

---------- -------

FLA1 DEFAULT

FLA2

当前默认的Flashback Archive 是FLA1,我们将默认改成FLA2,在查看:

SQL> alter flashback archive fla2 set default;

Flashback archive altered.

SQL> select flashback_archive_name

name, status from dba_flashback_archive;

NAME STATUS

---------- -------

FLA1

FLA2 DEFAULT

--为已经存在的flashback archive添加表空间,并制定配额

alter flashback archive fla1 add tablespace fda3

quota 20M;

--为已经存在的flashback archive添加表空间,不限定配额,即需要多少用多少

alter flashback archive fla1 add tablespace fda4;

--修改已经存在的flashback archive配额

alter flashback archive fla1 modify tablespace fda1 quota

20m;

--修改配额不受限制

alter flashback archive fla1 modify tablespace fda1;

--修改flashback archive 的retention time

alter flashback archive fla1 modify retention 2 year;

alter flashback archive fla1 modify retention 2 month;

alter flashback archive fla1 modify retention 1 day ;

--将表空间从flashback archive 中移除,注意这里仅仅是移除flashback archive

中的信息,表空间不会被删除

alter flashback archive fla1 remove tablespace fda4;

--清空flashback archive中的所有历史记录

alter flashback archive fla1 purge all;

--清空flashback archive中超过1天的历史数据

alter flashback archive fla1 purge before timestamp

(systimestamp-interval '1' day);

--清空flashback archive 中指定的scn之前的所有历史数据

select current_scn from v$database;

alter flashback archive fla1 purge before scn 18487507769;

3.3 dropping a flashback data archive

删除一个flashback data archive 使用drop flashback

archive语句,删除flashback archive只是删除历史数据,而不是删除表空间。

drop flashback archive fla2;

select * from dba_flashback_archive;

3.4 specifying the default flashback data archive

系统中没有默认的flashback data archive,如果使用sysdba登录,可以定义默认的flashback

data archive,整个系统中只有一个默认的flashback

archive,所有用户就只有这一个,并不是每个用户有一个。

--修改已经存在的flashback archive为default,但是默认的表空间就只有一个

alter flashback archive fla1 set default;

--在创建flashback archive时,指定default

create flashback archive default fla2 tablespace tbs1 quota 10m

retention 1 year;

3.5 enabling and disenabling flashback data archive

默认情况下,flashback archive对所有表都是disable的,如果你flashback

archive的权限在flashback

data archive中,你可以指定一个表enable。

enable

flashback archive一个表,要在create table 或者alter table 中包含一个 flashback

archive语句

在flashback

archive 子句中,你可以定义这个表的历史数据存放在flashback

data archive的那个flashback

archive中,如果没有指定就会存放到系统默认的flashback archive中,如果指定到一个不存在的flashback

archive中,会报错。

如果你enable

一个表的flashback archive,但是AUM(automatic undo

managed)是disable,当你试图修改这个表的时候,会报ORA-55614。

如果一个表的flashback archive是enabled,但是你试图enable这个表在另外一个flashback

data archive,会报错。

在一个表enabled之后,除非你有 flashback archive administer

system权限或者使用sysdba权限登录,否则不能disable 这张表。

disable一个表的flashback archive,需要指定 no flashback archive 在这个alter

table语句中,(在create table中不是必要的)

--创建table,使用默认的 flashback data archive

create table tt(id number) flashback archive;

--创建table,使用执行的flashback data archive存储历史数据

create table tt(id number) flashback archive fla1;

--对表启用flashback archive,并使用默认的flashback archive

alter table t1 flashback archive;

--禁用表的flashback archive;

alte table t1 no flashback archive;

--对表启用flashback archive,并指定flashback archive区

alter tbale t1 flashback archive fla1;

4 启用表的flashback data archive支持的DDL语句

flashback

data archive 支持ddl语句,包括修改表的定义,或者是删除数据,例如:

1)alter table

语句:添加,删除重命名或修改列;添加、删除或者是重命名约束;删除或者truncate一个分区或者子分区;

2)truncate 表的语句

3)重命名一个表

启用flashback data archive

的表上不支持的语句,会报ORA-55610错误:

1)alter table statment that includes an upgrade table

clause,with or without an including data clause;

2)alter table statment that moves or exchanges a partition or

subpartition operation

3)drop table statement;

如果你必须使用

flashback data archive

所不支持的ddl语句,使用DBMS_Flashback_archive.diassociate_fba

存储过程分裂基本表从flashback data archive 中

to

reassociate the flashback data archive with the

base table afterward,use the DBMS_Flashback_archive.reassociate_fba

procedure.

如果必须在已经启用的flashback archive

的表上执行这些不支持的DDL操作,可以使用DBMS_Flashback_archive.diassociate_fba先将表分离出来,待操作结束以后,在添加进去。

DBMS_Flashback_archive包包含2个简单的存储过程,reassociation和diassociation 在FDA

enable table from\with its undering FDA respectively;

在flashback area中,会有一张历史表记录着我们启动fa表的所有操作,我们可以通过如下sql来查看他们之间的映射:

SQL> SELECT table_name,archive_table_name,status

from dba_flashback_archive_tables;

TABLE_NAME ARCHIVE_TABLE_NAME STATUS

---------- -------------------- --------

ANQING SYS_FBA_HIST_78429 ENABLED

怀宁 SYS_FBA_HIST_78431 ENABLED

ORA SYS_FBA_HIST_78448 ENABLED

DVD SYS_FBA_HIST_78456 ENABLED

HUAINING SYS_FBA_HIST_78464 ENABLED

QS SYS_FBA_HIST_78472 ENABLED

FA SYS_FBA_HIST_78484 ENABLED

7 rows selected.

我们要执行那些不支持的DDL,就需要用dbms_flashback_archive禁用他们之间的映射关系,在操作,操作完在用该包启用他们。

关于dbms_flashback_archive包的使用,参考官网: DBMS_FLASHBACK_ARCHIVE

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/d_flashb_archive.htm#ARPLS72464

oracle有bug

5、一个用Flashback data archive恢复数据的测试

这个测试使用之前的Flashback Archive: fla1.

创建测试表:

SQL> create table fa(id number) flashback

archive;

Table created.

插入数据:

SQL> declare

2 i number;

3 begin

4 for i in 1..100 loop

5 insert into fa

values(i);

6 end loop;

7 commit;

8 end;

9 /

PL/SQL procedure successfully completed.

SQL> select count(*) from fa;

COUNT(*)

----------

100

查询时间:

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

tm from dual;

TM

-------------------

2011-05-11 15:33:35

在update 一次数据:

SQL> update fa set id=200 where id

<50;

49 rows updated.

SQL>commit;

在查询一次时间:

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')

tm from dual;

TM

-------------------

2011-05-11 15:35:23

使用Flashback Archive查询1分钟之前的数据:

SQL> select count(*) from fa as of timestamp

(systimestamp - interval '1'minute);

COUNT(*)

----------

100

使用Flashback Archive查询10分钟之前的数据:

SQL> select count(*) from fa as of timestamp

(systimestamp - interval '10'minute);

COUNT(*)

----------

0

这里显示为0. 因为我们还没有做DML 操作。

或者使用时间来查:

SQL> select count(*) from fa as of timestamp

to_timestamp('2011-05-11 15:35:23','yyyy-mm-dd hh24:mi:ss');

COUNT(*)

----------

100

SQL> delete from fa;

100 rows deleted

SQL> commit;

Commit complete.

SQL> select count(*) from fa as of

timestamp (systimestamp - interval '1'minute);

COUNT(*)

----------

100

根据时间的不同,查询的结果也不一样。 下面我们来确认下这个问题:

SQL> SELECT * from

dba_flashback_archive_tables;

TABLE_NAME OWNER_NAME FLASHBACK_ARCHI

ARCHIVE_TABLE_NAME STATUS

---------- ---------- --------------- --------------------

--------

FA SYS FLA1 SYS_FBA_HIST_78484 ENABLED

从这个结果,可以看出,在Flashback archive对应的FA表的历史表是SYS_FBA_HIST_78484。

该表保存了FA表的所有的操作记录:

SQL> select count(*) from SYS_FBA_HIST_78484;

COUNT(*)

----------

149

SQL> desc SYS_FBA_HIST_78484

Name Null? Type

-----------------------------------------

-------- ---------------

RID VARCHAR2(4000)

STARTSCN NUMBER

ENDSCN

oracle flashback6,【oracle】闪回flashback-11g-flashback data Archive相关推荐

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

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

  2. Oracle 原理: 闪回 flashback

    目录 一.9i中的闪回查询方法 二.10g的闪回版本查询方法 三.10g闪回事物查询方法和恢复数据 四.10g闪回表 五.10g闪回删除 六.10g闪回数据库 一.9i中的闪回查询方法 可以按照时间点 ...

  3. oracle 中的闪回

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

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

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

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

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

  6. Oracle 10g的闪回机制

    第5章Oracle 10g的闪回机制 5.1 简介 在Oracle中,对于提交的变化,是没有办法回退的.所以这时候就可能存在这样一种情况,对于表做了DML操作,并且在提交后才发现,对表的操作是错误的, ...

  7. oracle9i能闪回吗,[转]Oracle 9i的闪回查询概述

    key words: Oracle闪回 flash 1.Oracle 9i的闪回查询功能 在Oracle 9i之前,如果用户错误操作数据后,除了不完全恢复外,没有好的解决办法.Oracle 9i中提供 ...

  8. oracle之ORA-19815闪回空间爆满问题的处理方法

    闪回区爆满问题也是经常会遇到的问题,最关键的是闪回设置大小以及归档被默认存放在了闪回目录,恰巧今天又遇到了这个问题,就记录下处理步骤,仅供遇到这类问题的人参考. 一.错误现象描述 1)应用端错误信息 ...

  9. 如何打开oracle的回闪,Oracle如何开启闪回功能

    Oracle如何开启闪回 Oracle在9i版本的时候引入了闪回技术,在Oracle 10g已经全面提供了闪回功能,主要提供了快速简单恢复数据库误操作的数据的恢复方法,而不用从逻辑备份或物理备份中恢复 ...

  10. 使用闪回数据库(FLASHBACK DATABASE)和还原点(RESTORE POINT)

    这个章节讲述闪回数据库和还原点.作为数据保护策略整体的一部分,讨论配置,监控和维护这些特性. 1.闪回数据库,还原点和保证还原点概述 Oracle闪回数据库和还原点是相关的数据保护特性,让你可以按时间 ...

最新文章

  1. 开源点云实时压缩方案测试
  2. mpvue 转uni-app 操作记录
  3. Shell脚本中的并发
  4. 手动启动 oracle 服务
  5. jquery easyui dataGrid动态改变排序字段名
  6. 给定没有重复数字的序列,将其全排列
  7. antd新增一行页码不正确_antd-Table@4.x对rowKey属性的重构
  8. CCF 201403-2 窗口
  9. windows下git bash中文乱码解决办法
  10. python 文本相似度现状_python文本相似度分析
  11. python初学小游戏_python学习(小游戏)
  12. java考前复习之String 类
  13. flask异步操作_从Flask到FastAPI的平滑迁移
  14. 41 岁蚂蚁金服总裁助理去世; 华为首款 5G 手机欧洲上市;库克首谈 5G iPhone | 极客头条...
  15. 图像处理 - 滤波器 Filter
  16. BigDecimal——大十进制-货币型-双精度-精确运算
  17. 手机 省份证 归属地查询接口
  18. c语言 abs 不好用,c语言中 abs 和 fabs 不同吗?
  19. 清华计算机徐华简介,徐华
  20. 乙炔黑-离子液体复合修饰玻碳电极(AB-ILs/GCE)|离子液体修饰改性的多壁碳纳米管(MWNTs)

热门文章

  1. 开源的短视频生成和编辑工具 Open Chat Video Editor
  2. 公司以团队延误工期为由辞退_其他团队的延误造成的延误成本,第5部分
  3. 中小型机房在线监控—微信、短信及语音电话告警方案
  4. linux用户环境变量配置文件问题 profile 和 ~/.bashrc区别
  5. Conda和pip使用技巧
  6. JDK 1.8 免积分下载
  7. Swing图形界面 — “组件在容器中常见的五种布局(布局管理器)”
  8. cmd 显示tcp连接服务器,windows最大tcp连接数,windows查看tcp连接数
  9. c++贪吃蛇游戏-详细解释-非单纯贴代码
  10. 【附源码】Java计算机毕业设计企业售后服务管理系统(程序+LW+部署)