`

Oracle10g的行,表,数据库级回闪机制

阅读更多
Oracle10g中,可以在行、表和数据库级别使用回闪技术,具体分类如下:
1、 行级回闪
可以使用行回闪技术撤销对个别行的错误更改。有三种行级回闪技术,他们全都依赖于存储在撤销表空间中的撤销数据。
(1)  回闪查询:允许根据时间点或SCN(System Change Number)查看旧的行数据。可以查看更旧的数据,并且,如果需要可以检索它并撤销错误的更改。
(2) 回闪版本查询:允许查看相同行在一段时间内的所有版本,以便可撤销逻辑错误。它还可以提供更改的审计历史,允许比较当前数据与历史数据而不用执行DML活动。
(3)  回闪事务查询:允许查看事务级所做的更改。此技术帮助分析和审计事务,例如,一个批作业执行了两次,你想确定哪些对象受到影响等。使用此技术可撤销指定时间段内某个事务所做的更改。
2、  表级回闪
(1)   回闪表:复原一个表到某个时间点,或者到指定的SCN而不用恢复数据文件。此特性使用DML更改撤销表中的更改。回闪表特性依赖于撤销数据。
(2)回闪删除:允许倒退一条DROP TABLE语句的结果,而不用进行时间点恢复。回闪删除特性使用回收站复原被删除的表。
3、  数据库级回闪
回闪数据库特性允许复原整个数据库到某个时间点,从而撤销自该时间以来的所有更改。回闪数据库主要利用回闪日志检索数据块的更旧的版本,它也依赖归档重做日志完全地恢复数据库,不用复原数据文件和执行传统的介质恢复。

回闪和传统的恢复技术对比
与传统恢复技术不同,回闪技术的主要目的不是从介质丢失中恢复,而是从人为错误中恢复。例如:用户可能错误的删除了某个表或者错误的更改了某个表的数据。这时候你想撤销你刚才的操作。
传统上,从人为错误中恢复数据唯一的办法就是采用用户管理的备份和恢复技术。先复原数据库文件然后利用所有重做日志文件前滚的过程需要长时间的停机。
而回闪技术提供了从逻辑错误中恢复的更有效和更快的方法,多数情况下,在用这种技术进行恢复时数据库仍然联机并对用户可用。此外,回闪技术允许选择性地复原某些对象。使用传统的技术,从某种意义上说某有选择,只能恢复整个数据库。

回闪删除-Flashback Table
Oracle Flashback Table特性允许利用Flashback Table语句,确保回闪到表的前一个时间点。与Oracle 9i中的Flashback Query相似,利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照)。要注意的是,Flashback Table不等于Flashback Query,Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态,而Flashback Table将改变当前表及附属对象一起回到以前的时间点
语法:
flashback table tablename to timestamp xxx或
flashback table tablename to scn xxx

注意:如果需要回闪一个表,需要以下条件:

·需要有flashback any table的系统权限或者是该表的flashback对象权限;

·需要有该表的select,insert,delete,alter权限;

·必须保证该表row movement,否则提示因为未启用行移动功能, 不能回闪表。
这时alter table Test enable row Movement,即可保证表row movement
例:执行将test表回闪到2008年12月25日下午19点。
SQL>flashback table test to timestamp to_timestamp('2008-12-25 19:52:00','yyyy-mm-dd hh24:mi:ss');
回闪删除-Flashback Drop

回闪删除特性提供了恢复被意外删除的表(或索引)而不丢失最近事务的一种手段。在Oracle10g中,在删除一个表时,Oracle并不立即丢弃它。而是把它放在回收站中列出该表以及其依赖的对象,并保留尽可能长的时间。如果你很快意识到自己犯了错误,可以简单的使用一些命令即可找回被你删除的表。
SQL> conn rocky/rocky
已连接。
SQL> select * from emp;

EID        NAME       SEX   ID
---------- ---------- ----- ----------
aa         bb         B     11

SQL> drop table emp;

表已删除。

SQL> select * from emp;
select * from emp
            *
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL> flashback table emp to before drop;

回闪完成。

SQL> select * from emp;

EID        NAME       SEX   ID
---------- ---------- ----- ----------
aa         bb         B     11

SQL>


这样就可对误删除表进行恢复;

回闪如何工作?
在Oracle10g之前,执行DROP TABLE命令将导致表以及其所有依赖对象立即被删除,并且表段中所有相关的空间都被释放回数据库。
在 Oracle10g中,表及其依赖对象不会被立即删除,而是被重命名了,他们仍然保留在原位置,Oracle将根据空间紧迫情况尽可能长的保留它们。在 Oracle10中,有一个回收站的概念:回收站是一个逻辑容器(一个数据字典表,它保存被删除的表的相关信息,如它们的新名字和原来的名字等)信息。 
SQL> desc recyclebin;  


通过上述命令可以看到回收站的系统字段
如果想查看回收站中的内容可以使用
SQL> select object_name,droptime,dropscn,purge_object from recyclebin;  
OBJECT_NAME               DROPTIME              DROPSCN PURGE_OBJECT

BIN$ugr+dcX2R1Kk6imZ2wEQOQ==$0 2007-08-10:21:33:43    5456762        54660

在Oracle10g Release 2版本中,可以使用RECYCLEBIN初始化参数关闭回闪删除功能。默认是,此参数设置为ON,表示所有删除的表都要进入回收站,可以利用回闪删除特性恢复它们。通过设置此参数的值为OFF,关闭回闪删除特性,表在被删除后不进入回收站。 
如果需要真正的删除掉一张表,那就需要清空回收站。
u       用户使用PURGE命令(DROP TABLE table_name PURGE)从回收站中永久删除对象
u       Oracle迫于空间压力(如果Oracle在表空间中没有足够的可用空间创建新对象或不能为现有对象扩展更过空间时)自动删除回收站中的对象。

如果需要真正删除表
SQL> drop table emp purge;  
表已删除。  
SQL> select object_name,droptime,dropscn,purge_object from recyclebin;  
OBJECT_NAME                    DROPTIME               DROPSCN PURGE_OBJECT
------------------------------ ------------------- ---------- ------------  


这样就找不到表了。
我们在删除的同时,也从回收站情况了它。 
什么是回收站?
回收站是一个逻辑结构,一个名为RECYCLEBIN的数据字典。你可以通过USER_RECYCLEBIN视图,查看自己在回收站中当前登记的内容。
或者通过dba_recyclebin视图也可以查看回收站中的内容
SQL> select owner,original_name,object_name,ts_name,droptime from dba_recyclebin;  
OWNER                          ORIGINAL_NAME                    OBJECT_NAME                    TS_NAME  
------------------------------ -------------------------------- ------------------------------ -----
SCOTT                          BONUS                            BIN$FTNAGvFJS6K7oLxGNemsfg==$0 USERS    
SCOTT                          SALGRADE                         BIN$myTqyz98SN6Oi6IAmPA4LA==$0 USERS    



可以看到,当一个表被移动到回收站,Oracle给他指派一个系统生成的名字,此名字通常有30个字符长。如果你相在回收站中查询一个对象,则必须使用用其系统生成的名字,扩在双引号中:
SQL> select * from "BIN$FTNAGvFJS6K7oLxGNemsfg==$0";

M1         M2         N1
---------- ---------- ----------
abc        xyz
def        hyk
abc        xyzabc
def        hykdddd
defgdbbea  hykdddd

SQL>


注意:回收站中的对象只能进行查询,任何的DML操作将不起作用。 
恢复被删除的表
只要回收站中列出被删除的表,就可以使用命令恢复它。
FLASHBACK TABLE table_name TO BEFORE DROP
在恢复之后,Oracle将把它们从回收站中删除。
永久删除表
在删除表示使用命令
还可以使用PURGE TABLE或者PURGE INDEX命令从回收站中永久除去以前删除的表或索引。 
可以使用PURGE TABLESPACE命令从回收站中删除作为相应表空间成分的所有对象,如:
PURGE TABLESPACE users USER scott 

还有:
清除整个回收站:purge recyclebin

除回收站中的单个表:purge table test_drop
上述命令将从USERS表空间中删除单一用户scott的所有对象(以及存在于其他表空间中的所有依赖对象)。
必须的权限
为使用FLASHBACK TABLE TABLE_NAME TO BEFORE DROP命令取回一个表,你必须拥有它或者在具有此表的删除权限(DROP TABLESPACE或者DROP ANY TABLE)。为使用PURGE命令,需要类似的权限。为了查询回收站中的对象,必须具有SELECT权限和FLASHBACK权限。 

回闪数据库
回闪数据库的条件
1、  数据库日志系统必须在归档模式下。
2、  如果丢失了一个数据文件,或者由于某种原因不能使用特定的数据文件,则不能使用回闪数据库进行恢复。
3、  如果已经在想回闪的时间范围内复原或重建了一个控制文件,则不能使用回闪数据库特性。
4、  不能回闪一个数据库到RESETLOGS操作之前。
5、  不能回闪在被回闪表操作覆盖的时间范围内缩短或删除的数据文件。 
在Oracle10g中,回闪数据库功能恢复数据文件但不需要备份的数据文件,他只能使用部分归档重做日志信息。回闪数据库操作将数据库的所有数据文件倒退到以前的某个特定的时间点。 

Oracle Flashback Database(回闪数据库)特性允许通过SQL语句Flashback Database语句,让数据库前滚到当前的前一个时间点或者SCN,而不需要做时间点的恢复。回闪数据库可以迅速将数据库回到误操作或人为错误的前一个时间点,如Word中的"撤消"操作,可以不利用备份就快速的实现基于时间点的恢复。Oracle通过创建新的Flashback Logs(回闪日志),记录数据库的回闪操作。如果希望能回闪数据库,需要设置如下参数:DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢复区的大小。在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行 alter database flashback on命令。

例:执行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx);
SQL>flashback database to scn xxx



Flash Version Query
Oracle Flashback Version Query特性,利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:

·VERSIONS_SCN - 系统改变号

·VERSIONS_TIMESTAMP - 时间

例如:在test表中,时间1插入一条记录,时间2删除了这条记录,对于时间3执行select * from test当然查询不到这条记录,只能看到该表最后的提交记录。这时如果利用Flash Table或者是Flash Query,只能看到过去的某一时间点的一个快照,而利用Flashback Version Query,能够把时间1、时间2的操作给记录下来,并详细的查询出对表进行的任何操作。
SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;

在上述查询中,列
versions_starttime、 versions_endtime、versions_xid、versions_operation是伪列,还有一些伪列,如 versions_startscn和versions_endscn显示了该时刻的系统更改号。列versions_xid显示了更改该行的事务标识符。
当然,除了分析以上所有的变更之外,可以根据需要指定时间段,如显示在2008-12-25时间在15:30到16:30之间test表的所有变更。
SQL>select id from test
versions between timestamp to_date(‘2008-12-2515:30:00’,’yyyy-mm-dd hh24:mi:ss’) and to_date(‘2008-12-25 16:30:00’,’yyyy-mm-dd hh24:mi:ss’)


Flashback Transaction Query
Oracle Flashback Transaction
Query特性确保检查数据库的任何改变在一个事务级别,可以利用此功能进行诊断问题、性能分析和审计事务。它其实是Flashback Version
Query查询的一个扩充,Flashback Version
Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction
Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。

例:Flashback Transaction Query的操作实例。

(1)在test表中删除记录,获得事务的标识XID,然后提交。
SQL>delete from test where id=2;
SQL>select xid from v$transaction;
XID
----------------
04001200AE010000
SQL>commit;



在测试中方便起见,在事务没有提交的时候,获得事务的XID为04001F0035000000。实际情况下,不可能去跟踪每个事务,想要获得已提交事务的XID,就必须通过上面的Flashback Version Query。

(2)进行Flashback Transaction Query
SQL>select * from FLASHBACK_TRANSACTION_QUERY
where xid=’04001F0035000000’;
UNDO_SQL
insert into "FLASHTEST"."TEST"("ID") values (’2’);



注意:这个删除语句对应的是1个Insert语句,如果想回滚这个事务,执行这个Insert语句即可。

可以看到,Flashback Transaction Query主要用于审计一个事务,并可以回滚一个已经提交的事务。如果确定出错的事务是最后一个事务,我们利用Flashback Table或者Flashback Query就可以解决问题。但是,如果执行了一个错误的事务之后,又执行了一系列正确的事务,那么上面的方法就无能为力,利用Flashback Transaction Query可以查看或回滚这个错误的事务。

可以在下述情况下使用回闪操作:
1、  找回某个删除的模式
2、  在某个用户错误影响到整个数据库时
3、  在错误的截断一个表时
4、  在一个批作业只执行了部分更改时
分享到:
评论

相关推荐

    oracle9i oracle11g oracle10g 性能调优 基础学习 视频地址

    Oracle10G数据库系统教程02-0003 10 Oracle10G数据库系统教程02-0003 10 Oracle10G数据库系统教程02-0006 10 Oracle10G数据库系统教程01-0002 11 Oracle10G数据库系统教程01-0003 11 Oracle10G数据库系统教程01-0004...

    Oracle 10g的“数据闪回”机制——Oracle 10g系列专栏(一).pdf

    Oracle 10g的“数据闪回”机制——Oracle 10g系列专栏(一).pdf

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    oracle数据库重联及日志输出及配置文件框架

    这个是vc9.0平台,oracle数据库为11g数据库,具有重连机制,日志文件输出机制,文件配置机制。

    Oracle11g从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    Oracle 11g全新特性完全解析XML成为热点

    Oracle移动数据的速度已经超过了专门的文件系统,这一方面得益于Oracle对数据库引擎的优化,同时也与Oracle 11g中应用的大量压缩技术有关。另外,在触发器等方面,Oracle 11g的运行速度也将更快,特别是针对DML的...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    13.4.6闪回DROP的表 13.5数据库特殊情况的恢复 13.5.1联机Redo日志损坏与恢复 13.5.2数据文件脱机与恢复 13.5.3表空间脱机与恢复 13.6本章小结 第14章 RAC安全性 14.1数据访问安全性 14.1.1 Oracle安全性解决...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    1.2.2 olap数据库 10 1.3 数据库的硬件设计 14 1.3.1 存储容量 15 1.3.2 存储的物理设计 16 1.3.3 数据的安全 17 1.4 小结 19 第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 ...

    Oracle11g体系结构深入剖析和运维管理(一)

    Oracle 11g体系结构深入剖析和运维管理(一)资源目录:【】1_Oracle学习前奏【】2_Oracle软件安装准备工作【】3_Oracle软件安装和数据库的创建【】4_Oracle数据库及相关软件的启动和关闭【】5_计算机工作机制概述【】...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    第10章 数据库表 335 10.1 表类型 335 10.2 术语 337 10.2.1 段 337 10.2.2 段空间管理 339 10.2.3 高水位线 340 10.2.4 freelists 342 10.2.5 PCTFREE和PCTUSED 345 10.2.6 LOGGING和NOLOGGING 348 10.2.7...

    Oracle.11g.从入门到精通 (2/2)

    13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建用户 13.2.2 修改用户 13.2.3 删除用户信息 13.2.4 查询用户 13.3 虚拟专用数据库 13.3.1 基于行的VPD 13.3.2 基于列的VPD 13.4 透明数据加密(’FDE) ...

    Oracle 11g 从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    Oracle.11g.从入门到精通 (1/2)

    13.1.2 Oracle 11g的安全性机制 13.2 用户管理 13.2.1 创建用户 13.2.2 修改用户 13.2.3 删除用户信息 13.2.4 查询用户 13.3 虚拟专用数据库 13.3.1 基于行的VPD 13.3.2 基于列的VPD 13.4 透明数据加密(’FDE) ...

    基于Oracle 10g的栅格数据共享机制研究与实现.pdf

    基于Oracle 10g的栅格数据共享机制研究与实现.pdf

    Oracle 11g 从入门到精通.haozip02.7z

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了 Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例...

    oracle10g课堂练习I(2)

    Oracle Database 10 g :“g”代表网格 1-6 Oracle 数据库体系结构 1-8 数据库结构 1-9 Oracle 内存结构 1-10 进程结构 1-12 Oracle 实例管理 1-13 服务器进程和数据库缓冲区高速缓存 1-14 物理数据库结构 1-...

    Oracle 11g 从入门到精通.haozip01.7z

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了 Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

     Bob Bryla是Oracle 9i和10g的认证专家,他在数据库设计、数据库应用程序开发、培训和Oracle数据库管理等方面拥有20多年的工作经验,他也足Dodgeville的Land'End公司的首席Internet数据库设计师和Oracle DBA. ...

Global site tag (gtag.js) - Google Analytics