oracle的闪回

转载 2012年03月25日 17:18:52

1.1 配制参数
行级闪回需要配制以下两个参数
undo_management = auto 只有设置成auto才能查询到表更新记录
undo_retention =900 设置表更新记录时间,单位为秒,只有在这个时间内的操作才能被闪回,10G第二版默认为900秒,9i为3600秒.

1.2 行级闪回查询
行级闪回查询有以下三种

--行级闪回查询
select a, b, c, versions_xid, versions_starttime, versions_endtime,
versions_startscn,versions_endscn,versions_operation
from test versions between timestamp minvalue and maxvalue
where c=12;
--行级闪回查询,查询一段时间内的变更,注意开始时间和结束时间之差小于undo_retention设置的值,否则会提示"ORA-30052: 下限快照表达式无效"
select a, b, c, versions_xid, versions_starttime, versions_endtime,
versions_startscn,versions_endscn,versions_operation
from test versions between timestamp
to_date('2008-09-23 16:09:00','yyyy-mm-dd hh24:mi:ss')
and to_date('2008-09-23 16:45:00','yyyy-mm-dd hh24:mi:ss')
where c=12;

--行级闪回查询,根据scn值查询
select a, b, c, versions_xid, versions_starttime, versions_endtime,
versions_startscn,versions_endscn,versions_operation
from test versions between scn 339493 and 339635
where c=12;
/* 其中test的表结构如下
create table TEST
(
A VARCHAR2(20),
B VARCHAR2(40),
C NUMBER
)
*/

--versions_xid更改该行的事务标识符
--versions_startscn和versions_endscn 该时刻系统更改号
--versions_starttime和versions_endtime 该数据的起如时间和结束时间
--versions_operation 表示执行了什么样操作 I表示insert,U表示update,D表示delete

以下功能还可以根据当前系统scn查打以前scn的数据
select dbms_flashback.get_system_change_number from dual; --查询当前系统更改号
然后根据当前系统scn推算到以前scn,根据以前scn查询当时表里的数据
select * from test as of scn 404030; --查询系统更必号404030表test时候的数据.


1.3 闪回数据
闪回数据有两种,根据查询找出反操作语句闪回,第二种是把整个表直接闪回到时某个间点.

a. 根据反操作语句闪回
用视图flashback_transaction_query查询出反操作语句,如下
--查询返回该条语句
select undo_sql from flashback_transaction_query where xidin('0800170073000000');

UNDO_SQL
--------------------------------------------------------------------------------

insertinto"TEST"."TEST"("A","B","C")values ('11','111','11');


其中undo_sql就是返回原来的sql语句,注意视图flashback_transaction_query只有dba才能查询.

只要执行undo_sql 语句就返回到之前的状态了.

b.整个表直接闪回到时间点

利用如下语句执行闪回到时间点,如下
flashback table test to timestamp to_timestamp
('2008-09-23 17:40:52','YYYY-MM-DD HH24:MI:SS');
--在执行以上语句前,要把表启用行移动功能.开启表行移动功能,语句如下
alter table test enable row movement;
--关闭行移动功能
alter table test disable row movement;

2.表级闪回
oracle从10G开始支持表级闪回,表删除掉后,不直接删除,而是像windows操作系统一下放到回收站里.如果需要,可以从回收站还原.

a.查看当前用户下回收站中的内容
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ -------------------------------

TMP_DPBIN$FhcMyJIhS2241b3ALdHD/Q==$0 TABLE 2008-09-17:11:08:46

也可以从以下视图查询回收站内容.

select* from dba_recyclebin;
select * from user_recyclebin;

b.恢复被删除的表

SQL>flashback table tmp_dp to before drop;

闪回完成。

内回完成后,查询回收站

SQL>show recyclebin
SQL>
刚才回收站的内容已经清空.

c.清空回收站

purgetable TMP_DP; --指定删除某些特定对象
purge recyclebin; --删除当前用户在回收站的内容
purge dba_recyclebin; --以SYSDBA身份可以清除所有回收站对象
purge index ind_test_01; --删除索引
purge tablespace users; --清除某个表空间的所有回收站对象
purge tablespace users user scott;--删除回收站内users表空间下的scott用户的数据库对像

d.彻底删除表
drop table test purge --彻底删除表test不放入回收站.


3.数据库级闪回

--查询数据库是否启动了数据库闪回功能
select name,log_mode,open_mode,flashback_on from v$database;

--没有启动,先关闭,在启动到mount状态下
shutdown immediate;
startup mount;

--开启数据闪回功能
alter database flashback on;
闪回到以前时间,或以前的scn,可以通过以下语句查询.

select* from v$flashback_database_log;

列oldest_flashback_tiem 闪回最早时间点.
列oledst_flashback_scn闪回最早scn.

把数据关闭掉,启动到mount状态
shutdown immediate;
startup mount;


通过以下语句闪回到以前数据

--闪回到以前时间点
flashback database to timestamp to_date('2008-9-26 10:59:17','yyyy-mm-ddhh24:mi:ss');
--闪回到以前scn
flashback database to scn 405493;

最后需要用resetlogs或用noresetlogs打开数据库.

alterdatabase open resetlogs;


-----转自夏威夷博客(http://blog.itpub.net/post/37623/471404/)


表空间闪回实例

一、ORACLE闪回原理和配置:   如果Oracle10g数据库中误删除了一个表中的记录,例如删除了一个非常重要的雇员信息,并且该事务已经提交了,如何快速找回误删除的数据呢?   这种情况下...
  • lichangzai
  • lichangzai
  • 2012年10月23日 11:08
  • 1699

oracle闪回版本和闪回事务查询 详解

oracle 关于闪回的所有操作都完成, 理论+实验 详解 闪回数据库+闪回表+闪回版本查询+闪回事务查询...
  • wanghui5767260
  • wanghui5767260
  • 2014年03月14日 16:42
  • 1666

oracle闪回表介绍

FLASHBACK TABLE 目的: 1. 使用闪回表语句恢复表到出现人为或应用错误事件之前的状态。 2. 可以闪回到过去多长时间取决于系统中undo数据量的大小。 3. 并且oracle数...
  • IndexMan
  • IndexMan
  • 2012年08月02日 19:32
  • 7364

oracle 闪回点

闪回点有2种 1有保证的闪回点。这中闪回点可以让你闪回数据库到闪回点,不管db_flashback_retention_target参数设置的范围。依赖与是否有足够的磁盘空间。 2常规闪回...
  • aoerqileng
  • aoerqileng
  • 2014年08月21日 20:42
  • 889

Oracle闪回技术详解

Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复。闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行、事务、表和数据库范围。使用闪回特性,您可以查询以前...
  • ghostliming
  • ghostliming
  • 2016年01月02日 12:05
  • 1313

ORACLE闪回和恢复DROP掉的表

--闪回SELECT * FROM tableName AS OF TIMESTAMP(sysdate-1/12)  --查看2个小时以前的数据1/2就是12小时1/24就是1小时1/24/60就是1...
  • leiguomin
  • leiguomin
  • 2010年02月06日 04:54
  • 2423

oracle 闪回功能详解

Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复。闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行、事务、表和数据库范围。使用闪回特性,您可以查询以前...
  • Heng_Ji
  • Heng_Ji
  • 2014年01月07日 20:25
  • 18436

oracle10G的闪回数据库及删除表

最近终于体会了一下oracle10G的闪回数据库,这个功能太实用了,大家可以参考以下我的体会结果闪回查询(1).查询闪回例如:1)在删除员工smith记录后,希望查询到删除该行记录前的值,则可以查询e...
  • yanleigis
  • yanleigis
  • 2008年02月20日 15:34
  • 3418

oracle:视图,闪回归档

视图实际上是一个或多个表上的预查询,这些表称为基表。 从视图中检索信息与从表中检索信息的方法完全相同。通过某些视图,也可以对基表进行DML操作。 视图中并不存储着行,它们始终存储在表中。 视图的...
  • sunkobe2494
  • sunkobe2494
  • 2015年02月02日 22:48
  • 421

Oracle数据库闪回数据与表

 --闪回 --1.查看表历史时刻数据 select * from table_name  AS OF TIMESTAMP to_timestamp('20150501 00:00:0...
  • wensibo
  • wensibo
  • 2015年06月09日 10:14
  • 776
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle的闪回
举报原因:
原因补充:

(最多只允许输入30个字)