FLASHBACK介绍

在介绍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 介绍

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视图中,且也不能执行闪回

三、FLASHBACK DROP TABLE 介绍  

创建表并插入数据     
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:对象不在回收站中。

四、FLASHBACK VERSIONS BETWEEN 介绍  

不同版本查询介绍
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;

五、FLASHBACK _TRANSACTION_QUERY事务查询 介绍 

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

六、FLASHBACK DATABASE介绍

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

原文地址:https://www.cnblogs.com/luck666/p/10475315.html

时间: 2024-07-31 22:17:39

FLASHBACK介绍的相关文章

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

Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段.近期有场景需要做Oracle到Hadoop体系的实时导入,这里以此案例做以介绍.Oracle作为商业化的数据库解决方案,自发性的获取数据库事务日志等比较困难,故选择官方提供的同步工具OGG(Oracle GoldenGate)来解决. 安装与基本配置 环境说明 软件配置 角色 数据存储服务及版本 OGG版本 IP 源服务器 OracleRelease11.2.0.1 Oracle GoldenGate 11.2

Flashback家族二

三.Flashback Query 正如前言中所提,Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据! 什么是多版本读一致性 Oracle 采用了一种非常优秀的设计,通过undo 数据来确保写不堵塞读,简单的讲,不同的事务在写数据时,会将数据的前映像写入undo 表空间,这样如果同时有其它事务查询该表数据,则可以通过undo 表空间中数据的前映像来构造所需的完整记录集,而不需要等待写入的事务提交或回滚. flashback query 有多种方式构

Oracle purge 用法介绍

1.用途: 清除oracle 回收站(recyclebin)中的表和索引并释放与其相关的空间,还可清空回收站,或者清除表空间中记录的已删除的部分表空间. 注意:purge后不能回滚和恢复. 2.语法: 3.示例说明: 1)首先查一下回收站: SELECT * FROM RECYCLEBIN; 2)创建并删除同一表三次: --版本1 CREATE TABLE recycle_tmp(version NUMBER(10)); INSERT INTO recycle_tmp VALUES(1); CO

Oracle Flashback技术总结

Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数.要使用flashback 的特性,必须启用自动撤销管理表空间. 在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和F

Oracle Flashback闪回恢复管理_超越OCP精通Oracle视频课程培训20

oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习oracle数据库关于Flashback概念,Flashback参数设置与归档模式,Flashback恢复案例-Flashback database,Flashback DROP,Flashback Query,Flashback version Query,Flashback Transaction Query,Flashback Table,Flashback Data Archive等常用技术. 适用人群 IT

ORACLE回收站机制介绍及管理

ORACLE回收站机制介绍 从ORACLE 10g开始,引入了一个叫回收站(RecycleBin)的概念.它的全称叫Tablespace Recycle Bin.回收站实际是一个逻辑容器(逻辑区域),原理有点类似于WINDOW系统的回收站.它以表空间中现有已经分配的空间为基础,而不是从表空间上物理划出一个固定区域用作回收站.这意味着回收站和表空间中的对象共用存储区域.系统没有给回收站预留空间.因此,当表被DROP后,如果可用空间充足,并且没有对回收站进行清理,那么被DROP掉的对象会一直存在回收

深入oracle 12c数据库备份与恢复(优化RMAN性能、Oracle flashback技术)

课程讲师:小流老师 课程分类:Oracle 适合人群:高级 课时数量:15课时 更新程度:完成 服务类型:C类(普通服务类课程) 用到技术:oracle 涉及项目:oracle 12c数据库备份与恢复 需要更多相关资料可以联系 Q2748165793 课程提纲 第一讲:介绍备份和恢复相关操作 备份和恢复的目标 备份和恢复的解决方案 Oracle flashback技术 第二讲:开始RMAN操作和RMAN体系架构 RMAN的环境 RMAN Channels RMAN Repository RMAN

Oracle Flashback(flashback table或drop)

在Oracle 10g中,Flash back家族分为以下成员:Flashback DatabaseFlashback DropFlashback TableFlashback Query(分Flashback Query,Flashback Version Query,Flashback Transaction Query)下面介绍一下Flashback Drop 和Flashback Table 一 Flashback设置 1.打开flashback: 关闭数据库 启动到mount方式 SQ

【DG】利用闪回数据库(flashback)修复Failover后的DG环境

利用闪回数据库(flashback)修复Failover后的DG环境 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Failover后DG环境的恢复方法(重点) ② DG的基本维护操作 ③ GC客户端软件的安装 ④ 利用GC快速搭建一套DG环境 ⑤ Failover和Switchover的区别 ⑥ 其它维护操作 1.3  本文简介 10月23和24日考