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/

新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

Oracle Flashback(闪回) 详解.

通常我们对数据库进行了误操作时, 需要把数据库Rollback到

nvd11的专栏 9006

数据库----Oracle中的闪回(flashback)技术

不小心删除了数据库数据怎么办

愿你的未来如约而至 ❀ 1421

数据库闪回flashback)技术

数据库Type:Oracle 应用场景:勿执行UD(更新、删除)操作的时候、且进行了commit操作。执行闪回可以将数据恢复。 操作如下: 应用场景1、将表闪回到某一时间点: 1-1、闪回操作前启用行移动功能 SQL> alter table temp_emp enable row movement; Table altered 1-2、执行闪回语句: flash

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 2162

Oracle 闪回 flashback

--flashback 功能 flashback database:将整个数据库倒退到一个特定的时刻。 flashback table:将表返回到过去的一个状态。 flashback drop:撤销 drop t...

cuiti2625的博客 202

oracle闪回查询恢复数据操作示例

oracle的闪回查询,可以查询提交在表空间的闪回数据,并可以还原所查询的数据,用于恢复短时间内的delele 或者 update 误操作,非常方便,缺点是只能恢复大概几小时内的数据。 select * from 表名 as of timestamp (sysdate-10/1440); ---查询10分钟内的旧数据 示例: 1.查询表数据,共有14条记录 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDA...

樊斌峰(Java) 3867

043-047

47. You are working on an Oracle Database 10g database. Because of data loss, you decided to perform. a Flashback ...

cuanjingyue4687的博客 66

ocp 1Z0-043 61-130题解析

61. You are working in an online transaction processing (OLTP) environment. You realize that the salary for an employee, John, has been accidentally modified in the EMPLOYEES table. Two days ago, the ...

weixin_30587927的博客 1784

043总结

1、DBVERIFY:是一种外部命令行实用程序,可以对脱机或联机的数据库执行物理数据结构 完整性检查。可以对备份文件与联机文件(或文件片段)运行此实用程序。只能检查数据文件;不能检查重做日志文件 ANALYZE:使用 A...

cluz63733的博客 604

SCN FlashBack 闪回常用语句

SCN FlashBack 闪回常用语句   可以通过函数SCN_TO_TIMESTAMP(10g以后)将其转换回timestamp: select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;   也可以用函数ti

润明--oracle--unix-IT技术专栏 992

flashback详解

1.flashback query:闪回指定时间点的记录as ofversionsselect * from t versions between scn 6133644154 and 6133644170s...

305

FLASHBACK TABLE用法介绍

1.作用 在人为操作或应用程序错误时,使用FLASHBACK TABLE语句恢复表到一个早期状态。表可以闪回到过去的时间点,依赖于系统中撤销数据的数据量。此外,Oracle数据库不能恢复到通过任何DDL操作改变了表结构的早期状态。 (注意:Oracle强烈建议数据库运行在自动撤销模式下,通过设置UNDO_MANAGEMENT初始参数值为AUTO,默认是自动模式。另外,设置UNDO_RETENT...

20386053 911

oracle Flashback详解

使用oracle数据库时,难免会碰到一些问题.     例:1.如何回滚已经commit了的数据         2.如何查询已经被覆盖掉的数据[update],或者被delete了的数据         3.如何将数据恢复到某个时间点             我们就可以使用Flashback相关语句解决相关问题了   关于Flashback[回闪]:      从9i到10g到最新的11.2g,oracle对Flashback功能进行了进一步的扩展,利用Flashback我们可做到          1.

陈伟堂的专栏 2万+

pl/sql的数据库闪回技术

数据库操作,可能会误删一些数据,怎么找回这些数据,就可以使用这篇文章介绍的闪回技术。 备注:写这篇文章源于我的一次误操作,没有备份数据,一个时间戳数据错误,导致删掉了几天的数据,找回数据的过程,了解了闪回技术,所以在这做了总结记录。 我的删除操作语句如下: delete from IE_CK_TABLE where adddate >= to_date ('2017-07-19 15:00

BlueSky216的博客 4186

flashback的用法

oracle 自9i之后增加了flashback特性,本来想自己总结下关于这个知识点,但是看到http://blog.chinaunix.net/uid-74941-id-3180228.html,http://blog.csdn.net/chenweitang123/article/details/6163455这两位兄台的总结,感觉比自己总结的好很多。所以就学习这两位仁兄的吧。     在使

crazy_will的博客 1242

Oracle Flashback技术之Flashback Table

Flashback Table需要以下条件: 1、需要有flashback any table的系统权限或者是该表的flashback对象权限; 2、需要有该表的select,insert,delete,alter权限; 3、必须保证该表row movement开启; Flashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Que

Maker 1184

Oracle数据库闪回FLASHBACK命令总结

Oracle数据库闪回FLASHBACK命令总结 一、闪回查询: 1. 方法一 select current_scn from v$database; current_scn为894072 适当的缩小scn的值,可以查到以往的数据 select * from t1 as of scn 894000; 2. 方法二 假设被删除了数据的表是table_name,通过as of ti

一片叶子飞舞 4144

Oracle10g中FLASHBACK TABLE语句恢复DML误操作

在Oracle10g中,当不慎执行了DML操作是,可以用flashback table来恢复,不过需要看参数db_flashback_retention_target所设定的时间,该单位分钟,数据库默认为1440分钟,也就...

css48419的博客 155

Flashback的原创用法

FLASHBACK TABLE SQL> select * from aaa; AA BB ----------- ------------ 1 we 2 sd 3 xc SQL> drop table aaa; Table dropped SQL> select * from aaa; select * from aaa ORA-00942: ta...

zhangtian0913的专栏 980

FLASHBACK介绍

在介绍flashback之前先介绍下undo_retention相关参数 undo_retention:表示undo数据的过期时间。系统默认这个时间设置为900即15分钟。但要注意,保证undo数据在这个时间内有效的前提是undo表空间有                        足够的空间存储。如果undo空间已满且又有新事务执行则会覆盖原来的undo数据而不管undo数据是否...

weixin_34375054的博客 516

flashback

本文章为网络笔记,看了warehouse老师的视频受益匪浅,更是感觉自己技术太过初级,特写了本笔记,方便以后反复学习! 如有任何不妥,请联系102448567@qq.com删除文章! 关于warehouse: http://blog.itpub.net/19602/viewspace-1059211/ flashback是从9i引进的概念,flashbackOracle一共支持六种,有好几种都是依赖于undo,每一种都有其使用场景,机制也不一样 1.flashbackup query(闪回查询) 语法示例:

Baldwin的博客 1052
上一篇: 043-4 不完全恢复Controlfile损坏恢复
下一篇: 043-6 ASM
ctxylong2013
博客等级 码龄11年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值