闪回归档:

                                                                                                                                                   闪回归档:


一:什么是闪回数据归档?
闪回数据归档是一个新的数据库对象,其中保留一个或多个表的历史数据。并具有自己的数据存储保留和清洗策略。数据库将buffer cache中的原始数据写到undo表空间中作为undo数据,11g中一个新的后台进程叫FBDA将收集和写这些原始数据到闪回数据归档区用于另外创建一份所有表数据的历史。为了启用闪回归档,必须用flashback data archive子句创建一张表或使用alter table语句为存在的表启用归档。有以下一些原则:
1:闪回数据归档和表之间是一对多的关系。
2:在一个数据库中可以使用多个闪回数据归档以满足不同期限的数据保留策略。
3:可以指定一个闪回归档只针对一个表空间。
4:新的后台进程FBDA从buffer cache收集原始数据记录在闪回归档指定表空间里。
5:oracle自动清洗过期的闪回归档数据。


一旦为一张表启用了归档,会为该表创建一个内部历史表,这个历史表将具有原始表的所有列,还有一些时间戳列。这个历史表用于跟踪事务改变。当对要归档的表进行update、delete时,那么在提交之前,内部历史表会有该事务和undo记录。一个insert操作不会在历史表中也插入一条记录。FBDA后台进程在系统设定的时间间隔被唤醒,默认是5分钟。后台进程拷贝被标记的事务的undo数据到历史表。所以当你更新一个表时,历史表中并不是马上就体现更改。如果数据库中产生大量undo数据,那么系统会自动调整FBDA的休眠时间以满足历史表的记录。直到FBDA后台进程完全记录undo数据到历史表,数据库将不会重用被标记为归档的undo记录。一旦FBDA后台进程完全将相应的undo数据写入历史表,undo记录所用的空间才变得可回收。
这里是一个例子,update或delete数据将马上被跟踪,而插入不会马上被跟踪:




创建默认表空间


 create tablespace mytest datafile size 100m extent management local uniform  size 1m   segment space management auto;
SQL>  create tablespace mytest datafile size 100m extent management local uniform  size 1m   segment space management auto;
Tablespace created.

---设置表空间为闪回归档
SQL> create flashback archive flar1 tablespace mytest retention 1 year;
Flashback archive created.
在创建flar1之后,我们可以在dba_flashback_archive、dba_flashback_archive_ts(dba_前缀可以使用user等进行替换)查询到闪回信息

SQL> conn /as sysdba
Connected.
SQL> grant dba to scott;
Grant succeeded.

SQL> conn scott/tiger
Connected.
SQL> create table t as select * From emp;
Table created.

SQL> alter table t flashback archive flar1;
Table altered.

如果不给dba给下列权限
SQL> grant flashback archive on flar1 to scott;
Grant succeeded.

SQL> select * from dba_flashback_archive_tables;
TABLE_NAME       OWNER_NAME      FLASHBACK_ARCHIVE_NA ARCHIVE_TABLE_NAME STATUS
------------------------------ ------------------------------ -------------------- ----------------------------------------------------- -------------
T       SCOTT      FLAR1   SYS_FBA_HIST_89023 ENABLED

SQL> select * From scott.SYS_FBA_HIST_89023;

SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';
  USED MBs
----------
99

---更新会产生一条日志,delete 会产生两条日志
SQL> update t set sal=1 where empno=7369;
1 row updated.

SQL> commit;
Commit complete.

SQL> select * From SYS_FBA_HIST_89023;


RID     STARTSCN  ENDSCN XID  O EMPNO ENAME  JOB   MGR HIREDATE SAL  COMM   DEPTNO
---------- ---------- ---------- ---------------- - ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
AAAV1MAAEAAAACtAAA 13639712  7369 SMITH  CLERK  7902 17-DEC-80 800       20

SQL> delete from t where empno=7900;
1 row deleted.

SQL> commit;
Commit complete.

SQL>  select * From SYS_FBA_HIST_89023;


RID     STARTSCN  ENDSCN XID  O EMPNO ENAME  JOB   MGR HIREDATE SAL  COMM   DEPTNO
---------- ---------- ---------- ---------------- - ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
AAAV1MAAEAAAACtAAA 13639712  7369 SMITH  CLERK  7902 17-DEC-80 800       20
AAAV1MAAEAAAACtAAL   13644579 13644579 04000900AF120000 D  7900 JAMES  CLERK  7698 03-DEC-81 950       30
AAAV1MAAEAAAACtAAL 13644579  7900 JAMES  CLERK  7698 03-DEC-81 950       30

SQL> delete from t where empno=7902;
1 row deleted.

SQL> commit;
Commit complete.

SQL> select * From SYS_FBA_HIST_89023;
RID     STARTSCN  ENDSCN XID  O EMPNO ENAME  JOB   MGR HIREDATE SAL  COMM   DEPTNO
---------- ---------- ---------- ---------------- - ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
AAAV1MAAEAAAACtAAA 13639712  7369 SMITH  CLERK  7902 17-DEC-80 800       20
AAAV1MAAEAAAACtAAL   13644579 13644579 04000900AF120000 D  7900 JAMES  CLERK  7698 03-DEC-81 950       30
AAAV1MAAEAAAACtAAL 13644579  7900 JAMES  CLERK  7698 03-DEC-81 950       30
AAAV1MAAEAAAACtAAM   13645062 13645062 0500060060130000 D  7902 FORD  ANALYST  7566 03-DEC-81       3000       20
AAAV1MAAEAAAACtAAM 13645062  7902 FORD  ANALYST  7566 03-DEC-81       3000       20

SQL> select * from  scott.t as   of  timestamp to_timestamp('2016-03-29 00:00:00','yyyy-mm-dd hh24:mi:ss');

     EMPNO ENAME      JOB       MGR HIREDATE      SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK      7902 1980-12-17 00:00:00      800     20
      7900 JAMES      CLERK      7698 1981-12-03 00:00:00      950     30
      7902 FORD       ANALYST      7566 1981-12-03 00:00:00     3000     20
      7499 ALLEN      SALESMAN      7698 1981-02-20 00:00:00     1600 300     30
      7521 WARD       SALESMAN      7698 1981-02-22 00:00:00     1250 500     30
      7566 JONES      MANAGER      7839 1981-04-02 00:00:00     2975     20
      7654 MARTIN     SALESMAN      7698 1981-09-28 00:00:00     1250 1400     30
      7698 BLAKE      MANAGER      7839 1981-05-01 00:00:00     2850     30
      7782 CLARK      MANAGER      7839 1981-06-09 00:00:00     2450     10
      7788 SCOTT      ANALYST      7566 1987-04-19 00:00:00     3000     20
      7839 KING       PRESIDENT   1981-11-17 00:00:00     5000     10
      7844 TURNER     SALESMAN      7698 1981-09-08 00:00:00     1500   0     30
      7876 ADAMS      CLERK      7788 1987-05-23 00:00:00     1100     20
      7934 MILLER     CLERK      7782 1982-01-23 00:00:00     1300     10
14 rows selected.

------测试insert不产生闪回日志
SQL>   alter flashback archive flar1    purge all;  
Flashback archive altered.

SQL>  select * From SYS_FBA_HIST_89023;
no rows selected

SQL> INSERT INTO T SELECT * fROM SCOTT.EMP;
14 rows created.

SQL> COMMIT;
Commit complete.
SQL>  select * From SYS_FBA_HIST_89023;


----查询历史数据
select * from  scott.t as   of  timestamp to_timestamp('2016-03-29 00:30:00','yyyy-mm-dd hh24:mi:ss');

select * from  scott.t  versions between  to_timestamp('2016-03-29 00:20:00','yyyy-mm-dd hh24:mi:ss');   and to_timestamp('2016-03-29 00:30:00','yyyy-mm-dd hh24:mi:ss');



versions between timestamp minvalue and maxvalue;
versions between scn 372466 and 372538





---手工管理闪回归档


 alter flashback archive flar1    purge all;  
 alter flashback archive flar1 purge before timestamp (systimestamp – interval '2' day); 
 alter flashback archive flar1   purge before scn 123456;
     
     
ALTER TABLE T  FLASHBACK ARCHIVE;
     
将指定的表不再设置数据归档
ALTER TABLE T NO FLASHBACK ARCHIVE;


         
     改变闪回归档:
使用alert flashback命令来改变闪回归档。
SQL> alter flashback archive flar1  set default;                
SQL> alter flashback archive flar1  add tablespace flash_tbs1   
SQL> alter flashback archive flar1 modify tablespace flash_tbs1 quota 10G;    
SQL> alter flashback archive flar1  modify retention 2 year;   
SQL> alter flashback tablespace flar1  add tablespace flash_tbs2;
SQL> alter flashback tablespace flar1   remove tablespace flash_tbs2;


DROP FLASHBACK ARCHIVE flar1; 如果将表指定了闪回数据归档区,则不能对表进行如下操作。


闪回归档添加一个表空间,一个闪回归档可以包含多个表空间
ALTER FLASHBACK ARCHIVE Flar_2 ADD TABLESPACE "TBS_DATA2" QUOTA 100M; 给数据归档区fbar_2增加一个表空间


(1)不能重命名,删除,或修改表的列。
(2)drop或truncate表。
(3)rename 表。
(4)执行分区操作的alter table语句。
(5) 转换long到lob类型;
(6)  进行分区或者子分区操作;


关于FBA有如下一些视图:
dba_flashback_archive:显示关于闪回数据归档的信息。
dba_flashback_archive_ts:显示关于闪回数据归档相关表空间的信息。
dba_flashback_archive_tables:显示关于那些表使用了闪回数据归档。

你可能感兴趣的:(闪回归档:)