首页 > 代码库 > Oracle 11g闪回归档技术

Oracle 11g闪回归档技术

闪回数据归档

使用闪回数据归档功能可以自动跟踪和归档启用了闪回数据归档的表中的数据。这可确保闪回查询能够获得对数据库对象版本的

SQL 级别访问权限,而不会出现快照太旧的错误。
 
利用闪回数据归档功能,可以在“跟踪的”表的整个生命期内跟踪并存储对该表的所有事务处理更改。不再需要将此智能功能内

置到应用程序中。闪回数据归档功能对于遵守规定、审计报告、数据分析和决策支持系统非常有用。闪回数据归档后台进程随数

据库一起启动。 

闪回数据归档包含一个或多个表空间。可以拥有多个闪回数据归档,它们都配置有保留时间。您应根据保留时间的要求创建不同

的闪回数据归档,例如,为必须保留两年的所有记录创建一个闪回数据归档,为必须保留五年的所有记录创建另一个闪回数据归

档。数据库将在保留期到期后的第一天自动清除所有历史记录信息。

闪回数据归档的过程:

1.创建闪回数据归档。
2.指定默认闪回数据归档。
3.启用闪回数据归档。
4.查看闪回数据归档数据。

-- create the Flashback Data Archive

CREATE FLASHBACK ARCHIVE DEFAULT fla1  TABLESPACE tbs1 QUOTA 10G RETENTION 5 YEAR; 

-- Specify the default Flashback Data Archive 
ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT; 

-- Enable Flashback Data Archive 
ALTER TABLE inventory FLASHBACK ARCHIVE; 

ALTER TABLE stock_data FLASHBACK ARCHIVE; 

SELECT product_number ,product_name ,count
FROM inventory
AS OF TIMESTAMP TO_TIMESTAMP (‘2007-01-01 00:00:00‘ ,‘YYYY-MM-DD HH24:MI:SS‘);

可以选择增加空间:
ALTER FLASHBACK ARCHIVE fla1 
ADD TABLESPACE tbs3 QUOTA 5G; 

可以选择更改保留时间:
ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR;

可以选择清除数据:
ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL ‘1‘ day); 

可以选择删除闪回数据归档:
DROP FLASHBACK ARCHIVE fla1;

查看闪回数据归档 :

视图名称 (DBA/USER)          说明
*_FLASHBACK_ARCHIVE          显示有关闪回数据归档的信息
*_FLASHBACK_ARCHIVE_TS          显示闪回数据归档的表空间
*_FLASHBACK_ARCHIVE_TABLES  显示有关启用了闪回归档的表的信息

可使用动态数据字典视图查看跟踪的表和闪回数据归档元数据。要访问 USER_FLASHBACK_* 视图,必须拥有表的所有权。要检查

DBA_FLASHBACK_* 视图,您需要 SYSDBA 权限。

闪回数据归档的 DDL 限制 :

对启用了闪回数据归档的表执行以下任一 DDL 语句都会产生 ORA-55610 错误:

1.执行以下操作的 ALTER TABLE 语句:
--删除、重命名或修改某一列
--执行分区或子分区操作
--将 LONG 列转换为 LOB 列
--包括 UPGRADE TABLE 子句,带有或不带 INCLUDING DATA 子句

2.DROP TABLE 语句

3.RENAME TABLE 语句

4.TRUNCATE TABLE 语句
实验:闪回归档

1.创建测试数据:
   create tablespace arch_tbs datafile ‘/u01/app/oracle/oradata/PROD/arch_tbs.dbf‘ size 100m autoextend on

maxsize 1G;
  
2.创建测试用户并授权:
  create user archive_admin identified by archive_admin default tablespace arch_tbs;
 
  grant dba,flashback archive administer to archive_admin;

3.创建闪回归档(设置默认的闪回归档时,需要使用sys用户)
  conn archive_admin/archive_admin
 
  create flashback archive fda1 tablespace arch_tbs quota 10m retention 1 year;

  alter flashback archive fdb1 set default;
    --sys用户下

  create flashback archive default fda1 tablespace arch_tbs quota 10m retention 1 year;
    --或者直接设置默认闪回归档(sys用户下)

4.设置表的闪回归档
  alter table test_user1.emp flashback archive;

5.验证
  conn test_user1/test

  desc dba_flashback_archive_tables;

  select table_name,archive_table_name from dba_flashback_archive_tables;
    --查看与当前设置闪回归档相关的历史跟踪表

  select owner,table_name,tablespace_name from dba_tables where table_name=‘SYS_FBA_HIST_88707‘;
    --确定历史表的名称,所有者,及位置

在emp表上插入,更新以及删除操作,然后查看历史跟踪表内容:

  select * from emp;

  TEST_USER1@PROD>begin
  2  for i in 5..10
  3  loop
  4  insert into emp values (i,‘TEST‘,sysdate+i);
  5  end loop;
  6  end;
  7  /
 
PL/SQL procedure successfully completed.
  
 
  delete from emp ...

  update emp ...
 
  select * from sys_fba_hist_88707;

  select count(*) from sys_fba_hist_88707;
   --查看历史跟踪表内容;

DDL操作(在不该表原始数据时,可以使用ddl语句)

  alter table emp add dd number;
 
  select count(*) from sys_fba_hist_88707;

  alter table emp modify name varchar2(30);


6.关闭闪回归档
  conn archive_admin/archive_admin

  alter table test_user1.emp no flashback  archive;
 
  drop table test_user1.emp;

  desc dbms_flashback_archive;


7.解除和重建表与历史跟踪表的关联关系(和步骤6相互独立)

  exec dbms_flashback_archive.disassociate_fba(‘TEST_TSER1‘,‘EMP‘);

  exec dbms_flashback_archive.reassociate_fba(‘TEST_TSER1‘,‘EMP‘);

  --当某些DDL语句无法执行时,就需要取消和重建;

8.闪回归档
  select * from test_user1.emp as of timestamp(timestamp - interval ‘20‘ minute);

 

Oracle 11g闪回归档技术