闪回技术(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 语句无效
- 闪回技术(2):闪回归档
- Oracle 11g闪回归档技术
- 闪回归档
- 闪回归档
- 闪回归档:
- 技术回归
- 回归技术
- 回归技术
- oracle:视图,闪回归档
- Flashback Data Archive 闪回归档测试
- 七种回归技术
- 七种回归技术
- 回归技术之旅
- 七种回归技术
- 使用闪回归档区+创建表时指定闪回归档区+为已经存在的表指定闪回归档区+删除表的闪回归档区+查询指定闪回归档区的信息
- 2月了,是时候回归技术了
- 现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试
- 现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试
- linux bash shell 在控制台打印 8格棋盘的方法
- magento批量删除产品
- autoconf.h文件找不到
- yii网站开发技巧 要求全站登录才访问
- libeio用处
- 闪回技术(2):闪回归档
- 数据公钥加密和认证中的私钥公钥
- OpenGL ES 3.0-Transform Feedback Object
- Linux下malloc/free详解
- linux下C语言线程的介绍
- js如何实现整除
- 小小回忆录
- ubuntu10.04安装curb问题及解决方案
- Windows下ORACLE 10g安装与操作图解