闪回归档:
发布日期: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 20SQL> 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月07日 16时04分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP防止注入攻击
2019-04-27
多路IO复用模型 select epoll 等
2019-04-27
Linux Epoll介绍和程序实例
2019-04-27
output_buffering详细介绍
2019-04-27
php缓冲 output_buffering和ob_start
2019-04-27
php error_reporting 详解
2019-04-27
剖析PHP中的输出缓冲
2019-04-27
HTTP响应头不缓存
2019-04-27
PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
2019-04-27
Javascript到PHP加密通讯的简单实现
2019-04-27
德国SNS交友/视频网站Poppen.de的技术架构分享
2019-04-27
UNIX环境编程
2019-04-27
一笔画问题【数据结构-图论】
2019-04-27
红黑树
2019-04-27
安装多个gcc
2019-04-27
Linux0.01内核根目录Makefile注释
2019-04-27
【CSDN2012年度博客之星】需要您的一票,感谢大家的支持
2019-04-27
PHP对于浮点型的数据需要用不同的方法去解决
2019-04-27
Tokyo Cabinet 安装
2019-04-27
Flink在美团的应用与实践听课笔记
2019-04-27