oracle闪回技术

undo数据保留7天
orcl> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_optimizer_undo_cost_change string 12.1.0.2
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 604800
undo_tablespace string UNDOTBS1
orcl> select 604800/60/60/24 from dual;

604800/60/60/24
---------------
7

一:Oracle Flashback Query (SELECT AS OF),利用undo

查询指定时间点的表数据

SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE last_name = 'Chung';

二:Oracle Flashback Version Query

SELECT versions_startscn, versions_starttime,
       versions_endscn, versions_endtime,
       versions_xid, versions_operation,
       last_name, salary
  FROM employees
  VERSIONS BETWEEN TIMESTAMP
      TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')
  AND TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
  WHERE first_name = 'John';

三:Oracle Flashback Transaction Query

Flashback Transaction

The static data dictionary view *_FLASHBACK_TXN_STATE shows whether a transaction is active or backed out. If a transaction appears in this view, it is backed out.

Oracle Flashback Transaction Query

SELECT xid, logon_user
FROM flashback_transaction_query
WHERE xid IN (
  SELECT versions_xid FROM employees VERSIONS BETWEEN TIMESTAMP
  TO_TIMESTAMP('2003-07-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND
  TO_TIMESTAMP('2003-07-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
);

四:闪回表

闪回表(Flashback table)是利用undo信息来恢复表对象到以前的某一个时间点(一个快照)

SQL>flashback table test to timestamp to_timestamp('2018-05-20 15:30:00',' yyyy-mm-dd hh24:mi:ss') ;

SQL>flashback table test to timestamp scn 115544;

SQL>flashback table test to timestamp to_timestamp('2018-05-20 15:30:00',' yyyy-mm-dd hh24:mi:ss') enable triggers;

运用闪回表前提 

1)普通用户中需要有Flashback any table的系统权限。命令如: 

  SQL>grant flashback any table to scott; 

2)有该表的select、insert、delete、alter权限。 

3)必须保证该表有row movement(行移动)。

恢复表到过去的某个时间点,恢复test表到刚记录的时间点(或scn),由于表中存在触发器,因此使用了关键字enable triggers;

flashback table test to timestamp to_timestamp('2018-05-20 15:30:00',' yyyy-mm-dd hh24:mi:ss') enable triggers;

 

五:闪回数据归档

Static Data Dictionary Views for Flashback Data Archive Files

ViewDescription

*_FLASHBACK_ARCHIVE

Displays information about Flashback Data Archive files.

*_FLASHBACK_ARCHIVE_TS

Displays tablespaces of Flashback Data Archive files.

*_FLASHBACK_ARCHIVE_TABLES

Displays information about tables that are enabled for Data Flashback Archive files.

 1)、查询哪些表启用闪回数据归档

SQL> select * from dba_flashback_archive_tables;
2)、查询数据库中所有的闪回数据归档
SQL> select flashback_archive_name,retention_in_days from dba_flashback_archive;
3)、查询有关闪回数据归档所使用的表空间的信息
SQL> select flashback_archive_name,tablespace_name,quota_in_mb from dba_flashback_archive_ts;

闪回数据归档的限制
对于已经启用闪回的表,不能使用DDL命令drop column(11r2可以drop column),但可以add column命令。
删除属于一个启用了闪回数据归档的表列的唯一方法是首先关闭闪回归档功能。但是,这样会删除所有闪回归档数据。下面这些是11GR2之前不支持的
1、ALTER TABLE:
Drops, renames, or modifies a column (11GR2是可以的),Performs partition or subpartition operations,Converts a LONG column to a LOB column
Includes an UPGRADE TABLE clause, with or without an INCLUDING DATA clause
2、DROP TABLE
3、TRUNCATE TABLE (11GR2是可以的)
4、RENAME TABLE (11GR2也是可以的)

v$recover_file中查需要恢复的文件

select * from v$recover_file;

select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;


启用了闪回数据归档之后,表上只允许执行部分指定的ddl,另一些ddl要执行的话,必须停用表的数据归档才可以

DDL 限制出于安全性和合法兼容性方面的考虑,上述限制可确保闪回数据归档中的数据不会失效。
对启用了闪回数据归档功能的表使用下述任一DDL 语句都会导致错误ORA-55610:
• 执行以下任一操作的ALTER TABLE语句:
– 删除、重命名或修改列
– 执行分区或子分区操作
– 将LONG列转换为LOB列
– 包括UPGRADE TABLE子句(不管有无INCLUDING DATA子句)
• DROP TABLE语句
• 执行以下任一操作的ALTER TABLE语句:
– 删除、重命名或修改列
– 执行分区或子分区操作
– 将LONG列转换为LOB列
– 包括UPGRADE TABLE子句(不管有无INCLUDING DATA子句)

修改表定义的时候需要取消数据归档,修改完表定义后重新启用数据归档,这样的话,数据归档中表定义修改之前的历史数据就没有了。



posted on 2018-05-23 18:48  HelonTian  阅读(254)  评论(0编辑  收藏  举报