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. 《JavaScript-The Definitive Guide》读书笔记:字符串常用方法

    concat() 连接多个字符串,返回合并后的字符串. var s1="a"; var s2="b"; var s3="c"; consol ...

  2. Java基础之理解Annotation

    一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关 ...

  3. keybd_event 被 SendInput 替代

    keybd_event   函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数.在 ...

  4. mybatis传入List实现批量更新的坑

    原文:http://www.cnblogs.com/zzlback/p/9342329.html 今天用mybatis实现批量更新,一直报错,说我的sql语句不对,然后我还到mysql下面试了,明明没 ...

  5. How can I add a site title refiner

    一篇非常好的博客,收藏一下 https://sharepoint.stackexchange.com/questions/109409/how-can-i-add-a-site-title-refin ...

  6. AutoRegister ASM AOP 字节码 案例 原理 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. Ext4 ReiserFS Btrfs 等7种文件系统性能比拼

    2009年02月04日     为了满足广大群众的热切需求,今天做了 Ext2.Ext3.Ext4.XFS.JFS.ReiserFS 和 Btrfs 的全面性能测试,对比结果如下:     本次测试所 ...

  8. 【Linux】ps命令

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  9. 如何给Elasticsearch安装中文分词器IK

    安装Elasticsearch安装中文分词器IK的步骤: 1. 停止elasticsearch 2.2的服务 2. 在以下地址下载对应的elasticsearch-analysis-ik插件安装包(版 ...

  10. Atitit 医学之道 attilax总结

    Atitit 医学之道 attilax总结 1. 相关的学科3 1.1. 口腔医学  ok3 1.2. 人体解剖学  ok3 1.3. 生理学  ok3 1.4. 病理学  ok3 1.5. 骨伤科学 ...