oracle 闪回

发布时间:2016-12-11 20:06:18 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"oracle 闪回",主要涉及到oracle 闪回方面的内容,对于oracle 闪回感兴趣的同学可以参考一下。

闪回    闪回是10g的一个新特性 ,开启闪回数据库必须处于mount状态并且还要开启归档。 Databasemounted. [email protected]>alter database flashback on; alterdatabase flashback on * ERROR atline 1: ORA-38706:Cannot turn on FLASHBACK DATABASE logging. ORA-38707:Media recovery is not enabled.  --- 必须开启闪回 [email protected]>alter database  archivelog;   Databasealtered.   [email protected]>alter database flashback on;   Databasealtered.      第01章  闪回查询(查过去某时间点,基于undo)          Oracle10g对于闪回查询进行了增强,支持更简单的 SQL 操作,允许对误删 误更新等 DML操作进行闪回。Flashback Query 仅仅是查询以前的一个快照 而已,并不改变当前表的状态,   1.        原表记录 [email protected]> select count(*) from t1;       COUNT(*)      ----------         3 2.        删除记录并提交更改   [email protected]>delete from t1;   3 rowsdeleted.   [email protected]>commit;      Commit complete. 3.        获取当前的scn号  [[email protected] ~]$ date      Fri Aug  2 16:12:55 CST 2013 [email protected]>  selectdbms_flashback.get_system_change_number scn from dual;        SCN ----------     641612 [email protected]>select count(*) from t1  as of scn  641400; selectcount(*) from t1  as of scn  64100                      * ERROR atline 1: ORA-01466: unable to read data - table definition haschanged  ---不能查询在表定义之前 [email protected]>select count(*) from t1  as of scn  641450;     COUNT(*) ----------          3 或者利用timestamp [email protected]>select * from t1 as of timestamp sysdate-13/1440;            A ----------          1          2              3 最后不要忘了提交 4.        利用闪回查询恢复表 通过增加as of timestamp的语法,就可以到undo表空间中查找到5分钟之前的记录前镜像,使用它我们就可以很轻易的并且迅速的将记录恢复: [email protected]>insert into t1 select * from t1 as of timestamp sysdate-15/1440; ----做笔记时    时间有过了        3 rows created.  第02 章  闪回表( 恢复表及附属对象到某时,row  movement,基于undo) OracleFlashback Table特性允许利用Flashback Table 语句,确保闪回到表 一个时间点。利用回滚段信息来恢复一个或一些表到以前的一个时间点( 一 照) 。FlashbackTable 将改变当前表及附属对象一起回到以前的时间点。 注意:如果需要闪回一个表,需要以下条件: 1.   需要有flashback anytable 的系统权限或者是该表的 flashback 对象权限; 2.   需要有该表的select,insert,delete,alter 权限; 3.   必须保证该表row movement。   [email protected]>select * from t1 ;            A ----------          1          2          3 删除一行 [email protected]>delete from t1 where a=2;   1 rowdeleted.   [email protected]>commit; 查询时间 [email protected]>select to_timestamp(sysdate,'yyyy-mm-dd:hh24:mi:ss' ) from dual;   TO_TIMESTAMP(SYSDATE,'YYYY-MM-DD:HH24:MI:SS') --------------------------------------------------------------------------- 02-AUG-1304.32.05 PM 设定test使能行移动 [email protected]>alter table t1 enable row movement;   Tablealtered.     [email protected]>flashback table t1  to  timestamp sysdate-6/1440;   Flashbackcomplete.   [email protected]>select * from t1;            A ----------          1          2          3 第03章  闪回删除(基于recyclebin) Oracle Flashback Drop特性提供一个类似回收站的功能,用来恢复不小心被 删除的表。当删除表时,Oracle10g并不立刻释放被删除的表所占用的空间,而 是将这个被删除的表进行自动重命名( 为了避免同类对象名称的重复) 并放进回 收站中。所谓的回收站类似于Windows系统中的回收站,是一个虚拟的容器, 用于存放所有被删除的对象,在回收站中被删除的对象将占用创建时的同样的空 间。如果这个被删除的表需要进行恢复,就可利用Flashback Drop 功能。   不能被闪回的表包括: 1 system 表空间 2 virtual private database 3  表空间被数据字典管理 4 purged 删除 5  基于空间压力被覆盖 6  表上存在策略 [email protected]> show recyclebin ---回收站为空表示没有任何表在回收站中 [email protected]> drop table t1;   Table dropped.   [email protected]> show recyclebin ORIGINAL NAME    RECYCLEBINNAME                OBJECT TYPE  DROP TIME ---------------- ------------------------------ ------------------------------- T1              BIN$4vPpoiKMafbgQKjACjgTvA==$0 TABLE            2013-08-02:16:40:36 [email protected]> select * from "BIN$4vPpoiKMafbgQKjACjgTvA==$0";            A ----------          1          2          3 [email protected]> flashback  table"BIN$4vPpoiKMafbgQKjACjgTvA==$0" to before drop; 或者 [email protected]> flashback  table   t1  tobefore drop Flashback complete.   [email protected]> select * from t1;            A ----------          1          2          3   现在我们再删除t1表,然后再建一张相同名字的表t1 [email protected]> drop table t1; [email protected]> create table t1(a varchar2(1)); [email protected]> insert into t1 values('a'); [email protected]> commit; [email protected]>  flashback  table  t1  to before drop;  flashback  table  t1  to before drop * ERROR at line 1: ORA-38312: original name is used by an existing object---因为已经存在一个对象了,我们可以对闪回删除表重命名解决这个问题。   [email protected]>  flashback  table  t1  to before drop rename to t2;   Flashback complete.   [email protected]> select * from t2;            A ----------          1          2          3 现在我们再来看看回收站(recyclebin)的管理机制,我们先把t1表删除,然后把t2改为t1再删除 [email protected]> drop table t1;   Table dropped.   [email protected]> alter table t2 rename to t1;   Table altered.   [email protected]> drop table t1;   Table dropped. [email protected]> show recyclebin ---现在回收站里有两条记录,并且recyclebin的名字都一样 ORIGINAL NAME    RECYCLEBINNAME                OBJECT TYPE  DROP TIME ---------------- ------------------------------ ------------------------------- T1              BIN$4vPpoiKPafbgQKjACjgTvA==$0 TABLE        2013-08-02:16:49:06 T1              BIN$4vPpoiKOafbgQKjACjgTvA==$0 TABLE        2013-08-02:16:48:49 现在我们执行闪回删除表 [email protected]> flashback table   t1  to before drop;   Flashback complete.   [email protected]> select * from t1;---可以看出recyclebin 的管理机制是栈类型的(后进先出)            A        ----------          1          2          3 [email protected]> flashback table   t1  to before drop; flashback  table   t1  tobefore drop * ERROR at line 1: ORA-38312: original name is used by an existing object     [email protected]> flashback table   t1  to before drop rename to t2;   Flashback complete.   [email protected]> select * from t2;   A - a   注意:需要注意的是sysdba的drop 操作不会被记录,Oracle 也从不推荐用 户使用sysdba 身份创建用户对象。 [email protected]> create table test1(a number);   Table created.   [email protected]> insert into test1 values(1);   1 row created.   [email protected]> commit;   Commit complete.   [email protected]> drop table test1;   Table dropped.   [email protected]> show recyclebin ---没有数据 [email protected]> 如果向删除一个表且不放回收站中不能进行恢复,在drop语句中可以添加purge选项 [email protected]> drop table t2 purge;   Table dropped.   [email protected]> show recyclebin [email protected]>   在Oracle 10gR2中,recyclebin 变成了一个常规参数,可以在session/system 级动态修改: [email protected]> show parameter recyclebin   NAME                                TYPE        VALUE ------------------------------------ ----------------------------------------- recyclebin                          string      on  --默认打开 回收站的管理:只要回收站使用的空间没有被回收,就可以使用闪回删除功能。 当发生以下情况是回收站的空间就会被回收 Flashback Drop 需要注意的地方:   1). 只能用于非系统表空间和本地管理的表空间   2). 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。   3). 对象能否恢复成功,取决与对象空间是否被覆盖重用。   4). 当删除表时,信赖于该表的物化视图也会同时删除,但是由于物化视图并不会被放入recycle bin,因此当你执行flashback table to before drop 时,也不能恢复依赖其的物化视图,需要dba手工介入重新创建。   5). 对于Recycle Bin中的对象,只支持查询.   1、手工purege回收站(purge recyclebin) 2、当有空间压力时自动清空回收站,空闲空间可以查看dba_free_space 视图

上一篇:高性能网络编程2----TCP消息的发送
下一篇:linux进程地址空间(1) fork/clone/vfork详解(2)

相关文章

关键词: oracle 闪回

相关评论