您的位置:首页 > 其它

闪回归档:

2016-03-29 08:37 387 查看
闪回归档:

一:什么是闪回数据归档?

闪回数据归档是一个新的数据库对象,其中保留一个或多个表的历史数据。并具有自己的数据存储保留和清洗策略。数据库将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_NAMESTATUS

------------------------------ ------------------------------ -------------------- ----------------------------------------------------- -------------

T SCOTT
FLAR1 SYS_FBA_HIST_89023ENABLED

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 OEMPNO ENAME JOB
MGR HIREDATE SAL COMM DEPTNO

---------- ---------- ---------- ---------------- - ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

AAAV1MAAEAAAACtAAA 13639712 7369 SMITH CLERK
7902 17-DEC-80800 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 OEMPNO ENAME JOB
MGR HIREDATE SAL COMM DEPTNO

---------- ---------- ---------- ---------------- - ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

AAAV1MAAEAAAACtAAA 13639712 7369 SMITH CLERK
7902 17-DEC-80800 20

AAAV1MAAEAAAACtAAL 13644579 13644579 04000900AF120000 D 7900 JAMES CLERK
7698 03-DEC-81950 30

AAAV1MAAEAAAACtAAL 13644579 7900 JAMES CLERK
7698 03-DEC-81950 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 OEMPNO ENAME JOB
MGR HIREDATE SAL COMM DEPTNO

---------- ---------- ---------- ---------------- - ---------- ---------- --------- ---------- --------- ---------- ---------- ----------

AAAV1MAAEAAAACtAAA 13639712 7369 SMITH CLERK
7902 17-DEC-80800 20

AAAV1MAAEAAAACtAAL 13644579 13644579 04000900AF120000 D 7900 JAMES CLERK
7698 03-DEC-81950 30

AAAV1MAAEAAAACtAAL 13644579 7900 JAMES CLERK
7698 03-DEC-81950 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 SALCOMMDEPTNO

---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------

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 1600300 30

7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250500 30

7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20

7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 12501400 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:显示关于那些表使用了闪回数据归档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: