设为首页 加入收藏

TOP

Oracle学习(15)【DBA向】:闪回(一)
2015-11-21 01:59:03 来源: 作者: 【 】 浏览:2
Tags:Oracle 学习 DBA 闪回

闪回Flashback

什么是闪回

l在Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数 据的丢失,最终导致Oracle 数据库停止。
l在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误 前,有一个正确的备份才能进行恢复。
l为了减少这方面的损失, Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份。

闪回的好处

恢复中,闪回技术是革命性的进步 传统的恢复技术缓慢: ?它是整个数据库或者一个文件恢复,不只恢复损坏的数据 ?在数据库日志中每个修改都必须被检查 闪回速度快: ?通过行和事务把改变编入索引 ?仅仅改变了的数据会被恢复 闪回命令很容易: ?没有复杂棘手的多步程序



闪回的类型


l闪回表(flashback table) 将表回退到过去的某个时间上,该时间在某个操作之前 l闪回删除(flashback drop) 使用Oracle的回收站 l闪回版本查询(flashback version query) select l闪回事务查询(flashback transaction query) select ---> undo_sql
分别针对四种问题: 1. 错误地删除了一条数据,并且commit 2. 错误地删除了表 3. 如何查询表上的历史记录 4. 如何撤销一个已经提交了的事务

闪回表

闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者 系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。
用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。
执行表的闪回,需要有flashback any table的权限

闪回表的语法

FLASHBACK TABLE [schema.]

TO

{[BEFORE DROP [RENAME TO table]]

[SCN|TIMESTAMP]expr

[ENABLE|DISABLE]TRIGGERS}


schema:模式名,一般为用户名。 TO TIMESTAMP:系统邮戳,包含年、月、日、时、分、秒。 TO SCN:系统更改号, ENABLE TRIGGERS:表示触发器恢复以后为enable状态,而默认为disable状态。 TO BEFORE DROP:表示恢复到删除之前。 RENAME TO table:表示更换表名。

********************************************************** 注意:闪回表需要将表的行移动功能打开 ?alter table enable row movement; **********************************************************

闪回表举例

查询某时间对应的SCN号: select to_char(sysdate,'yyyy-mm-dd hh24:mi:mm') 时间,timestamp_to_scn(sysdate) SCN from dual;


时间 SCN
------------------- ----------
2012-03-29 10:26:03 1066202

************************************************************************* 创建表,进行删除操作,并闪 回完整示例:

create table flashback_table
2 (fid number,fname varchar2(20));


表已创建。


SQL> insert into flashback_table values(1,'Tom');


已创建 1 行。


SQL> insert into flashback_table values(2,'Mary');


已创建 1 行。


SQL> insert into flashback_table values(3,'Mike');


已创建 1 行。


SQL> commit;


提交完成。


SQL> select * from flashback_table;


FID FNAME
---------- --------------------
1 Tom
2 Mary
3 Mike


SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:mm') 时间,timestamp_to_scn(sysdate) SCN
2 from dual;


时间 SCN
------------------- ----------
2012-03-29 10:32:03 1066413


SQL> delete from flashback_table where fid=2;


已删除 1 行。


SQL> commit;


提交完成。


SQL> select * from flashback_table;


FID FNAME
---------- --------------------
1 Tom
3 Mike


SQL> --授权:grant flashback any table to scott;
SQL> flashback table flashback_table to SCN 1066413;
flashback table flashback_table to SCN 1066413
*
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表




SQL> --开启表的行移动
SQL> alter table flashback_table enable row movement;


表已更改。


SQL>
SQL> flashback table flashback_table to SCN 1066413;


闪回完成。


SQL> select * from flashback_table;


FID FNAME
---------- --------------------
1 Tom
2 Mary
3 Mike


闪回表需要考虑的事情

FLASHBACK TABLE命令作为单一的事务执行,会得到一个单一的DML锁 表的统计数据不会被闪回 当前的索引和从属的对象会被维持 闪回表操作: ?系统表不能被闪回 ?不能跨越DDL操作 ?会被写入警告日志 ?产生撤销和重做的数据

闪回删除

闪回删除,实际上从系统的回收站中将已删除的对象,恢复到删除之前的状态。
系统的回收站只对普通用户有作用。

闪回删除:回收站(recyclebin)简介


l回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。 l l回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。 l l被删除的对象的名字可能
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle获得日期中的年份 下一篇ORACLE11G在同一台linux服务器从..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: