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. axios 取消请求的方法

    开发中遇到需要取消请求的功能,,点击终止查询可以取消开始查询请求,再次点击开始查询又可以进行查询. 解决方法:axios官方文档上的CancelToken,一开始用了这个api后,可以成功取消请求,但 ...

  2. android http中请求访问添加 cookie

    第一种HashMap<String, String> map = new HashMap<String, String>();map.put("cookie" ...

  3. Google+ 团队的 Android UI 测试

    https://github.com/bboyfeiyu/android-tech-frontier/tree/master/android-blog/Google%2B%20%E5%9B%A2%E9 ...

  4. Android 热修复方案Tinker(一) Application改造

    基于Tinker V1.7.5 Android 热修复方案Tinker(一) Application改造    Android 热修复方案Tinker(二) 补丁加载流程    Android 热修复 ...

  5. 用 Prettier 统一团队的代码风格~

    使用 prettier 自動調整 JavaScript 樣式 GFM 格式说明 为什么你不能缺少Linter(以及代码美化工具) 使用 prettier 自動調整 JavaScript 樣式 Reac ...

  6. SpringMVC项目配置欢迎页面为index.html

    一.问题 在web.xml中添加如下配置无效 <welcome-file-list> <welcome-file>index.html</welcome-file> ...

  7. 如何用 async 控制流程

    来自: http://larry850806.github.io/2016/05/31/async/ [Javascript] 如何用 async 控制流程 (一) 31 May 2016 async ...

  8. 使用Guava的ComparisonChain实现自定义的排序

    可以看到使用比较器前,先要写一个实体类,还要实现comparable接口,实现compareTo方法.这个方法一般会返回-1 0 1三个int类型数字,分别表示,对象和传入的对象比较,排序应该在传入的 ...

  9. Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate

    (1)将Maven项目先clean,接着install下 (2)运行mvn mybatis-generator:generate命令 注意修改generatorConfig.xml的location: ...

  10. xcode 编译或者打包的时候 找不到图片的错误

    进入app路径,copy一份图片进去就好了