Oracle 闪回 (flashback)是9i版本提供的新特性。这一特性;其他数据库(PostgreSQL,Mysql)是羡慕不已。对数据恢复提供非常便捷的方式。闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误。
  从闪回的方式可以分为:

    • FLASHBACK DATABASE 数据库级别闪回
    • FLASHBACK TABLE 表级别闪回
    • FLASHBACK QUERY 事务级别闪回

一. 启动 Oracle 闪回

  Oracle 闪回特性在 Oracle 数据库安装界面有配置打开 Oracle 闪回;若当时没配置;可以按照下列方法进行配置:

1.1 要求数据库必须处于归档模式

  查看数据库的归档模式及闪回是否启用;

SQL> select log_mode,open_mode,flashback_on from v$database;

LOG_MODE     OPEN_MODE    FLASHBACK_ON
------------ -------------------- ------------------
ARCHIVELOG READ WRITE NO

1.2 设置闪回目录、闪回目录空间大小

  由 db_recovery_file_dest 和 db_recovery_file_dest_size 决定闪回目录和闪回目录的空间大小;用于来存放闪回日志。

SQL> alter system set db_recovery_file_dest_size=1G;

System altered.

SQL> alter system set db_recovery_file_dest = '/data/flash_dir';

System altered.

SQL> show parameter db_recovery;

NAME         TYPE  VALUE
------------------------------------ ----------- ----------------
db_recovery_file_dest string /data/flash_dir
db_recovery_file_dest_size big integer 1G

1.3 设置闪回保留目标生存期

  默认是保留目标生存期是1天;

SQL> show parameter db_flashback;

NAME         TYPE  VALUE
------------------------------------ ----------- ---------------------
db_flashback_retention_target integer 1440

1.4 启动闪回特性

  需要将 Oracle 数据库启动到 mount 状态;

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started. Total System Global Area 780824576 bytes
Fixed Size 2257312 bytes
Variable Size 511708768 bytes
Database Buffers 264241152 bytes
Redo Buffers 2617344 bytes
Database mounted.
SQL> alter database flashback on; Database altered. SQL> alter database open; Database altered.

  当启用 flashback database,则 sga 中会开辟一块新区域作为闪回缓冲区,大小由系统分配。启用新的 rvwr进程:rvwr进程将闪回缓冲区的内容写入到闪回日志中,注意闪回日志不同于联机重做日志,闪回日志在联机重做日志基础之上生成,是完整数据块映像的日志。联机日志则是变化的日志。闪回日志不能复用,也不能归档。闪回日志使用循环写方式。

二. 数据库级别闪回 (flashback database)

  数据库级别闪回:flashback database闪回到过去的某一时刻。类似于PITR。恢复方式比较简单。但是只能恢复时间点在闪回区的目标生存期;且恢复数据库中出现的认为误操作等逻辑错误。想误删数据文件这种是恢复不了的。
  闪回步骤:

  1. 关闭数据库
  2. 启动数据库到mount状态
  3. 闪回至某个时间点,SCN或log sequence number
  4. 使用resetlogs打开数据库

闪回方法:

-- 基于时间点;常用该方式
flashback database to timestamp to_timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss');
-- 基于scn
flashback database to scn 918987;
-- 基于恢复点
flashback database ro restore point b1_load;

2.1 闪回数据库演示:

SQL> conn lottu/li0924
Connected.
-- 创建实验对象表tbl_flash_01
SQL> create table tbl_flash_01 (id number,name varchar2(20));
Table created. SQL> insert into tbl_flash_01 values (1001,'lottu');
1 row created.
SQL> commit;
Commit complete. --记录误操作时间之前的时刻。
SQL> select to_char(sysdate,'yyyymmddhh24miss') from dual;
TO_CHAR(SYSDAT
--------------
20180814224948 -- truncate表tbl_flash_01
SQL> truncate table tbl_flash_01;
Table truncated. --误操作之后的日志
SQL> insert into tbl_flash_01 values (1002,'rax');
1 row created.
SQL> commit;
Commit complete. -- 执行闪回操作
--1. 关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down. --2. 启动数据到mount状态
SQL> startup mount;
ORACLE instance started. Total System Global Area 780824576 bytes
Fixed Size 2257312 bytes
Variable Size 511708768 bytes
Database Buffers 264241152 bytes
Redo Buffers 2617344 bytes
Database mounted. --3. 执行闪回操作
SQL> flashback database to timestamp to_timestamp('','yyyymmddhh24miss'); Flashback complete. SQL> alter database open resetlogs; Database altered. SQL> conn lottu/li0924
Connected.
SQL> select * from tbl_flash_01; ID NAME
---------- --------------------
1001 lottu

  数据恢复到闪回的时间点之前。但是闪回时间之后的操作没法进行恢复。针对这种情况;可以先在备库执行闪回恢复;再逻辑导出到主库进行恢复。

三. 表级别闪回 ( flashback table )

  在 Oracle 中;对 drop table 操作有中闪回保护;即表级别闪回。drop table命令并不真正删除表,在内部被映射为rename命令,即是将其重命名之后放入回收站。需要恢复;就从回收站回收即可。
  语法: flashback table tablename to before drop;

3.1 闪回表演示:

-- 1. 演示drop table后;闪回恢复表
SQL> conn lottu/li0924
Connected.
SQL> drop table tbl_flash_01; Table dropped. SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- --------------------------- ------------ ---------
TBL_FLASH_01 BIN$c2hFCisICOXgU+oBqMCsVQ==$0 TABLE 2018-08-14:23:57:40 SQL> flashback table tbl_flash_01 to before drop; Flashback complete. SQL> select * from tbl_flash_01; ID NAME
---------- --------------------
1001 lottu
-- 2. 演示purge之后;是不能进行闪回。
SQL> drop table tbl_flash_01 purge; Table dropped. SQL> flashback table tbl_flash_01 to before drop;
flashback table tbl_flash_01 to before drop
*
ERROR at line 1:
ORA-38305: object not in RECYCLE BIN -- 3. 演示闪回对象名已经存在;又该如何恢复
SQL> drop table tbl_flash_01; Table dropped. SQL> create table tbl_flash_01 (id number,name varchar2(20)); Table created. SQL> flashback table tbl_flash_01 to before drop;
flashback table tbl_flash_01 to before drop
*
ERROR at line 1:
ORA-38312: original name is used by an existing object SQL> flashback table tbl_flash_01 to before drop rename to tbl_flash_02; Flashback complete. -- 4. 若回收站中存在两个相同的原表名,则闪回时总是闪回最近的版本,如果闪回特定的表,需要指定该表在回收站中的名称
SQL> create table tbl_flash_01 (id number,name varchar2(20)); Table created. SQL> drop table tbl_flash_01; Table dropped. SQL> create table tbl_flash_01 (id number,name varchar2(20),reg_time date); Table created. SQL> drop table tbl_flash_01; Table dropped. SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ ---------
TBL_FLASH_01 BIN$c2hFCisLCOXgU+oBqMCsVQ==$0 TABLE 2018-08-15:00:47:38
TBL_FLASH_01 BIN$c2hFCisKCOXgU+oBqMCsVQ==$0 TABLE 2018-08-15:00:24:22 -- 选择恢复最先删除的。
SQL> flashback table "BIN$c2hFCisKCOXgU+oBqMCsVQ==$0" to before drop; Flashback complete. SQL> desc tbl_flash_01 ;
Name Null? Type
-------------- -------- ------------------
ID NUMBER
NAME VARCHAR2(20)

四.事务级别闪回 ( flashback query )

  用户在执行dml操作;可以通过 flashback query 查询到指定时间点表中的记录。其本身不带有恢复性的操作。至于恢复吗;可以通过insert into table即可。

-- 查询表tab_flash_02 5分钟之前的数据
select * from tab_flash_02 as of timestamp sysdate - 5/1440;
-- 查询表tab_flash_02 某个时间点的记录
select * from tab_flash_02 as of timestamp to_timestamp('2018-08-13 17:26:08','yyyy-mm-dd hh24:mi:ss');

6. Oracle闪回特性的更多相关文章

  1. Oracle 闪回特性(FLASHBACK DATABASE)

    --===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...

  2. Oracle 闪回

    Oracle 闪回特性(FLASHBACK DATABASE) 本文来源于:gerainly 的<Oracle 闪回特性(FLASHBACK DATABASE) > -========== ...

  3. Oracle的闪回特性之恢复truncate删除表的数据

    Oracle的闪回特性之恢复truncate删除表的数据 SQL> show parameter flashback NAME                                 T ...

  4. oracle 闪回功能详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  5. ORACLE闪回机制分析与研究应用

    1.查看数据库归档和闪回状态,及环境准备SQL> archive log list;SQL> select flashback_on from v$database;关闭数据库,启动归档和 ...

  6. Oracle 闪回归档(Flashback Database)

    cmd --管理员身份打开 sqlplus / as sysdba --管理数据库 shu immediate; --独占方式开始 startup mount --修改日期模式 alter datab ...

  7. Oracle闪回flashback

    参考资料:Using Oracle Flashback Technology Oracle 11g的新特性闪回操作 闪回查询 闪回查询 闪回版本查询 闪回事务查询 闪回数据 闪回表 闪回删除 闪回数据 ...

  8. Oracle闪回操作

    Oracle闪回操作 1. 记录当前时间或SCN 在数据库变动前记录时间或SCN SQL> select  to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') fr ...

  9. Oracle闪回表

    Oracle闪回技术 场景:测试环境数据库的表数据被误删除. 解决思路:使用闪回表技术 原理 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小 ...

随机推荐

  1. springboot中velocity tool中注入bean

    在使用springboo的时候,遇到一个问题,想在tool类中注入一个bean,一直失败,翻了下源码,是因为工具类的初始化方法为反射class调用newInstance方法,详见 http://www ...

  2. Java之String、StringBuilder、StringBuffer的区别

    String : 字符串常量,它们的值在创建之后不能更改.代表字符串,Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. String的值是不可变的,这就 ...

  3. 20个有用的linux命令行技巧

    20 Unix Command Line Tricks – Part I http://www.cyberciti.biz/open-source/command-line-hacks/20-unix ...

  4. windows 启动关闭Oracle监听和服务

    经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点.    1.开启:     在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后 net start O ...

  5. 01-复杂度1 最大子列和问题(剑指offer和PAT)

    01-复杂度1 最大子列和问题   (20分) 给定KK个整数组成的序列{ N​1​​, N​2​​, ..., N​K​​ },“连续子列”被定义为{ N​i​​, N​i+1​​, ..., N​ ...

  6. Idea调试

    Idea调试 学习了:https://www.jb51.net/article/128965.htm 1,多线程同时断点: 2,drop frame 回退调试: 3,条件断点/片段代码: 4,调试的时 ...

  7. 【T02】理解子网和CIDR的概念

    1.IP地址分为5类,A.B.C.D.E,它们的前缀分别是: A:0 网络个数2^7,主机个数2^24,大概1千6百万 B:10 网络个数2^14,大概1万6千,主机个数2^16,大概6万5千 C:1 ...

  8. AWK常用技巧

    1.1 介绍 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...

  9. 关于Python ,requests的小技巧

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xie_0723/article/details/52790786 关于 Python Request ...

  10. epoll源码分析

    epoll源码分析 最近在使用libev过程中遇到一个场景:一个fd从一个ev_loop迁移到另一个ev_loop,会出现这个fd同时存在两个epoll的瞬间.不禁要问了,一个fd同时被两个epoll ...