Oracle的闪回

原创 2012年03月25日 11:20:34
Oracle的闪回
	oracle中为什么会有闪回呢!它的作用是什么呢?我们来学习一下闪回吧!闪回和回滚异曲同工之妙。
一   闪回的介绍
(1)在Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数据的丢失,最终导致Oracle数据库停止允许。
(2)在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误前,有一个正确的备份才能进行恢复。
(3)为了减少这方面的损失,Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份。
	有了闪回,那他的优点是什么呢?
(1)恢复中,闪回技术是革命性的进步
(2)传统的恢复技术缓慢:
它是整个数据库或者一个文件恢复,不只恢复损坏的数据
在数据库日志中每个修改都必须被检查
(3)闪回速度快:
通过行和事务把改变编入索引
仅仅改变了的数据会被恢复
(4)闪回命令很容易:
没有复杂棘手的多步程序
	闪回的类型:
	闪回表(flashback table)、闪回删除(flashback drop)、闪回版本查询(flashback version query)、闪回事务查询(flashback transaction query)
闪回的益处
(1)恢复中,闪回技术是革命性的进步
(2)传统的恢复技术缓慢:
•	它是整个数据库或者一个文件恢复,不只恢复损坏的数据
•	在数据库日志中每个修改都必须被检查
(3)闪回速度快:
•	通过行和事务把改变编入索引
•	仅仅改变了的数据会被恢复
(4)闪回命令很容易:
•	没有复杂棘手的多步程序

二   闪回表的使用
1.闪回表
闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。

用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。
执行表的闪回,需要有flashback any table的权限
2.举例
(1)查询闪回信息
SQL> show parameter undo;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

(2)修改闪回信息
	在修改时首先要切换用户,为conn system/orcl,然后再修改为:
SQL> alter system set undo_retention=1200 scope=both;
System altered
(3)在修改密码的时候要先打开比表的行移动开关
打开行移动开关
	SQL> alter table flashbacktable enable row movement;
Table altered
(4)闪回的应用
	通过temestamp闪回
	首先要先创建表来存储数据:
SQL> create table flashbacktable(id number,ename varchar2(20));
Table created
	然后向其中插入数据
	SQL> insert into flashbacktable values(5,'sdf');
1 row inserted
commit;
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2012-03-23 15:24:53
SQL> flashback table flashbacktable to timestamp to_date('2012-03-23 15:24:53','yyyy-mm-dd hh24:mi:ss');
Done
在查询数据的时候刚才插入的数据没有了,注意是在提交之后执行的闪回

通过scn号闪回
首先查询出当前日期的scn号
SQL> select timestamp_to_scn(sysdate) from dual; 
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
                  1335034

然后向表中插入数据
SQL> insert into flashbacktable values(12,'dfds');
1 row inserted
SQL> insert into flashbacktable values(13,'dfds');
1 row inserted

SQL> select timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
                  1335053

SQL> update flashbacktable set ename='aaaaaaaaaa' where id=12;
1 row updated

SQL> select timestamp_to_scn(sysdate) from dual;
TIMESTAMP_TO_SCN(SYSDATE)
-------------------------
                  1335088

因为有三个阶段的scn,所以可以指定那个scn来闪回
执行的语句为:
SQL> flashback table flashbacktable to scn(1335053);
Done

三  闪回删除
闪回删除,实际上从系统的回收站中将已删除的对象,恢复到删除之前的状态。
系统的回收站只对普通用户有作用
1.	闪回表删除的介绍
(1)回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。
(2)回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。
(3)被删除的对象的名字可能是相同的,例如用户创建了一个test表,使用drop命令删除该表后,又创建了一个test表,这时,如果再次删除该表就会导致向回收站中添加了个相同的表
(4)为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中的对象进行重命名
2.程序讲解
通过show recyclebin命令可以查询oracle回收站的删除的信息
如果要闪回,则执行命令:
flashback table backtable to before drop;
注,如果两个命名相同,不能够闪回,可以起别名:为:
flashback table backtable to before drop rename to a;


四  闪回版本查询
闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录
1.首先来创建一个表
create table version_table(id number,content varchar2(20));
2.向表中插入数据和更新数据
  insert into version_table values(1,'Tom');
 insert into version_table values(2,'Tom');
向表中更新数据
update version_table set ename='tom11' where id=2;
3.通过闪回版本的查询获取该历史的记录
 select id,ename,versions_operation,versions_starttime,versions_endtime from version_table versionsbetween timestamp minvalue and maxvalue;
4.通过时间段来闪回	
select empno,ename,versions_operation,versions_starttime,versions_endtime from version_table versions between timestamp to_date('2012-03-22 14:42:19','yyyy-mm-dd hh24:mi:ss') 
and to_date('2012-03-22 14:43:28','yyyy-mm-dd hh24:mi:ss');

五  闪回事务查询
1.查询事务的信息
 desc flashback_transaction_query;
2.创建表
create table transaction_table (id number,ename varchar(20));
3.向表中插入数据
insert into transaction_table values(1,'tom');
insert into transaction_table values(2,'tom');
update transaction_table set ename='Tom123' where id=1;
4. 先通过闪回版本查询获取事务相关信息
SQL> select id,ename,versions_operation,versions_xid from transaction_table versions between timestamp minvalue and maxvalue;
 
        ID ENAME                VERSIONS_OPERATION VERSIONS_XID
---------- -------------------- ------------------ ----------------
         2 sdfd                 U                  04001400EE010000
         1 Tom123               I                  020022002F020000
         2 tom                  I                  020022002F020000

5.执行闪回事务查询
select xid,operation,table_name,undo_sql from flashback_transaction_query where xid='04001400EE010000';



 

oracle 闪回功能详解

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

FlashBack总结之闪回数据库与闪回删除

闪回数据库的特性  Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志...
  • techsupporter
  • techsupporter
  • 2016年02月15日 15:47
  • 2129

闪回事务处理回退

闪回事务处理回退是一个逻辑恢复选项,用于回退特定事务处理及相关事务处理,同时保持数据库联机。相关事务处理通过连续编写(WAW) 关系或主键约束关系相关联,在前者中事务处理对目标事务处理更改的同一数据进...
  • rlhua
  • rlhua
  • 2013年10月01日 21:43
  • 4689

Oracle DB执行闪回数据库

• 配置闪回数据库 • 执行闪回数据库操作 • 监视闪回数据库     闪回数据库 闪回数据库操作: • 作用类似于数据库的倒带按钮 • 可以在用户造成了逻辑数据损坏的情况下使用   闪回数据...
  • rlhua
  • rlhua
  • 2013年10月08日 10:35
  • 5018

oracle闪回表详解

闪回表:注意事项 · 整个FLASHBACK TABLE 语句是在一个事务处理中执行的。有可能会闪回所指定表,也可能不闪回任何指定表。 · 操作进行中,闪回表获取了该语句指定的所有表上的数据操作语...
  • wanghui5767260
  • wanghui5767260
  • 2014年03月12日 14:12
  • 1377

oracle物理体系结构-----归档重做日志和闪回恢复区

归档重做日志的复制位置可采用2种配置方法: 1.选择archivelog目标目录 (1)如果使用spfile,则可以使用alter system命令设置log_archive_dest_n参数,该 参...
  • wbj19890107
  • wbj19890107
  • 2015年02月05日 15:18
  • 702

Oracle学习(十三)之管理表空间以及数据库闪回设置

管理表空间以及数据库闪回设置,要求如下: 1)数据文件存储位置(OMF)设置为“e:\ora11g\D647001”, 2)创建表空间为“TBS_716”, 3)—-块大小(TBS_716)设置...
  • lzg1169350237
  • lzg1169350237
  • 2015年06月11日 20:21
  • 732

ORACLE 11G 闪回数据归档

ORACLE 11G中闪回相关的新特性: oracle 9i和10g中具有用于增强DBA和开发人员执行逻辑数据修补的几个和闪回相关的特新。比如9i中支持闪回查询(基于undo数据),orac...
  • snakemyy
  • snakemyy
  • 2013年03月08日 11:14
  • 2390

oracle闪回数据库详解

oracle闪回技术详细整理,包括闪回数据库,闪回表,闪回版本和闪回事务 理论+实践 详细了解ORACLE的闪回技术...
  • wanghui5767260
  • wanghui5767260
  • 2014年03月12日 10:00
  • 1293

Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据

闪回表,实际上就是将表中的数据快速恢复到过去的一个时间点或者系统改变号SCN上。实现表的闪回,需要用到撤销表空间相关的UNDO信息,通过SHOW PARAMETER UNDO命令就可以了解这些信息。用...
  • yaucyj
  • yaucyj
  • 2013年01月26日 16:03
  • 7892
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle的闪回
举报原因:
原因补充:

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