闪回归档:
发布日期:2021-09-16 04:38:46 浏览次数:32 分类:技术文章

本文共 6510 字,大约阅读时间需要 21 分钟。

                                                                                                                                                   闪回归档:
一:什么是闪回数据归档?
闪回数据归档是一个新的数据库对象,其中保留一个或多个表的历史数据。并具有自己的数据存储保留和清洗策略。数据库将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:显示关于那些表使用了闪回数据归档。

转载地址:https://blog.csdn.net/wll_1017/article/details/51002764 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MySQL 加锁处理分析
下一篇:配置yum源 --- FTP模式

发表评论

最新留言

不错!
[***.144.177.141]2024年04月07日 16时04分19秒