首页 数据库 mysql教程 oracle闪回特性之flashback drop_MySQL

oracle闪回特性之flashback drop_MySQL

Jun 01, 2016 pm 01:28 PM
oracle

bitsCN.com

oracle闪回特性之flashback drop

 

从9i开始,Oracle提供了闪回(FLASHBACK)功能。Oracle闪回功能支持查看过去某个状态的数据,回退误删除的数据等等。使用闪回操作要比传统的恢复操作更加的快捷。但是闪回不能恢复介质错误,只能恢复人为造成的误操作。

oracle 提供了三种级别的闪回操作,在这主要描述flashback drop。

Flashback  drop

  在Oracle10g以后,drop不会将表直接删除掉,而是将表进行重命名,也就是说你使用了drop,oracle只是将表重命名,但是表仍然在原地保存,可以在oracle的回收站中查到相关的信息。下面是一个实验:

先来创建一个表

SQL>create table test(id integer,value varchar2(200));

SQL>insert into test values(1,'flash drop test');               

SQL>select * from test;                                                  

        ID VALUE                                                                    

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

         1 flash drop test                                                        

可以使用以下语句查看被删除的对象                                                 

SQL>select object_name,operation from user_recyclebin

where original_name='TEST';                                                            

OBJECT_NAME                   OPERATION                                     

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

BIN$pry84fToRMGMUmgRxFqrUQ==$0 DROP                      

我们可以来看看上面这个对象中的内容                                             

SQL> select * from "BIN$pry84fToRMGMUmgRxFqrUQ==$0";  

        ID VALUE                                      

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

         1 flash drop test                            

 

通过以上语句我们可以看到oracle并没有删除掉表,而是对表进行重命名。

现在我们来恢复数据

 

SQL>flashback table test to before drop;

 

闪回完成。

 

SQL>select * from test;

        ID VALUE

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

         1 flash drop test

 

Oracle在drop掉数据使用了回收站,那来看看回收站

SQL>show parameter recyclebin

 

NAME                                 TYPE        VALUE

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

recyclebin                           string      on

recyclebin这个参数表示oracle回收站是打开的,也就是说oracle可以使用flashbackdrop。

要查询回收站的信息可以使用以下几个试图

select *from  RECYCLEBIN;

select *from dba_recyclebin;

select * from user_recyclebin;等价于recyclebin

要清理回收站中的内容,可以通过以下方式

drop table tablename purge;

PURGE{TABLE |INDEX }

清理“回收站”中指定的表或索引

PURGETABLESPACE [USER ]

清理“回收站”中存储在指定表空间的上的对象(或指定用户的对象)

PURGE [USER_|DBA_]RECYCLEBIN

清理“回收站”中当前用户或者所有数据库内的对象。

满足下面任何一条,被drop掉的表,都不能被闪回了:

被drop掉的表不能存储在system表空间上;

被drop掉的表不能存储在数据字典管理的表空间上;

被drop掉的表还存储在“回收站”中,没有被purge掉。

比如说下面就无法闪回:

SQL>drop table test purge;

 

表已删除。

 

SQL>flashback table test to before drop;

flashbacktable test to before drop

*

第 1 行出现错误:

ORA-38305:对象不在回收站中

下面我们再来做一个实验:

SQL>create table test(id integer ,value varchar2(100));

 

表已创建。

 

SQL>insert into test values(1,'flashback drop 1');

 

已创建 1 行。

 

SQL>commit;

 

SQL>drop table test;

 

表已删除。

 

SQL>create table test(id integer ,value varchar2(100));

 

SQL>insert into test values(2,'flashback drop 2');

 

已创建 1 行。

 

SQL>commit;

 

提交完成。

 

SQL>drop table test;

 

表已删除。

SQL>select object_name,operation from user_recyclebin where original_name='TEST

';

 

OBJECT_NAME                    OPERATION

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

BIN$lACU0aQKTQyHGrSufKII7w==$0DROP

BIN$ysxSAgtjQuuELE6SZXxcUA==$0DROP

 

SQL>flashback table test to before drop;

 

闪回完成。

 

SQL>select * from test;

 

        ID VALUE

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

         2 flashback drop 2

那我们如何恢复到id为1的那个状态,可以使用以下方法,重命名表

SQL>flashback table test to before drop rename to new_test;

 

闪回完成。

 

SQL>select * from new_test;

 

        ID VALUE

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

         1 flashback drop 1

下面是网上做的一些总结

    1.表的删除被映射为将表的重命名,然后将其置于回收站

    2.表的索引,触发器,授权闪回后将不受到影响.索引,触发器名字可以根据需要进行更改回原来名称

    3.对于约束,如果是外键约束,表删除之后将不可恢复,其余的约束不受影响

    4.如果要查询回收站中的对象,建议将对象名使用双引号括起来

    5.闪回的实质并不能撤销已提交的事务,而是构造倒退原有事务影响的另一个事务

    6.对于已经删除的表如果在所在的表空间新增对象由于空间不足的压力而被重用将导致闪回失败

   7.对于表空间不足时,系统会自动清除回收站中最老的对象,以满足当前需求,即采用FIFO原则

    8.闪回表的常用方法

        flashback table tbname to before drop ;

        flashback table tbname to before droprename to newtbname;

        第二条语句用于被删除的表名已经被再次重用,故闪回之前必须将其改名为新表名,schema不变化

   9.如回收站中存在两个相同的原表名,则闪回时总是闪回最近的版本,如果闪回特定的表,需要指定

        该表在回收站中的名称。如

        flashback table"BIN$k1zC3yEiwZvgQAB/AQBRVw==$0" to before drop;

    10.flashback drop 不能闪回truncate命令截断的表,而是只能恢复drop 之后的表

    11.flashback drop 不能闪回drop user scott cascade删除方案的操作,此只能用flashback database

    12.在system表空间中存储的表无法启用flashback drop,且这些表会被立即删除

比特网
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle视图如何加密 oracle视图如何加密 Apr 11, 2025 pm 08:30 PM

Oracle 视图加密允许您加密视图中的数据,从而增强敏感信息安全性。步骤包括:1) 创建主加密密钥 (MEk);2) 创建加密视图,指定要加密的视图和 MEk;3) 授权用户访问加密视图。加密视图工作原理:当用户查询加密视图时,Oracle 使用 MEk 解密数据,确保只有授权用户可以访问可读数据。

oracle打不开怎么办 oracle打不开怎么办 Apr 11, 2025 pm 10:06 PM

Oracle 打不开的解决办法包括:1. 启动数据库服务;2. 启动监听器;3. 检查端口冲突;4. 正确设置环境变量;5. 确保防火墙或防病毒软件未阻止连接;6. 检查服务器是否已关闭;7. 使用 RMAN 恢复损坏的文件;8. 检查 TNS 服务名称是否正确;9. 检查网络连接;10. 重新安装 Oracle 软件。

oracle如何删除所有数据 oracle如何删除所有数据 Apr 11, 2025 pm 08:36 PM

在 Oracle 中删除所有数据需要以下步骤:1. 建立连接;2. 禁用外键约束;3. 删除表数据;4. 提交事务;5. 启用外键约束(可选)。请务必在执行前备份数据库,以防数据丢失。

oracle游标关闭怎么解决 oracle游标关闭怎么解决 Apr 11, 2025 pm 10:18 PM

解决 Oracle 游标关闭问题的方法包括:使用 CLOSE 语句显式关闭游标。在 FOR UPDATE 子句中声明游标,使其在作用域结束后自动关闭。在 USING 子句中声明游标,使其在关联的 PL/SQL 变量关闭时自动关闭。使用异常处理确保在任何异常情况下关闭游标。使用连接池自动关闭游标。禁用自动提交,延迟游标关闭。

oracle数据库如何分页 oracle数据库如何分页 Apr 11, 2025 pm 08:42 PM

Oracle 数据库分页利用 ROWNUM 伪列或 FETCH 语句实现:ROWNUM 伪列用于通过行号过滤结果,适用于复杂查询。FETCH 语句用于获取指定数量的第一行,适用于简单查询。

oracle怎么循环创建游标 oracle怎么循环创建游标 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循环可动态创建游标, 步骤为:1. 定义游标类型;2. 创建循环;3. 动态创建游标;4. 执行游标;5. 关闭游标。示例:可循环创建游标,显示前 10 名员工姓名和工资。

oracle数据库怎么停止 oracle数据库怎么停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 数据库,请执行以下步骤:1. 连接到数据库;2. 优雅关机数据库(shutdown immediate);3. 完全关机数据库(shutdown abort)。

oracle动态sql怎么创建 oracle动态sql怎么创建 Apr 12, 2025 am 06:06 AM

可以通过使用 Oracle 的动态 SQL 来根据运行时输入创建和执行 SQL 语句。步骤包括:准备一个空字符串变量来存储动态生成的 SQL 语句。使用 EXECUTE IMMEDIATE 或 PREPARE 语句编译和执行动态 SQL 语句。使用 bind 变量传递用户输入或其他动态值给动态 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 执行动态 SQL 语句。

See all articles