ITPub博客

首页 > 数据库 > Oracle > 关于oracle闪回数据归档的总结

关于oracle闪回数据归档的总结

原创 Oracle 作者:贺子_DBA时代 时间:2016-09-22 16:47:34 1 删除 编辑
Flashback Data Archive闪回数据归档概述:
一句话就是undo的长期保存
     我们知道关系型数据库要保证一致性,例如A用户update一条数据,未提交,此时为保证一致性B用户是看不到A更改后的数据的,那么此时B用户需要从undo表空间里面查看数据的前镜像,如果找不到前镜像就会报错,非常经典的ora-01555快照过旧的错误,还有就是闪回表和闪回查询也要依靠UNDO表空间记录的回滚信息,
然而undo表空间里面的数据是循环复写的,具体循环复写的规则请见http://blog.itpub.net/29654823/viewspace-2106256/ ,这样时间久了,所以经常在做回闪查询时,我们会因为找不到undo block而收到1555错误, 由此11G里面引入了Flashback Data Archive ,他用于存储数据的所有改变,时间由你自己设定,消耗的是更多的磁盘空间,现在来看下这个特性。
 
一:创建闪回数据归档
1)创建管理闪回数据归档的用户
SQL>create user FR_ADMIN identified by oracle;
2)用sys用户赋予FR_ADMIN需要的权限
SQL> grant create session,FLASHBACK ARCHIVE ADMINISTER to fr_admin;
SQL> grant CREATE FLASHBACK ARCHIVE to fr_admin;
3)创建闪回数据归档使用的表空间
SQL> create tablespace fratbs datafile '/u01/app/oracle/oradata/PROD1/fratbs01.dbf' size 1g autoextend on next 2m ;
4)创建闪回数据归档fra1,并保留一年,配额1g;
SQL>create flashback archive fra1 tablespace fratbs   quota 1g retention 1 year;
SQL>drop flashback archive fra1 ;   ##删除数据归档
5)开启某张表的闪回数据归档,
SQL>alter table tablename   flashback archive;  ## 这样就会使用默认的闪回数据归档
或者:
SQL>alter table tablename  flashback archive fra1;  
取消对于数据表的闪回归档可以使用如下命令:
SQL>alter table table_name no flashback archive;

二:闪回数据归档的管理:
SQL> alter flashback archive fra1 set default;   ##注意需要sys用户操作
Flashback archive altered. 
SQL> alter flashback archive fra1 add tablespace fratbs   ; --添加表空间 
Flashback archive altered. 
SQL> alter flashback archive  fra1 remove tablespace fratbs   ;--删除表空间 
Flashback archive altered.  
SQL> alter flashback archive fra1 modify tablespace fratbs   quota 2048M;--添加配额 
Flashback archive altered.   
SQL> alter flashback archive fra1 modify retention 3 year; 
Flashback archive altered.   
SQL> alter flashback archive fra1 purge all;  -- 清除所有 
Flashback archive altered. 
SQL> alter flashback archive fra1 purge before timestamp (systimestamp - interval '2' day);--清除2天前的 
Flashback archive altered. 
SQL> alter flashback archive fra1 purge before scn 123344;  
Flashback archive altered.

三:闪回数据归档的限制
 
在使用闪回归档的过程中有某些限制。对于已经启用闪回的表,不能使用DDL命令drop column(11r2可以drop column),但可以add column命令。删除属于一个启用了闪回数据归档的表列的唯一方法是首先关闭闪回归档功能。但是,这样会删除所有闪回归档数据。
下面这些是11GR2之前不支持的,
1、ALTER TABLE:
Drops, renames, or modifies a column (11GR2是可以的)
Performs partition or subpartition operations
Converts a LONG column to a LOB column
Includes an UPGRADE TABLE clause, with or without an INCLUDING DATA clause
2、 DROP TABLE
3、TRUNCATE TABLE (11GR2是可以的)
4、RENAME TABLE (11GR2也是可以的)

四:监控闪回数据归档

1、查哪些表已经启用了闪回数据归档
SQL> select * from dba_flashback_archive_tables;
 TABLE_NAME  OWNER_NAME  FLASHBACK_ARCHIVE_NAME  ARCHIVE_TABLE_NAME     STATUS
----------- -----------  ----------------------  ----------------  -------------
T1          GYJ          FLASH1                SYS_FBA_HIST_17877         ENABLED
 2、查数据库中所有的闪回数据归档
SQL> select flashback_archive_name,retention_in_days from dba_flashback_archive;
 
FLASHBACK_ARCHIVE_NAME                             RETENTION_IN_DAYS
-------------------------------------------------- -----------------
FLASH1                                                          1095
 3、查有关闪回数据归档所使用的表空间的信息
 SQL>  select flashback_archive_name,tablespace_name,quota_in_mb from dba_flashback_archive_ts;
FLASHBACK_ARCHIVE_NAME        TABLESPACE_NAME                QUOTA_IN_MB
---------------------------- ----------------------- ----------------------------------
FLASH1                          FLASH_TBS1                                     2048

心得:
关于oracle11g的这个新特性,由于它有诸多的限制,以及必然带来的性能问题,导致生产环境很少使用,并且生产环境很少存在要闪回某张表到很长时间之前的需求,如果非得恢复到很长时间之前,可以使用数据泵(生产环境一般都是rman+expdp备份的)。












来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29654823/viewspace-2125330/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年数据库管理员从业经历,熟悉Oracle、mysql、tidb、oceanbase、redis、 mongodb 、python等技术栈,持有11g ocm 、mysql 5.7 ocp 、tidb 5.0 ptcp、tidb 6.0 ptca、oceanbase obcp等

注册时间:2014-05-12

  • 博文量
    327
  • 访问量
    2148981