ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11g闪回数据归档

11g闪回数据归档

原创 Linux操作系统 作者:安佰胜 时间:2011-11-14 16:11:32 0 删除 编辑

11g闪回数据归档
 
=================
 
闪回数据归档是用来保存一个或多个表的历史数据的新数据库对象、以及该数据的存储保留和清除策略
归档保留数据库中表的变化
并将这些变化保存在表空间中
这些变化数据是压缩存储的,并且只保留过去的变化
所以插入操作时不会记录在变化中的
 
为了实现闪回数据归档,oracle使用后台进程FBDA(flashback data archive proces)来定期将undo中捕获的变化写入闪回数据归档中
FBDA进程默认5分钟捕获一次表的归档变化数据
不过如果系统特别繁忙,这个频率也会加快
 
数据库默认的堆表并不开启闪回数据归档
所以要使用这个功能必须在创建表的时候添加 falshback data archive关键字或者使用alter table命令启用表的归档
数据库中可以对多个表使用闪回归档
这些归档数据可以在同一个表空间也可以在不同的表空间
同一个数据库中可以有多个闪回数据归档
对于不同的闪回数据归档采用不同的策略,如一个数据自动保留5年,一个数据自动保留2年
对于开启闪回数据归档的表不能直接删除,要先关闭闪回数据归档后才能删除
 
----------------
 
--创建闪回数据归档需要的权限
FLASHBACK ANY TABLE
FLASHBACK ARCHIVE ADMINISTER
 
----------------
--测试
 
--测试环境版本
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

 
--创建存放闪回数据归档的表空间flash_data1和flash_data2
SQL> create tablespace flash_data1 datafile '/oracle/oradata/db11/db11/flash001.dbf' size 10m autoextend on maxsize 4096m;
Tablespace created.
SQL>  create tablespace flash_data2 datafile '/oracle/oradata/db11/db11/flash0021.dbf' size 10m autoextend on maxsize 4096m;
Tablespace created.
 
--创建闪回归档flash_1y
--分配默认表空间flash_data1
--默认表空间中分配4000m的空间权限
--闪回归档数据保存1年
 
SQL> create flashback archive flash_1y
  2  tablespace flash_data1
  3  quota 4000m
  4  retention 1 year;
Flashback archive created.

--对闪回数据归档的操作
--设置系统默认归档
SQL> alter flashback archive flash_1y set default;
Flashback archive altered.
 
 
--为闪回数据归档添加表空间
SQL> alter flashback archive flash_1y add tablespace flash_data2;
Flashback archive altered.
 
 
--调整闪回归档数据对应表空间的使用空间数
SQL> alter flashback archive flash_1y modify tablespace flash_data2 quota 10m;
Flashback archive altered.
 
 
--调整闪回归档数据保留的时间,到时间自动删除过期数据
SQL> alter flashback archive flash_1y modify retention 2 year;
Flashback archive altered.
SQL> alter flashback archive flash_1y modify retention 1 year;
Flashback archive altered.
 
 
--删除闪回归档数据与对应表空间的联系
--删除后表空间仍然存在
SQL> alter flashback archive flash_1y remove tablespace flash_data2;
Flashback archive altered.
 
 
--清除闪回数据归档中所有的变化数据
SQL> alter flashback archive flash_1y purge all;
Flashback archive altered.
 
 
--清除特定时间前的数据
SQL> alter flashback archive flash_1y purge before timestamp(systimestamp-interval '2' day);
Flashback archive altered.
 
 
--时间还可以使用如下值:
systimestamp - interval '2' second
systimestamp - interval '2' day
systimestamp - interval '2' month

 
--清除特定scn之前的数据
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                  905328
SQL> alter flashback archive flash_1y purge before scn 905328;
Flashback archive altered.
 
 
--创建测试用户
SQL> create user an identified by an;
User created.
 
 
--授予权限
SQL> grant connect,resource to an;
Grant succeeded.
SQL> grant flashback any table to an;
Grant succeeded.
SQL> grant flashback archive administer to an;
Grant succeeded.
 
 
--创建闪回数据归档的表
--建表时带有关键字 flashback archive
--并且指定使用的闪回数据归档
SQL> conn an/an
Connected.
SQL> create table atest(id int,
  2  name varchar2(10),
  3  address varchar2(20))
  4  flashback archive flash_1y;
Table created.

 
--关闭表的闪回数据归档特性
SQL> alter table atest no flashback archive;
Table altered.
 
 
--重新开启表的闪回数据归档
SQL> alter table atest flashback archive;
Table altered.
 
--创建测试数据
SQL> insert into atest select 1,'an','home1' from dual;
1 row created.
SQL> insert into atest select 2,'xiangxiang','home1' from dual;
1 row created.
SQL> commit;
Commit complete.

SQL> select * from atest;
        ID NAME       ADDRESS
---------- ---------- --------------------
         1 an         home1
         2 xiangxiang home1
 
----------------------------
 
 
--和闪回数据归档相关的字典表
--其中比较常用的是前三个
--分别对应系统中的闪回数据归档、已经开启闪回数据归档的表以及闪回归档数据存放的表空间
DBA_FLASHBACK_ARCHIVE
DBA_FLASHBACK_ARCHIVE_TABLES
DBA_FLASHBACK_ARCHIVE_TS
DBA_FLASHBACK_TXN_REPORT
DBA_FLASHBACK_TXN_STATE
USER_FLASHBACK_ARCHIVE
USER_FLASHBACK_ARCHIVE_TABLES
USER_FLASHBACK_TXN_REPORT
USER_FLASHBACK_TXN_STATE

 
--这个字典表描述闪回数据归档对应的表名、owner、使用的闪回数据归档名、记录表变化情况的日志表名以及状态
SQL> desc user_flashback_archive_tables
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLE_NAME                                NOT NULL VARCHAR2(30)
 OWNER_NAME                                NOT NULL VARCHAR2(30)
 FLASHBACK_ARCHIVE_NAME                    NOT NULL VARCHAR2(255)
 ARCHIVE_TABLE_NAME                                 VARCHAR2(53)
 STATUS                                             VARCHAR2(8)
SQL> col FLASHBACK_ARCHIVE_NAME for a15
SQL> col ARCHIVE_TABLE_NAME for a20
SQL> col table_name for a15
SQL> col owner_name for a15
SQL> set linesize 300
SQL> set wrap off
 
 
--如下查询限制表an.atest使用了flash_1y这个闪回数据归档
--目前表闪回数据归档的状态为开启
--记录表变化情况的日志表为SYS_FBA_HIST_73424
--进程FBDA不是实时,所以修改完表后过几分钟日志表的数据才会更新
 
 
SQL> select * from user_flashback_archive_tables;
TABLE_NAME      OWNER_NAME      FLASHBACK_ARCHI ARCHIVE_TABLE_NAME   STATUS
--------------- --------------- --------------- -------------------- --------
ATEST           AN              FLASH_1Y        SYS_FBA_HIST_73424   ENABLED
 
 
SQL> conn / as sysdba
Connected.
SQL> select * from USER_FLASHBACK_ARCHIVE;
no rows selected
SQL> select * from dba_flashback_archive;
OWNER_NAME      FLASHBACK_ARCHI FLASHBACK_ARCHIVE# RETENTION_IN_DAYS CREATE_TIME                           LAST_PURGE_TIME                     STATUS
--------------- --------------- ------------------ ----------------- ----------------------------------------- ------------------------------------------
SYS             FLASH_1Y                         1               365 14-NOV-11 03.22.21.000000000 PM       14-NOV-11 03.33.21.000000000 PM     DEFAULT
SQL> select * from dba_flashback_archive_ts;
FLASHBACK_ARCHI FLASHBACK_ARCHIVE# TABLESPACE_NAME                QUOTA_IN_MB
--------------- ------------------ ------------------------------ ----------------------------------------
FLASH_1Y                         1 FLASH_DATA1                    4000
 
 
 
--对表中数据进行更改
Connected.
SQL> update atest set id=id+1;
2 rows updated.
SQL> commit;
Commit complete.
SQL> select * from atest;                                                                    
                                                                                             
        ID NAME       ADDRESS                                                                
---------- ---------- --------------------                                                   
         2 an         home1                                                                  
         3 xiangxiang home1                                                                  
                                                                                             
SQL> update atest set id=1 where id=3;                                                       
                                                                                             
1 row updated.                                                                               
                                                                                             
SQL> commit;                                                                                 
SQL> select * from atest;                                                                     
                                                                                             
        ID NAME       ADDRESS                                                                
---------- ---------- --------------------                                                   
         2 an         home1                                                                  
         1 xiangxiang home1                                                                  
 
 
--更改后记录更改的表中并不是马上添加数据
--因为fbda进程滞后
--要过一段时间时候数据才能进行查询
--查询时包括更改数据时的scn、操作数据的类型以及数据的值都会有详细记录
 
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
14-NOV-11 03.42.44.061854 PM +08:00
SQL> select * from SYS_FBA_HIST_73424;
no rows selected
                                                                                          
                                                                                             
                                                                                             
SQL> select current_timestamp from dual;                                                     
                                                                                             
CURRENT_TIMESTAMP                                                                            
---------------------------------------------------------------------------                  
14-NOV-11 04.00.41.818424 PM +08:00                                                          
                                                                                             
 
SQL> select * from SYS_FBA_HIST_73424;                                                       
                                                                                             
RID          STARTSCN     ENDSCN XID              O         ID NAME       ADDRESS            
---------- ---------- ---------- ---------------- - ---------- ---------- --------------------
AAAR7QAAEA     905464     905799 0200010082020000 I          1 an         home1              
AAAR7QAAEA     905464     905799 0200010082020000 I          2 xiangxiang home1              
AAAR7QAAEA     905799     906194 04000100FD010000 U          3 xiangxiang home1   

 
 
--查询
--基于时间
SQL> select * from atest as of timestamp to_timestamp('2011-11-14 15:40:00','yyyy-mm-dd hh24:mi:ss');
        ID NAME       ADDRESS
---------- ---------- --------------------
         1 an         home1
         2 xiangxiang home1
 
SQL>  select * from atest as of timestamp to_timestamp('2011-11-14 16:01:00','yyyy-mm-dd hh24:mi:ss');
        ID NAME       ADDRESS
---------- ---------- --------------------
         1 xiangxiang home1
         2 an         home1
 
 
--基于scn
SQL> select * from atest as of scn 905464;
        ID NAME       ADDRESS
---------- ---------- --------------------
         1 an         home1
         2 xiangxiang home1
          

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

请登录后发表评论 登录
全部评论

注册时间:2009-08-26

  • 博文量
    215
  • 访问量
    660345