`

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、  在一个批作业只执行了部分更改时
分享到:
评论

相关推荐

    Oracle 9i10g 数据库管理详细

    ### Oracle 9i/10g 数据库管理详细知识点 #### 一、Oracle 9i/10g 概述 - **Oracle 9i** 和 **Oracle 10g** 是Oracle公司推出的两个重要的数据库管理系统版本。这些版本在企业级数据库管理领域具有重要意义。 - *...

    Oracle+10g+数据库管理艺术

    Oracle 10g数据库管理系统是Oracle公司发布的一款重要的数据库产品,尤其在企业级应用中广泛使用。本资料集“Oracle 10g 数据库管理艺术”深入探讨了Oracle 10g版本中的核心特性和管理技巧,旨在帮助数据库管理员...

    Oracle 10g数据库管理艺术

    Oracle 10g数据库管理系统是Oracle公司发布的一款重要的企业级数据库产品,其在数据库领域具有广泛的应用和深远的影响。本书“Oracle 10g数据库管理艺术”无疑是对这一技术的深度解析,旨在帮助读者掌握Oracle 10g的...

    Oracle10G 数据库同步

    Oracle10G数据库同步是IT领域中一个关键的议题,特别是在多数据中心或灾备环境的管理中。Oracle10G是Oracle数据库的一个重要版本,它引入了许多增强功能,旨在提高性能、安全性和可用性。本方案针对Oracle10G数据库...

    oracle 11g ,10g软件资源 百度云下载

    5. **闪回数据库**:这是一种新的数据库恢复机制,可以在不丢失任何数据的情况下将整个数据库恢复到过去某个时间点的状态。 6. **高级压缩选项**:为了进一步减少存储空间的需求,Oracle 11g引入了高级压缩功能,...

    oracle10G和oracle11G的OCI.dll

    比如,使用Oracle 10G的oci.dll可能无法连接到Oracle 11G数据库,反之亦然。因此,确保oci.dll与Navicat以及目标数据库版本的匹配至关重要。 6. 安全性增强:Oracle 11G在安全性方面做了大量改进,包括增强了身份...

    oracle 10g 快速入门 数据库教案

    - **闪回技术**:如闪回查询、闪回事务和闪回数据库,提供快速恢复机制。 8. **性能调优** - **SQL优化**:使用EXPLAIN PLAN分析查询执行计划,优化SQL语句。 - **数据库监控**:利用企业管理器(EM)、视图(如...

    Oracle+10g数据库系统管理

    Oracle 10g数据库系统管理是Oracle公司推出的一款企业级数据库管理系统,主要针对大型企业和组织的数据存储、管理和分析需求。这个版本在前代的基础上进行了多项性能优化和功能增强,为数据库管理员(DBA)提供了更...

    Oracle 10g数据库管理源代码

    Oracle 10g数据库管理系统是Oracle公司推出的一款重要的企业级数据库解决方案,其强大的功能和稳定性在业界享有盛誉。源代码对于深入理解数据库的工作原理、优化性能以及进行二次开发至关重要。下面将详细介绍Oracle...

    Oracle10g 在windows上的安装

    ### Oracle10g在Windows环境下的安装指南 #### 一、Oracle 10g简介 Oracle Application Server 10g...通过上述步骤,您可以在Windows环境下成功安装并配置Oracle 10g,为后续的应用开发和数据库管理打下坚实的基础。

    Oracle_10g数据库基础教程

    ### Oracle_10g数据库基础教程知识点概览 #### 数据库发展概述 - **网状数据库**:早期的数据库模型之一,数据以图形的方式组织,每个记录可以有多个上级节点和下级节点,适合处理复杂的数据关系。但其查询效率较低...

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

    综上所述,“数据闪回”机制是Oracle 10g数据库的一大亮点,它极大地提高了数据库的安全性和容错性,使得在面临人为错误时,数据库管理员能够更高效地进行数据恢复,减轻了日常维护的压力。通过充分利用这些功能,...

    Oracle Database 10g:数据库管理- 课堂练习I

    ### Oracle Database 10g:数据库管理核心知识点详解 #### 一、Oracle Database 10...对于学习者来说,掌握这些知识不仅有助于理解Oracle Database 10g 的运作机制,还能够在实际工作中有效地进行数据库的管理和维护。

    Oracle 11g 数据库应用简明教程

    Oracle 11g 数据库应用简明教程是针对学习Oracle数据库管理系统的一个综合教程,主要针对的是11g版本,这是Oracle公司的一个重要版本,提供了许多增强功能和优化,旨在提高数据库性能、可用性和安全性。本教程由十八...

    Oracle 10g数据库基础教程[孙风栋 等][电子教案]

    Oracle 10g数据库是Oracle公司推出的一款关系型数据库管理系统,是Oracle数据库产品线中的一个重要版本,尤其对于初学者和企业级应用来说,它提供了丰富的功能和强大的性能。本教程由孙风栋等专家编著,旨在为学习者...

    《Oracle 10g数据库管理》源代码-2881

    Oracle 10g数据库管理系统是Oracle公司发布的一款企业级数据库产品,它在数据库管理、性能优化、安全性以及可扩展性方面都有显著的提升。对于Oracle编程人员来说,掌握Oracle 10g的相关知识和源代码至关重要,这有助...

    Oracle10g数据库性能调优方法研究.docx

    ### Oracle10g数据库性能调优方法研究 #### 摘要 数据库系统的性能直接影响其可用性和稳定性。随着时间的推移,大多数数据库系统都会遇到性能问题,这些问题可能源自硬件、服务器配置、内存管理、应用程序、操作...

    oracle 10g数据库管理应用教程习题答案

    Oracle 10g数据库管理系统是Oracle公司推出的一款强大的关系型数据库产品,被广泛应用于企业级的数据存储、管理和分析。在“Oracle 10g数据库管理应用教程”这本教材中,作者马晓玉深入浅出地讲解了Oracle 10g的诸多...

    oracle 10g 数据库基础教程 孙风栋著

    Oracle 10g数据库基础教程是学习数据库管理与开发的重要参考资料,由孙风栋著,主要面向初学者和希望深入理解Oracle数据库系统的人群。在本教程中,我们将涵盖Oracle 10g的基础概念、安装配置、数据管理、SQL语言、...

    Oracle 10g数据库基础教程 [电子教案]

    Oracle 10g数据库是Oracle公司推出的企业级关系型数据库管理系统,它在数据库管理领域具有广泛的应用。本教程将深入探讨Oracle 10g的基础知识,帮助初学者掌握这一强大的数据库系统。 首先,我们从“第1章 oracle...

Global site tag (gtag.js) - Google Analytics