闪回技术(2):闪回归档

来源:互联网 发布:web服务器默认端口 编辑:程序博客网 时间:2024/04/30 03:05

         闪回归档用于长时间保存某些表的变化的数据,用于审计等

一、创建闪回归档。

      首先创建闪回归档的用户需要拥有flashback archive administer的权限。

SQL>grant flashback archive administer to sh;

      不过,需要注意的是,拥有flashback archive administer权限只能创建一般的闪回归档区,默认的flashback archive只能sysdba用户才能创建和修改。如下面的错误:

SQL> create flashback archive default fla1 tablespace test01 quota 30m retention 1 year;create flashback archive default fla1 tablespace test01 quota 30m retention 1 year                                                 *第 1 行出现错误:ORA-55611: 无权管理默认的闪回归档SQL> show user;USER 为 "SH"

         创建成功之后,可以通过数据字典视图dba_flashback_archive查看。

SQL> create flashback archive fla1 tablespace test01 quota 3m retention 1 year;闪回档案已创建。SQL> col owner_name format A10;SQL> col flashback_archive_name format A10;SQL> col flashback_arvhive# format A20;SQL> col create_time format A20;SQL> col last_purge_time format A20;SQL> col status format A10;SQL> set linesize 120;SQL> select * from dba_flashback_archive;OWNER_NAME FLASHBACK_ FLASHBACK_ARCHIVE# RETENTION_IN_DAYS CREATE_TIME          LAST_PURGE_TIME      STATUS---------- ---------- ------------------ ----------------- -------------------- -------------------- ----------SH         FLA1                        1               365 07-8月 -13 04.07.40. 07-8月 -13 04.07.40.                                                           000000000 下午       000000000 下午

        往闪回归档中添加表。可以通过dba_flashback_archive_tables查看闪回归档中表的信息。

SQL> create table t(  2  id int,  3  num int)  4  flashback archive fla1;表已创建。SQL> select * from dba_flashback_archive_tables;TABLE_NAME                     OWNER_NAME FLASHBACK_ ARCHIVE_TABLE_NAME                                 STATUS------------------------------ ---------- ---------- ----------------------------------------------------- ----------T                              SH         FLA1       SYS_FBA_HIST_75344                                 ENABLED

二、修改闪回归档

SQL> alter flashback archive fla1  2  add tablespace test02 quota 20m;----添加表空间;SQL> select * from dba_flashback_archive_ts;---查看归档表空间信息;FLASH FLASHBACK_ARCHIVE# TABLESPACE QUOTA----- ------------------ ---------- -----FLA1                   1 TEST01     3FLA1                   1 TEST02     20SQL> alter flashback archive fla1 modify tablespace test01 quota 30M;--修改分配空间份额;SQL> alter flashback archive fla1 modify retention 1 year;---修改闪回归档数据保存时间;SQL> alter flashback archive fla1 remove tablespace test02;--移除表空间,但是不是删除表空间;SQL>ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT;---设置FLA1为默认的归档,要求在SYSDBA角色中修改。SQL>ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE SCN 728969;--删除指定SCN之前的闪回归档内容;SQL>ALTER FLASHBACK ARCHIVE fla1 PURGE ALL;--清空闪回归档内容;SQL>ALTER FLASHBACK ARCHIVE fla1    PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);--删除指定时间之前的闪回归档内容;
SQL>alter table t flashback archive fla1;--启用闪回归档;
SQL>alter table t no flashback archive ;---关闭闪回归档,其实需要有SYSDBA角色权限和flashback archive administer权限;

          另外,在删除的时候,通常需要查看SCN来确定哪些数据需要清除的内容。其实,当我们将一个数据表设置为flashback archive之后,会发现出现三个内部internal数据表。分别是:

1、SYS_FBA_TCRV_XXX数据表负责记录在特定的时间范围(对应SCN范围),进行特定操作的信息记录;
2、SYS_FBA_HIST_XXX数据表的列包括数据行信息和对应存在的SCN范围。如果一个数据表发生DML或者DDL操作,引起数据的变化会直接保存在该数据表中;

3、SYS_FBA_DDL_COLMAP_XXX数据表负责记录数据表列DDL变化情况。从数据列的信息来看,就是一个特定的数据列的时间SCN范围;

SQL> select table_name,tablespace_name from user_tables where table_name like '%FBA%';TABLE_NAME                     TABLESPACE------------------------------ ----------SYS_FBA_DDL_COLMAP_75344       TEST01SYS_FBA_TCRV_75344             TEST01SYS_FBA_HIST_75344SQL>  select * from SYS_FBA_TCRV_75344 order by startscn;RID                    STARTSCN     ENDSCN XID                  O-------------------- ---------- ---------- -------------------- -AAASZQAAEAAAAJHAAA      2539640            090005001E060000     IAAASZQAAEAAAAJHAAB      2543301            08001900FB050000     IAAASZQAAEAAAAJHAAC      2543601    2543668 020019000E060000     IAAASZQAAEAAAAJHAAC      2543668    2543681 03000F001B060000     UAAASZQAAEAAAAJHAAC      2543681            060006003F060000     USQL> select * from SYS_FBA_HIST_75344;RID                    STARTSCN     ENDSCN XID                  O         ID        NUM-------------------- ---------- ---------- -------------------- - ---------- ----------AAASZQAAEAAAAJHAAC      2543668    2543681 03000F001B060000     U          3        400AAASZQAAEAAAAJHAAC      2543601    2543668 020019000E060000     I          3        300SQL> select * from SYS_FBA_DDL_COLMAP_75344;   STARTSCN      ENDSCN XID                  OP COLUMN_NAM TYPE       HISTORICAL----------- ----------- -------------------- -- ---------- ---------- ----------    2537129                                     ID         NUMBER(38) ID    2537129                                     NUM        NUMBER(38) NUM

三、删除闪回归档

SQL>DROP FLASHBACK ARCHIVE fla1;
       需要注意的是,删除闪回归档,只是删除其中的变更数据,并没有删除表空间。


四、受到限制的DDL语句

        在oracle 11.2版本中,已经解决下面的问题。因为,在以前版本中下面的这些操作,都会引发ORA-55610的错误。

SQL>alter table t add col int;表已更改。SQL> alter table t modify col date;表已更改。SQL> alter table t drop column col;表已更改。SQL> rename t to t1;表已重命名。SQL> truncate table t1;表被截断。

       不过,对于DROP TABLE命令来说,还是会引发ORA-55610错误。想一下,也是可以理解的,对这个表进行闪回归档以记录的DML以及大部分的DDL改变,方便未来的审核查询。如果删除了,岂不是数据不在存在了吗?

SQL> drop table t1;drop table t1           *第 1 行出现错误:ORA-55610: 针对历史记录跟踪表的 DDL 语句无效

原创粉丝点击