043-5 Flashback 闪回

--**********************
1.Flashback Query 闪回查询(Undo)
Select * From dba_users
Select * From dba_tables Where owner= 'A'   --存在表TT
sqlplus a/a@testdb
Select * From tt;   --**此处为临时出现的问题;报错:ORA-25153:Temporary Tablespace is Empty 
Select * From Dba_temp_files;   --临时表空间的文件列表为空,需要增加临时表空间文件
Alter Tablespace temp Add Tempfile 'C:\oracle\product\10.2.0\oradata\testDB\TEMP01.DBF' Size 20m Reuse;   --由于该文件已经存在,加上reuse后,重新创建新文件将原来的覆盖
Select * From tt;   --查询成功
        ID NAME
---------- ----------
         1 a
         2 b
Select current_scn From v$database;   --729198
Delete From tt;    --删除TT表的所有数据
Commit;  
--使用不完全恢复比较麻烦,这里直接演示闪回查询
Select * From tt As Of Scn 729198;   --查询该SCN的TT表,实际上使用的是UNDO
Insert Into tt Select * From tt As Of Scn 729198;
Commit
Select * From tt;     --删除的2条数据已经恢复成功
--**错误删除数据后恢复的方法:
a.使用dbms_logmnr对日志进行挖掘,确定错误操作的语句和执行时间
b.使用timestamp和SCN的转换,找到错误操作的SCN号
c.使用闪回查询将删除的数据恢复

2.Flashback Drop 闪回删除的表(recyclebin回收站)
SQL> show user;
USER 为 "A"
SQL> drop table tt;
SQL> show recyclebin;       --TT数据不能存放在system表空间,否则无法进入回收站;另外对象不能在DMT表空间(DMT,字典管理的表空间)
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TT               BIN$WcXRGpe4Rp2yAECUp7FecQ==$0 TABLE        2014-02-18:13:22:58     
SQL> show parameter recyclebin;     --on代表启动回收站删除时候只是更改表名,off代表删除时直接删除定义

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      On
select * from dba_recyclebin;   --查看回收站的所有信息
select * from user_recyclebin;  --查看回收站本用户下的信息
SQL> flashback table tt to before drop;
闪回完成。
Flashback Table tt To Before Drop t1;  --闪回的时候进行重命名

--升级,切换系统,跨平台
--1.利用实体化视图日志,实现数据的同步,同步过程中产生的数据写入日志,在数据库进行切换时,只需要停很短的时间,就可以完成设备的切换
--2.流

--回收站数据的释放
表空间优先使用空余空间,不足时释放回收站中的空间,仍然不足进行扩展,扩展不成功报错
Purge Recyclebin                             --手动清除回收站当前用户下所有内容
Purge Tablespace users;                      --手动清除回收站指定表空间下所有内容
Purge Recyclebin Tablespace test User a;     --手动清楚回收站test表空间a用户下的内容

3.Flashback Table(sys User)(Undo)
sqlplus a/a@testdb
Create Table t(Id Int) Tablespace a;
Insert Into t Values(1);
Commit
Insert Into t Values(2);
Commit
Select current_scn From v$database;   --695332
Update t Set Id = 3
Commit
Select * From t;   --id都为3
select * from t as of scn 695332;   --用闪回查询可以查询到scn=695332时的表T
SQL>  flashback table t to scn 695332;    --闪回表语句
ORA-08189: cannot flashback the table because row movement is not enabled
Select table_name,row_movement From dba_tables Where owner='A'   --row_movement NO,表示除了删除以外的DML都不允许改变数据的rowid,而闪回时可能会改变rowid
SQL> alter table t enable row movement;
SQL>  flashback table t to scn 695332;    --闪回成功

4.Flashback version Query闪回版本查询(Undo)
--对做过的动作版本的回放
sqlplus a/a@testdb
SQL> create table t(id int,name varchar2(10));
SQL> insert into t values(1,'a');
SQL> insert into t values(2,'b');
SQL> commit;
SQL> insert into t values(3,'c');
SQL> insert into t values(4,'d');
SQL> commit;
SQL> insert into t values(5,'e');
SQL> commit;
Select Versions_Xid, Versions_Operation, Versions_Startscn, Versions_Starttime, Versions_Endscn, Versions_Endtime, Id,
             Name
From t Versions Between Scn Minvalue And Maxvalue
/*
              VERSIONS_XID    VERSIONS_OPERATION    VERSIONS_STARTSCN          VERSIONS_STARTTIME         VERSIONS_ENDSCN    VERSIONS_ENDTIME    ID    NAME
1                0100270012010000      I                    755710                19-2月 -14 11.11.03 上午                                          5      e
2                0A001B0010010000      I                    755701                19-2月 -14 11.10.57 上午                                          4      d
3                0A001B0010010000      I                    755701                19-2月 -14 11.10.57 上午                                          3      c
4                04001D000C010000      I                    755210                19-2月 -14 11.10.45 上午                                          2      b
5                04001D000C010000      I                    755210                19-2月 -14 11.10.45 上午                                          1      a
*/

SQL> update t set name='update' where id=1;
SQL> commit;
SQL> delete from t where id = 3;
SQL> commit;

Select Versions_Xid, Versions_Operation, Versions_Startscn, Versions_Starttime, Versions_Endscn, Versions_Endtime, Id,
             Name
From t Versions Between Scn Minvalue And Maxvalue
/*
              VERSIONS_XID    VERSIONS_OPERATION    VERSIONS_STARTSCN          VERSIONS_STARTTIME         VERSIONS_ENDSCN    VERSIONS_ENDTIME            ID    NAME
1                0A00190012010000      D                    759962                19-2月 -14 01.09.57 下午                                                  3      c
2                0300190060010000      U                    759953                19-2月 -14 01.09.36 下午                                                  1      update
3                0100270012010000      I                    755710                19-2月 -14 11.11.03 上午                                                  5      e
4                0A001B0010010000      I                    755701                19-2月 -14 11.10.57 上午                                                  4      d
5                0A001B0010010000      I                    755701                19-2月 -14 11.10.57 上午    759962             19-2月 -14 01.09.57 下午   3      c
6                04001D000C010000      I                    755210                19-2月 -14 11.10.45 上午                                                  2      b
7                04001D000C010000      I                    755210                19-2月 -14 11.10.45 上午    759953             19-2月 -14 01.09.36 下午   1      a
*/

5.Flashback Transaction Query闪回事务查询
Select * From flashback_transaction_query Where Xid = '0300190060010000'    --撤销update语句的undo_sql = update "A"."T" set "NAME" = 'a' where ROWID = 'AAAC/CAAFAAAAAcAAA';
Select * From flashback_transaction_query Where Xid = '0A00190012010000'    --撤销delete语句的undo_sql = insert into "A"."T"("ID","NAME") values ('3','c');

6.Flashback database闪回数据库(基于不完全恢复)
Select flashback_on From v$database   --查看数据库是否支持闪回数据库  NO  代表不支持
--**开启闪回数据库 必须在归档模式 必须要使用闪回恢复区
SQL> shutdown Immediate
SQL> startup mount;
SQL> alter database flashback on;    --启用闪回数据库
SQL> show parameter db_recovery      --查看db_recovery_file_dest属性有值,代表使用了闪回恢复区

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest                string                            C:\oracle\product\10.2.0\flash
                                                                       _recovery_area
Select flashback_on From v$database  --yes 开启了闪回数据库
Alter Database Open;

Select * From DBA_USERS;
Select current_scn From v$database;  --765337 这个SCN时用户C还在

Drop User C Cascade;    --删除用户C及相关对象,使其产生闪回日志
Select * From v$flashback_database_logfile    --查询闪回日志文件信息
/*       NAME    LOG#    THREAD#    SEQUENCE#    BYTES    FIRST_CHANGE#    FIRST_TIME
1    C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\FLASHBACK\O1_MF_9J8JPXD6_.FLB    1    1    1    8192000    763996    2014-2-19 13:36:29*/
Select * From v$flashback_database_log        --查询闪回日志汇总信息
/*       OLDEST_FLASHBACK_SCN    OLDEST_FLASHBACK_TIME    RETENTION_TARGET    FLASHBACK_SIZE    ESTIMATED_FLASHBACK_SIZE
1        763855                  2014-2-19 13:36:29      1440                8192000            87515136                */
OLDEST_FLASHBACK_SCN        --最远能闪回到的SCN点
SQL> show parameter Flashback        --最小保留flashback的时间参数 1440分钟=1天
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440
Select * From v$flashback_database_stat       --查询闪回日志的数据统计信息
/*       BEGIN_TIME    END_TIME    FLASHBACK_DATA    DB_DATA    REDO_DATA    ESTIMATED_FLASHBACK_SIZE
1    2014-2-19 13:36:29    2014-2-19 14:01:38    3457024    1900544    1299456    0                     */
sqlplus Sys@testdb As Sysdba
Shutdown Immediate
startup Mount
Flashback Database To Scn 765337;
SQL> select file#,checkpoint_change# from v$datafile;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             765343
         2             765343
         3             765343
         4             765343
         5             765343
--**oracle建议先以只读方式开启数据库,确定需要的数据闪回成功后再启动数据库
SQL> alter database open read only;      --只读方式不能开启审计功能,即 alter system set audit_trail=none scope=spfile;
Select * From DBA_USERS;                 --查询到用户C已经恢复
Shutdown Immediate
startup Mount
Alter Database Open Resetlogs;           --由于闪回数据库基于不完全恢复,所以需要加RESETLOGS

Select * From v$process                  --该进程负责生成闪回日志

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15810196/viewspace-1146682/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15810196/viewspace-1146682/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值