oracle 管理 之 数据恢复 之闪回

来源:互联网 发布:阿里云 ecs 高级教程 编辑:程序博客网 时间:2024/05/16 02:57

误删数据 的回魂汤  闪回 (flashback),oracle 深深 了解人冒险与莽撞的天性, 特别开发了这颗后悔药。 roacle 的世界里 我们可以还原历史。

参考文档:

 

 

----数据闪回实验文档 falshback----------------------------------------
--------1建表及数据脚本sql
-----------A 闪回查询  可到行级------------------------
create table t (id number, name varchar2(30));
 insert into t values (1, 'yangtingkun');
DELETE FROM t;
COMMIT;
--功能:取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,恢复表 至指定历史时间的 数据。
--原理 :直接利用回滚段中的旧数据构造某一刻的一致性数据版本(历史快照)。完全依赖于自动回滚段管理(AUM),使用闪回的一个前提是表不能进行 DDL 操作。
--不但不能对 DDL 操作进行回闪, 而且,也无法闪回到 DDL 操作以前的数据了。
--时间限制 :可以闪回的最大时间和回滚空间有关。如果使用了自动管理回滚表空间,那 么 UNDO_RETENTION 给出了闪回支持的最小时间。
--系统默认为最小时间设置为900s(show parameter undo_retention;)也就是说,FLASHBACK 最少可 以支持 UNDO_RETENTION(AUM自动撤销管理)
--给出的时间,如果系统比较闲,则可以闪回更长的时间。 
--闪回的方法 

 select sysdate 时间, timestamp_to_scn(sysdate) SCN from dual; ---获取当前时间和系统的SCN号:
 2012-3-10 21:17:12 3773777   --367   129
  1 2012-3-10 21:23:19 3773906 --127  45
  1 2012-3-10 21:25:26 3773951 ---134 57   
  1 2012-3-10 21:27:40 3774008
insert into bjdmb select * from bjdmb AS OF timestamp
   to_timestamp ('2012-02-29 20:02:22','yyyy-mm-dd hh24:mi:ss') ;--闪回查询历史快照数据并恢复历史数据。
 insert into t select * from t AS OF SCN 3770300; ---scn 变化根据前边的推算为3s增加1
 ----回到1小时30分前 5400s 前 crtl+shift+B 搜狗输入法特殊符号

--B 闪回版本查询--------
--功能:可以查看在一个时间段内,特定表上所有事务的变化情况 所有与这个表相关的事务操作被清晰的以时间片的方式描绘
--可以将与指定表相关所有事务信息提取,便于DBA确定使用哪个事务完成恢复可以直接从下面的视图中看到某个表相关的所有事务:
--限制:,查询一段时间内的变更,注意开始时间和结束时间之差小于undo_retention设置的值,否则会提示"下限快照表达式无效"
--说明:versions_xid 更改该行的事务标识符--versions_startscn和versions_endscn 该时刻系统更改号.versions_starttime和versions_endtime
--该数据的起如时间和结束时间--versions_operation 表示执行了什么样操作 I表示insert,U表示update,D表示delete
--方法:
DELETE FROM bjdmb WHERE nj='2011';
COMMIT;
SELECT versions_starttime, versions_endtime, versions_xid, versions_operation from bjdmb versions
between timestamp to_timestamp ('2012-03-10 21:44:22','yyyy-mm-dd hh24:mi:ss') 
and to_timestamp ('2012-03-10 21:56:22','yyyy-mm-dd hh24:mi:ss') ;

--C闪回事务查询
--功能 :闪回事务查询提供了一种查看事务级数据库变化的方法。它是 SQL 的扩展,能够看到事务带来的所有变化。语句显示出该事务引起的结果性变化。
--此外,返回补充 SQL 语句,并用于撤消由事务引起的各行变化。
--原理:闪回事务查询需要用到FLASHBACK_TRANSACTION_QUERY视图 通过闪回版本查询确定需要恢复的事务versions_xid信息,
--然后通过上面的视图查询该事务的反向UNDO语句查询UNDO语句的。
--方法:
SELECT undo_sql  FROM FLASHBACK_TRANSACTION_QUERY
WHERE XID ='08001500F7040000' ;

--D 闪回表 表级
--功能:跟闪回查询恢复数据的功能类似。
--原理:完全依赖于自动回滚段管理(AUM)自动撤销管理跟闪回查询类似。
--方法:
SELECT * FROM bjdmb;
alter table bjdmb enable row movement;
flashback table bjdmb to timestamp to_timestamp ('2012-03-10 19:56:22','yyyy-mm-dd hh24:mi:ss') ;
alter table test disable row movement;

--E 闪回DDL操作
--功能: 闪回删除就像是为一个表及其相关对象安装了一个撤消按钮。
--原理:。当用户删除一个表,Oracle 会将它放到垃圾箱中。垃圾箱中的对象一直会保留,直到用户决定永久删除它们
--或包含该本的表空间不足。垃圾箱是一个虚拟容器,用于存放所有被删除的对象。用户可以查看垃圾箱,
--“撤消”被删除的表及其相关的对象。
--方法:
DROP TABLE bjdmb;
COMMIT;
select * from dba_recyclebin;
select * from user_recyclebin;
SELECT * FROM XSPFB_FBTJB2;
flashback TABLE bjdmb to before drop;
c.清空回收站
purge table 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不放入回收站.

--F 闪回数据库 库级
--功能:虽然也需要将整个数据库回退,但不再需要还原整个数据库备份。
--原理:借助于闪回日志记录所有变化的数据块
--方法:
通过下面的查询可以确定是否启用了闪回数据库功能
select flashback_on from v$database;
可以通过下面的步骤开启闪回数据库功能:
1.设置参数
db_recovery_file_dest
db_recovery_file_dest_size
2.设置时间
db_flashback_retention_target
3.开启Flashback选项
在mount状态下执行
alter database flashback on;
4.打开数据库
在mount状态下执行闪回数据库功能
闪回命令如下:
flashback database to timestamp
to_timestamp ('2005-03-29 17:02:28','yyyy-mm-dd hh24:mi:ss');
可以在闪回后以只读方式打开,验证数据是否恢复成功
在恢复成功后,以resetlogs打开数据库
一旦resetlogs之后,将不能再flashback至resetlogs之前的时间点

 

原创粉丝点击