在介绍flashback之前先介绍下undo_retention相关参数

undo_retention:表示undo数据的过期时间。系统默认这个时间设置为900即15分钟。但要注意,保证undo数据在这个时间内有效的前提是undo表空间有

足够的空间存储。如果undo空间已满且又有新事务执行则会覆盖原来的undo数据而不管undo数据是否过期。不过,如果undo空间足够,

尽管undo数据已经   过了指定的时间,只要不被覆盖,该undo数据还是存在,因此也还是能够被执行flashback闪回(但是必须在增删改

表记录之前先执行alter table table_name enable row movement即允许该表进行行移动,否则过了指定的时间该undo数据尽管没被

覆盖也会无法闪回了,会提示ora-01466错误)。

如果想确保undo数据有效期为undo_retention指定的时间,可以通过 为undo表空间指定Retention Guarantee,如下:

Alter tablespace undotbs1 retention guarantee;(禁止的话执行:Alter tablespace undotbs1 retention noguarantee;)这样就可以保证undo表空间尽管已经满了,有新事务出现也不会去覆盖未过期的undo数据。当然此时的新事务执行就要卡住了。

具体参考http://blog.itpub.net/post/602/469270

一、FLASHBACK QUERY 介绍

创建表并插入数据     
CREATE TABLE flashback_test (a VARCHAR2(255),b VARCHAR2(255),c VARCHAR2(255));
INSERT INTO flashback_test VALUES('d1','s','s');
INSERT INTO flashback_test VALUES('d2','sw','sf');
INSERT INTO flashback_test VALUES('d3','swd','ss');

删除数据
DELETE FROM flashback_test WHERE a='d1';
--基于TIMESTAMP时间的返回查询
SELECT *FROM flashback_test AS OF TIMESTAMP SYSDATE - 15/1440;
提示ORA-01466:无法读取数据-表定义已更改
但是没有做过表修改啊,奇怪了
DELETE FROM flashback_test WHERE a='d2';
SELECT *FROM flashback_test AS OF TIMESTAMP SYSDATE - 10/1440;
1    d2    sw    sf
2    d3    swd    ss
但是第一条记录找不回来了,看来返回查询只能在一定时间内,超过了该时间就无法查询了。

--基于SCN的返回查询

查询某个时刻的scn
SQL> select timestamp_to_scn(to_date('20100105160606','yyyy-mm-dd hh24:mi:ss')) from dual;
查看scn
select dbms_flashback.get_system_change_number from dual;
select current_scn from v$database;

GRANT EXECUTE ON dbms_flashback TO fyzh_ora;--授权一般用户可执行dbms_flashback包
SELECT dbms_flashback.get_system_change_number FROM dual;--查看当前的SCN
SELECT *FROM flashback_test AS OF SCN 12486407805791; 
1    d3    swd    ss

FLASHBACK TABLE只是针对表的增删改操作进行闪回

通过如下语句可以准确的获取当前的时间点
SQL>  variable scn number;
SQL>  exec :scn:=dbms_flashback.get_system_change_number (scn为3373273)
select count(1) from t;--20000条记录
delete from t;
select count(1) from t;--现在只有0条记录

select count(1) from t as of scn :scn;查找在删之前的某个时间点,数据仍是20000条

现在将表闪回到3373273这个点
flashback table t to scn:scn;
提示“ORA-08189: 因为未启用行移动功能, 不能闪回表”错误,执行如下语句
alter table t enable row movement;--允许对行rowid进行移动

再进行闪回
flashback table t to scn:scn;

此时再查询该表
select count(1) from t;恢复了20000条记录。

我们也可以通过flashback_transaction_query这个视图中获取想要闪回的时间点。

--TRUNCATE TABLE 操作的闪回实验
TRUNCATE TABLE flashback_test;
SELECT * FROM flashback_transaction_query WHERE table_name='FLASHBACK_TEST';
FLASHBACK TABLE flashback_test TO SCN 12486407806290;
提示ORA-01466:无法读取数据-表定义已更改
说明:ddl操作不会记录到flashback_transaction_query视图中,且也不能执行闪回
创建表并插入数据     
CREATE TABLE flashback_test (a VARCHAR2(255),b VARCHAR2(255),c VARCHAR2(255));
INSERT INTO flashback_test VALUES('d1','s','s');
INSERT INTO flashback_test VALUES('d2','sw','sf');
INSERT INTO flashback_test VALUES('d3','swd','ss'); 
1.删除表
--删除表
DROP TABLE flashback_test;
--查看回收站,该表存在回收站中
SELECT * FROM user_recyclebin WHERE original_name='FLASHBACK_TEST';
--执行闪回
FLASHBACK TABLE flashback_test TO BEFORE DROP;
--执行闪回后,该表已不在回收站,在查看该表已经恢复
SELECT * FROM flashback_test;

2.删除表且执行purge操作
--删除表
DROP TABLE flashback_test PURGE;
--查看回收站,发现没有在回收站中
SELECT * FROM user_recyclebin WHERE original_name='FLASHBACK_TEST';

3.清除回收站
PURGE TABLE original_name;--清除回收站中的某个表
PURGE INDEX original_name;--清除回收站中的某个索引
PURGE RECYCLEBIN;--清除自己用户下的回收站信息
PURGE TABLESPACE tablespace_name;--清除指定表空间下所有在回收站的对象
PURGE TABLESPACE tablespace_name USER user_name;--清除指定表空间指定用户下在回收站中的对象(drop user 若加上CASCADE关键字则不进入回收站)
PURGE DBA_RECYCLEBIN; --从所有用户的回收站清除所有对象

注:如果被删除的表不在回收站,则执行flashback drop table时会提示ORA-38305:对象不在回收站中。

不同版本查询介绍
VERSIONS  BETWEEN 能够查看指定时间段内undo表空间中记录的不同版本
1.创建表
CREATE TABLE ff (a VARCHAR2(255),b VARCHAR2(255),c VARCHAR2(255));
2.分别作插入,更新,删除操作
INSERT INTO ff VALUES('d1','s','s');
UPDATE ff SET a='u_d2' WHERE a='d1';
DELETE FROM ff WHERE a='d1';
3.查看 该时间内ff表非操作情况
1)VERSIONS BETWEEN TIMESTAMP minvalue AND MAXVALUE 方式
SELECT versions_starttime,
       versions_endtime,
       versions_xid,
       versions_operation,
       a,
       b,
       c
  FROM ff VERSIONS BETWEEN TIMESTAMP minvalue AND maxvalue
 ORDER BY versions_starttime;
VERSIONS_STARTTIME         VERSIONS_ENDTIME             VERSIONS_XID     VERSIONS_OPERATION       A     B    C
------------------------  ---------------------------- ----------------   ------------------    ----- ----- ----
30-12月-11 01.27.57 下午   30-12月-11 01.28.36 下午    0900000035070000         I                d1     s    s
30-12月-11 01.28.36 下午                               0100140069060000         U                u_d1   s    s

2)VERSIONS BETWEEN TIMESTAMP to_date('2011-12-30 13:22:00', 'yyyy-mm-dd hh24:mi:ss') AND to_date('2011-12-30 13:23:00', 'yyyy-mm-dd hh24:mi:ss')
SELECT versions_starttime,
       versions_endtime,
       versions_xid,
       versions_operation,
       a,
       b,
       c
  FROM ff VERSIONS BETWEEN TIMESTAMP to_date('2011-12-30 13:22:00', 'yyyy-mm-dd hh24:mi:ss') AND to_date('2011-12-30 13:23:00', 'yyyy-mm-dd hh24:mi:ss');

3)VERSIONS BETWEEN SCN 12486407818849 AND 12486407818864
SELECT *FROM flashback_transaction_query WHERE table_name='FF';
SELECT versions_starttime,
       versions_endtime,
       versions_xid,
       versions_operation,
       a,
       b,
       c
  FROM ff VERSIONS BETWEEN SCN 12486407818849 AND 12486407818864;

GRANT SELECT ON flashback_transaction_query TO fyzh_ora;--直接赋予该表的select权限还是无法查询,提示权限不够
GRANT SELECT ANY TRANSACTION TO fyzh_ora;--必须授予ANY TRANSACTION才行

--创建表flashback_test
CREATE TABLE flashback_test (a VARCHAR2(255),b VARCHAR2(255),c VARCHAR2(255));
--插入三条记录
INSERT INTO flashback_test VALUES('d1','s','s');
INSERT INTO flashback_test VALUES('d2','sw','sf');
INSERT INTO flashback_test VALUES('d3','swd','ss');
--执行删除操作
DELETE FROM flashback_test WHERE a='d1';
--通过版本查询xid,在flashback_transaction_query视图中找出flashback_test表对应删除操作的undo_sql,执行该sql即可闪回 

SELECT xid, operation, table_name, undo_sql
  FROM flashback_transaction_query
 WHERE xid IN
       (SELECT versions_xid

FROM flashback_test versions BETWEEN TIMESTAMP minvalue AND maxvalue);

查询结果如下图所示:

SQL> show parameter retention guarantee;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440
undo_retention                       integer     900

1.创建表并插入数据     
CREATE TABLE flashback_test (a VARCHAR2(255),b VARCHAR2(255),c VARCHAR2(255));
INSERT INTO flashback_test VALUES('d1','s','s');
INSERT INTO flashback_test VALUES('d2','sw','sf');
INSERT INTO flashback_test VALUES('d3','swd','ss');
DELETE FROM flashback_test WHERE a= 'd1';
2.FLASHBACK DATABASE 
1)一般用户下执行:
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24);
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24)
ORA-01031: 权限不足
2)采用sys用户执行:
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24); 
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24)
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
3)关闭数据库并装载数据库
C:\Users\thinkpad>sqlplus/nolog
SQL*Plus: Release 11.1.0.7.0 - Production on 星期四 12月 29 16:05:16 2011
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
SQL> conn sys/fyzh@fgisdb as SYSDBA --sys用户登录
已连接。
SQL> SHUTDOWN IMMEDIATE;--关闭数据库
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup MOUNT;--装载数据库,无法识别监听,退出重新以sys登录可解决
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

C:\Users\thinkpad>sqlplus/nolog
SQL*Plus: Release 11.1.0.7.0 - Production on 星期四 12月 29 16:06:19 2011
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
SQL> conn sys/fyzh as SYSDBA --再次登录
已连接到空闲例程。
SQL> startup mount; --装载数据库
ORACLE 例程已经启动。

Total System Global Area  535662592 bytes
Fixed Size                  1348508 bytes
Variable Size             251661412 bytes
Database Buffers          276824064 bytes
Redo Buffers                5828608 bytes
数据库装载完毕。

4)再次执行还是报错
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24);
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 1/24)
ORA-38726: 未启用闪回数据库事件记录。
SQL> flashback database to restore point BEFORE_DROP;
flashback database to restore point BEFORE_DROP 
ORA-38780: 还原点 'BEFORE_DROP' 不存在。

5)开启闪回功能
SQL> alter database flashback on;
alter database flashback on
ORA-38706: 无法启用 FLASHBACK DATABASE 事件记录。
ORA-38707: 尚未启用介质恢复。

6)开启归档和闪回
SQL> alter database archivelog;
Database altered
SQL> alter database flashback on;
Database altered

7)再次执行
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 0.1/24);
FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 0.1/24)
ORA-38729: 执行 FLASHBACK 的闪回数据库日志数据不足。
 
SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE - 0.01/24);
Done

8)开启数据库
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open noresetlogs;
alter database open noresetlogs
*
第 1 行出现错误:
ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

SQL> alter database open resetlogs;
数据库已更改。

9)查看 表还存在,数据2条

注:1.必须具有DBA权限
    2.数据库必须处在装载状态
    3.必须启用介质恢复
    4.必须开启闪回和归档(必须在归档模式下才能开启闪回)
    5.闪回好后,开启数据库要使用 RESETLOGS 或 NORESETLOGS 选项
    6.使用该功能,需要之前就已经开启归档模式和闪回,否则等数据损坏再打开已经来不及了

复原点是手动创建的一个时间点,数据库可以闪回到创建的该复原点。
普通复原点:只是在闪回或恢复操作中为指定以前的SCN或时间点提供方便。但不保证数据库在所有情形下都保留成功执行
            闪回数据库操作所需的闪回数据库日志。
创建普通复原点:CREATE RESTORE POINT test_point;
有保证的复原点:保证可以把数据库倒退到由复原点指定的SCN或时间点.
创建有保证的复原点:CREATE RESTORE POINT test_storepoint GUARANTEE FLASHBACK DATABASE;
删除复原点:DROP RESTORE POINT point_name;
查看复原点:v$restore_point视图

创建复原点注意事项:
1.创建复原点必须打开归档模式
2.创建复原点可以不打开闪回
3.创建复原点若闪回没打开数据库需为装载状态
SQL> CREATE RESTORE POINT test_storepoint GUARANTEE FLASHBACK DATABASE;
CREATE RESTORE POINT test_storepoint GUARANTEE FLASHBACK DATABASE
第 1 行出现错误:
ORA-38784: 无法创建还原点 'TEST_STOREPOINT'。
ORA-38787: 在闪回数据库处于关闭状态时, 创建第一个可靠还原点需要装载模式。
4.创建了复原点后,数据库的闪回由原来的no状态变成了RESTORE POINT ONLY
SQL> CREATE RESTORE POINT test_storepoint GUARANTEE FLASHBACK DATABASE;
还原点已创建。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
RESTORE POINT ONLY

利用复原点闪回数据库:
FLASHBACK DATABASE TO RESTORE POINT test_storepoint;

 
来自:https://www.cnblogs.com/hqbhonker/p/3977200.html
http://www.cnblogs.com/lanzi/archive/2010/12/22/1913769.html

FLASHBACK介绍的更多相关文章

  1. 《转》oracle—flashback

    FLASHBACK介绍 在介绍flashback之前先介绍下undo_retention相关参数 undo_retention:表示undo数据的过期时间.系统默认这个时间设置为900即15分钟.但要 ...

  2. MySQL Flashback 工具介绍

    MySQL Flashback 工具介绍 DML Flashback 独立工具,通过伪装成slave拉取binlog来进行处理 MyFlash 「大众点点评」 binlog2sql 「大众点评(上海) ...

  3. flashback database 基本介绍一

    flashback database 整个架构包括一个进程recover writer (rvwr)后台进程,flashback database log 日志和flash recovery area ...

  4. 【转】FlashBack总结之闪回查询与闪回表

    本文主要介绍利用UNDO表空间的闪回技术,主要包括:闪回表,闪回版本查询,闪回事务查询,闪回查询.这些闪回技术实现从回滚段中读取表中一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错 ...

  5. oracle的回收站介绍

    昨天做的展示oracle表空间功能剩余空间的功能,发现查询表dba_free_space时特别慢,经网上搜索,说是由于表空间碎片和回收站(Oracle 10g以后才有)引起的,后来搜到一片介绍回收站的 ...

  6. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  7. 基于OGG的Oracle与Hadoop集群准实时同步介绍

    版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/220 来源:腾云阁 https://www.qclou ...

  8. flashback data archive (转)

    闪回数据归档(Flashback Data Archive) 在Oracle 11g当中,对闪回技术再次进行了扩展,提供了一个全新的flashback方式,称之为闪回数据归档,本节我们将对闪回数据归档 ...

  9. Oracle asm介绍和安装linux+oracle10g+asm过程

    Oracle asm介绍和安装linux5.2+oracle10g+asm过程   1)ASM(自动存储管理)的来由:   ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出来 ...

随机推荐

  1. appium 【已解决】Android,每次启动手机中都会安装Appium settings和Unclock的方法

    环境介绍: 1.appium版本:1.4.16.1 2.真机运行 实现结果: 运行appium第一次运行则安装Appium settings和Unclock的apk,再次之后的运行则无需手动卸载,再次 ...

  2. 深入理解java虚拟机之垃圾收集器

    Java一个重要的优势就是通过垃圾管理器GC (Garbage Collection)自动管理和回收内存,程序员无需通过调用方法来释放内存.也因此很好多的程序员可能会认为Java程序不会出现内存泄漏的 ...

  3. Nginx 配置 Https 免费证书访问

    配置HTTPS 现在做博客或者做网站没有 https 已经不行了,就记录一下我在腾讯云配置 https 的过程吧,非常简单,1个小时就可以了. 还涉及到 http 访问自动转发到 https 访问路径 ...

  4. Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  5. Typora程序员的记事本.Typora常用快捷操作

    Typora常用快捷操作 1.文本格式快捷编写 1.1.文本段落编写 a)#→宫格建→加输入内容→回车键,其中#表示标题一,##表示标题二以此类推至######为止 b)或者选中要修改文本的文本格式按 ...

  6. Axios发送AJAX请求

    目录 Axios 特征 axios提供主要三种发起请求的方式 方式一:直接axios实例直接call方式 方式二:通过axios实例提供的不同http请求方式的方法 方式三:其实是从第二种方式中单独提 ...

  7. WordPress怎样设置菜单栏旋转小图标

    最近我在浏览别的博客的文章时,无意间发现了一个很好看的小装饰.那就是在WordPress菜单栏上的小图标.于是我研究了研究,弄到了设置方法之后决定把它分享出来. 菜单栏的小图标 设置步骤: 1, 我们 ...

  8. RFI to RCE challenge

    http://www.zixem.altervista.org/RCE/level1.php 构造payload: https://zixem.altervista.org/RCE/level1.ph ...

  9. frp内网 穿透映射使内网svn可外网访问

    起因 公司svn目前部署在内网服务器上,现在想在家中也可以使用,因此需要外网访问内网的工具 经过 使用过几个产品: utools,一个小巧的windows下的工具,内网映射只是它的一个小功能,支持tc ...

  10. SQL内模糊查询语句拼接时单引号'问题

    下面以存储过程查询所有为例,非存储过程(或不是查询所有将*替换为你想要查询的列即可)更为简单, 语法:select * from 表名 where 列名like'%条件%' 拼接后的set @变量名 ...