关闭

闪回

标签: tabletriggers数据库sqlinsertquery
195人阅读 评论(0) 收藏 举报

闪回(Flashback)

Oracle的操作工程中,会不可避免地出现操作失误或者用户失误,例如不小心删除了一个表等,这些失误和错误可能会造成重要数据的丢失,最终导致Oracle数据库停止允许。

在传统意义上,当发生数据丢失、数据错误问题时,解决的主要办法是数据的导入导出、备份恢复技术,这些方法都需要在发生错误前,有一个正确的备份才能进行恢复。

为了减少这方面的损失,Oracle提供了闪回技术。有了闪回技术,就可以实现数据的快速恢复,而且不需要数据备份。

一.   闪回的益处

1.恢复中,闪回技术是革命性的进步

2.传统的恢复技术缓慢:

(1)它是整个数据库或者一个文件恢复,不只恢复损坏的数据

(2)在数据库日志中每个修改都必须被检查

3.闪回速度快:

(1)通过行和事务把改变编入索引

(2)仅仅改变了的数据会被恢复

4.闪回命令很容易:

(1)没有复杂棘手的多步程序

   .闪回的类型

(1)闪回表(flashback table)

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

2.用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。

3.执行表的闪回,需要有flashbackany table的权限

闪回表语法

FLASHBACK TABLE [schema.]<table_name> TO 

{[BEFORE DROP[RENAME TO table]] 

[SCN|TIMESTAMP]expr

[ENABLE|DISABLE]TRIGGERS}

1.schema:模式名,一般为用户名。

2.TO TIMESTAMP:系统邮戳,包含年、月、日、时、分、秒。

3.TO SCN:系统更改号,

4.ENABLE TRIGGERS:表示触发器恢复以后为enable状态,而默认为disable状态。5.TO BEFORE DROP:表示恢复到删除之前。

6.RENAME TO table:表示更换表名。

注意:闪回表需要将表的行移动功能打开

alter table <table_name> enable rowmovement;

闪回表需要考虑的事情

1.FLASHBACKTABLE命令作为单一的事务执行,会得到一个单一的DML

2.表的统计数据不会被闪回

3.当前的索引和从属的对象会被维持

4.闪回表操作:

系统表不能被闪回

不能跨越DDL操作

会被写入警告日志

产生撤销和重做的数据

 

(2)闪回删除(flashback drop)

1.闪回删除,实际上从系统的回收站中将已删除的对象,恢复到删除之前的状态。

 

2.系统的回收站只对普通用户有作用。

回收站(recyclebin)简介

1.回收站是所有被删除对象及其相依对象的逻辑存储容器,例如当一个表被删除(drop)时,该表及其相依对象并不会马上被数据库彻底删除,而是被保存到回收站中。

2.回收站将用户执行的drop操作记录在一个系统表中,也就是将被删除的对象写到一个数据字典中。如果确定不再需要该对象,可以使用purge命令对回收站进行清空。

3.被删除的对象的名字可能是相同的,例如用户创建了一个test表,使用drop命令删除该表后,又创建了一个test表,这时,如果再次删除该表就会导致向回收站中添加了两个相同的表。

回收站中对象的命名规则

1.为了确保添加到回收站中的对象的名称都是唯一的,系统会对这些保存到回收站中的对象进行重命名,重命名的格式如下:

          BIN$globalUID$version

其中: BIN表示RECYCLEBINglobalUID是一个全局唯一的、24个字非长的对象,该标识与原对象名没有任何关系;version指数据库分配的版本号。

删除: 需要考虑的事情

 闪回删除对下列表无效:

•   SYSTEM 表空间内的表

•   用精细审计的数据库或虚拟的私人数据库

•   属于字典管理的表空间

•   由于空间不足已经被手动或自动删除的表

以下依赖不被保护:

•   位图索引

•   表之前删掉的索引

 

 

SQL> show recyclebin –-显示回收站

SQL> drop table flashbacktable; --删除表

表已删除。

SQL> show recyclebin    --查看删除后回收站

ORIGINAL NAME    RECYCLEBINNAME                OBJECT TYPE  DROP TIME         

---------------- ------------------------------ -------------------------------

FLASHBACKTABLE  BIN$x2GKs3ZcT2ixhdM2d5Krig==$0 TABLE       

SQL> --只有普通用户才有回收站,管理员没有

SQL> conn sys/password as sysdba ---切换到管理员

已连接。

SQL> create table ddd(ddd int);

表已创建。

SQL> drop table ddd;

表已删除。

SQL> show recyclebin  ---管理员中没有回收站

 

 

 

(3)闪回版本查询(flashback version query)

     1.闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提      交了的行记录。其语法格式如下:

select column_name[,column_name,...]

from table_name

versions between [SCN|TIMESTAMP] [expr|MINVALUE]

                  and     [epxr|MAXVALUE] as of [SCN|TIMESTAMP]expr;

其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。

闪回版本查询举例

         1.创建一张新表:

create table version_table(vid int, content varchar(20));

         2.执行如下操作:

insert into version_table values(1,'aaa');

commit;

insert into version_table values(2,'bbb');

commit;

update version_table set content='bbb1' where vid=2;

commit;

insert into version_table values(3,'ccc');

commit;

        3.执行闪回版本查询。

 

 

(4)闪回事务查询(flashback transaction query)

1.闪回事务查询实际上闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。

2.实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)

3.使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销SQL语句,如果想要撤销这个操作,就可以执行这个SQL语句。

注意:要查询flashback_transaction_query视图的信息,需要有select any transaction的权限。

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38333次
    • 积分:994
    • 等级:
    • 排名:千里之外
    • 原创:69篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    最新评论