`

Flashback Database --闪回数据库

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

Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志。 比RMAN更快速和高效。 因此Flashback Database 可以看作是不完全恢复的替代技术。 但它也有某些限制:

1. Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择
2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来, 然后利用Flashback Database 执行剩下的Flashback Datbase。
3. 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
4. 使用Flashback Database锁能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN。


Flashback Database 架构

Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志 和Flash Recovery Area。一旦数据库启用了Flashback Database, 则RVWR进程会启动,该进程会向Flash Recovery Area中写入Flashback Database Log, 这些日志包括的是数据块的 " 前镜像(before image)", 这也是Flashback Database 技术不完全恢复块的原因。

[oracle@dba ~]$ ps -ef|grep rvw
oracle   12620 12589  0 13:21 pts/1    00:00:00 grep rvw


启用Flashback Database
数据库的Flashback Database功能缺省是关闭的,要想启用这个功能,就需要做如下配置。
1. 配置Flash Recovery Area
  要想使用Flashback Database, 必须使用Flash Recovery Area,因为Flashback Database Log只能保存在这里。 要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RAC,flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式.


启用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH;
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/DBA/FB' SCOPE=BOTH;

禁用Flash Recovery Area:
SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ;


对于Flash Recovery Area,Oracle 是这样建议的,flash recovery area 设置的越大,flashback database 的恢复能力就越强,因此建议flash recovery area 能够放的下所有的数据文件,增量备份,以及所有尚未备份的归档文件,当然还有它自己产生的flashback logs。
在数据库运行过程中,oracle 自动向该区域写入文件,当剩余空间不足15%的时候,它就会在alert 中增加警告,提示你空间不足。但此时不会影响数据库的正常运转,直到所有空间统统被用掉之后,oracle 首先尝试删除寻些过期的文件,冗余文件或备份过的文件,如果这些做完了,还是没有空闲空间的话,数据库就被hang 住了。

对于因Flash Recovery Area导致的数据库hang的处理,请参考:
http://blog.csdn.net/tianlesoftware/archive/2009/10/14/4668991.aspx
或者
http://user.qzone.qq.com/251097186/blog/1244650673


2. 启用数据库Flashback 功能

1). 数据库启动到mount状态
SQL> startup mount;
2). 检查Flashback 功能, 缺省时功能是关闭的。
SQL> select name, current_scn, flashback_on from v$database;
NAME    CURRENT_SCN  FLASHBACK_ON
--------    -----------          ------------------
DBA      945715          NO
 
3). 启动Flashback功能
SQL>  alter database flashback on;
数据库已更改。

SQL>  select name, current_scn, flashback_on from v$database;
NAME      CURRENT_SCN FLASHBACK_ON
--------- ----------- ------------------
DBA                 0 YES

4). 设置初始化参数:DB_FLASHBACK_RETENTION_TARGET:

SQL>alter system set db_flashback_retention_target=1440 scope=both;

该参数用来控制flashback log 数据保留的时间,或者说,你希望flashback database 能够恢复的最早的时间点。默认值是1440,单位是minute,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%。

5). 启动数据库
SQL>alter database open;




Flashback Database操作示例

做操作前先备份数据库
RMAN> backup database;

1. 检查是否启动了flash recovery area:­
SQL> show parameter db_recovery_file
NAME                    TYPE        VALUE
------------------------------------  ----------- ------------------------------
db_recovery_file_dest       tring       D:\oracle/flash_recovery_area
db_recovery_file_dest_size  big integer 1G

2. 检查是否启用了归档­
SQL> archive log list;
数据库日志模式      存档模式
自动存档            启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列  9
下一个存档日志序列  11
当前日志序列        11

3. 检查是否启用了flashback database 
SQL> select flashback_on from v$database;
FLASHBACK_ON     
------------------ 
YES               

4. 查询当前的scn­
SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
947921

5. 查询当前的时间
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;

TIME
-----------------
09-10-14 14:37:05

6. 删除表A
SQL> select * from A;

ID  NAME
---------- ----------
1  tianle
2  dave

SQL> drop table A;
表已删除。
SQL> commit;

7. Flashback Database 实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  209715200 bytes
Fixed Size                  1248116 bytes
Variable Size              79692940 bytes
Database Buffers          121634816 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。

8. 执行恢复:分timestamp 或者SCN两种

SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd
hh24:mi:ss');
闪回完成。

或者:
SQL> Flashback database to scn 947921;
闪回完成。

9. 打开数据库:
在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库:
1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。
2). 先执行alter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。

这里演示,就以resetlogs方式打开:
SQL> alter database open resetlogs;
数据库已更改。

验证数据:
SQL> select * from A;

        ID NAME
---------- ----------
         1 tianle
         2 dave






和Flashback Database 相关的2个视图:
1. V$database
这个视图可以查看是否启用了Flashback database功能
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES

2. V$flashback_database_log
Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少, 该视图就可以查看许多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复到最早的时点
Flashback_size: 记录了当前使用的Flash Recovery Area 空间的大小
Retention_target: 系统定义的策略
Estimated_flashback_size: 根据策略对需要的空间大小的估计值
SQL> select oldest_flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh2
4:mi:ss') ot, retention_target rt,flashback_size fs, estimated_flashback_size es
from v$flashback_database_log;

OS       OT             RT      FS        ES
----------  -----------------     ----------  ----------    ----------
946088  09-10-14 13:49:59  1440     16384000  350920704

3. V$flashback_database_stat
这个视图用来对Flashback log 空间情况进行更细粒度的记录和估计。 这个视图以小时为单位记录单位时间内数据库的活动量,Flashback_Data 代表Flashback log产生数量,DB_Date 代表数据改变数量,Redo_Date代表日志数量,通过这3个数量可以反映出数据的活动特点,更准确的预计Flash Recovery Area的空间需求

SQL> alter session set nls_date_format='hh24:mi:ss';

会话已更改。

SQL> select *from v$flashback_database_stat;

BEGIN_TI END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
-------- -------- -------------- ---------- ---------- ------------------------
14:43:10 15:15:28        6455296   29310976    3898368              0
分享到:
评论

相关推荐

    闪回数据库(Flashback Database)

    Flashback Database闪回数据库  使用闪回数据库可以将数据库快速的闪回到过去某个时间点。在启用闪回数据时,会将修改过的块的前映像作为闪回数据库日志保存在闪回恢复区中,如出现逻辑坏块或用户错误操作需要恢复...

    ORACLE flashback database测试

    ORACLE flashback database测试,主要进行ORACLE flashbackup 闪回整个数据库的实现。

    oracle中FLASHBACK

    FLASHBACK DATABASE flashback data1base闪回到过去的某一时刻 闪回点之后的所有工作都将丢失 必须使用resetlogs创建新的场景并打开数据库(一旦resetlogs之后,将不能再闪回至resetlogs之前的时间点) .......

    oracle 12c 数据库 教程

    (八)闪回数据库:Flashback Database 94 (九)闪回删除:Flashback Drop 95 (十)闪回事务查询:Flashback Transaction Query 96 (十一)闪回数据归档:Flashback Data Archive 98 三、用户管理的备份 101 (一...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

     ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职于BPLC Management Consultants,负责公司欧洲...

    Oracle 12c-备份恢复学习实践手册合集

    Oracle 12c 闪回技术 Flashback Database.pdf Oracle 12c 闪回技术 Oracle Flashback技术.pdf Oracle 12c 管理UNDO.pdf Oracle 12c 数据库备份和恢复概述.pdf Oracle 12c 用户管理的备份和恢复.pdf Oracle 12c SCN...

    Oracle对于误删误操作的数据进行恢复(flashback query、flashback drop、flashback table、flashback database)

    日常工作中难免遇到自己或者别人误操作、删除、修改了数据库的数据。此时我们该如何恢复数据呢。   1、我们可以应用Flashback Query查询过去的数据 Flashback Query这一特性,最常被应用的就是修复误操作的数据了。...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

     ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职于BPLC Management Consultants,负责公司欧洲...

    数据库原理及应用A实验报告(实验四——数据库恢复与安全性)

    了解flashback 的使用 学会使用PLSQL/developer工具完成导入导出 掌握ORACLE中有关用户创建的方法 熟练掌握PL-SQL的数据控制语言,能通过自主存取控制进行权限管理 熟悉用户资源文件的使用 熟悉ORACLE中...

    基于Oracle闪回详解(必看篇)

    Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回...闪回DATABASE 闪回日志、undo 是 DROP 删除表 闪回DROP 回收站(recyclebin) 是 表 更新、删除、插入记录 闪回TABLE 还原数据,undo 是 查询 当前数据和历

    Oracle.Database.11g.DBA手册.完整中文 (97M) part1/2

    基本信息 出版社: 清华大学出版社; 第1版 (2009年1月1日) 平装: 594页 语种: 简体中文 开本: 16 ... 使用最新的Oracle Database 11g工具——Oracle Total Recall和Oracle Flashback Data Archive等。

    FLAHBACK详解

    FLAHBACK举例和使用说明,比较详细,重点介绍了3中方法恢复数据库:1.Flashback database ;2.flashback table;3.flashback drop。 本人也误操作drop了oracle中的一张表,找了半天找到这个方法文档恢复成功了表和...

    Oracle.Database.11g.DBA手册.完整中文 (97M) part2/2

    基本信息 出版社: 清华大学出版社; 第1版 (2009年1月1日) 平装: 594页 语种: 简体中文 开本: 16 ... 使用最新的Oracle Database 11g工具——Oracle Total Recall和Oracle Flashback Data Archive等。

    Mysql误删数据解决方案及kill语句原理

    使用flashback工具闪回,把数据恢复回来。原理是修改binlog的内容,拿回原库重放,需要确保binlog_format=row和binlog_row_imsge=Full 具体恢复时 如果是insert,将binlog event类型是write_rows event改为delete...

    [手工整理]208个Oracle安装文档,包含各个平台各个版本的单实例RAC以及DataGuard(1).xlsx

    81 Master Note For Oracle Flashback Technologies (文档 ID 1138253.1) 82 NetBackup_Troubleshoot_Guide 83 OceanStorF面向Oracle数据库OLAP最佳实践 84 OEM Cloud Control 13.3 Installation on Oracle ...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

     第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏块  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid...

    oracle truncate恢复工具

    用户truncate误删 schema下的若干数据表,无法使用flashback query等技术恢复数据,尝试从之前的全备份中恢复,数据库restore速度较快,但是archivelog恢复时由于HP data Protecter的不明原因导致归档恢复十分缓慢,...

    大话OracleRAC集群高可用性备份与恢复

    第二部分是实践篇,每一章都针对RAC的一个知识点展开讲解,包括Oracle Clusterware的维护、HA与LB、备份、恢复、Flashback家族、RAC和Data Guard的结合使用、RAC和Stream的结合使用,最后对ASM进行深入介绍,并给出...

Global site tag (gtag.js) - Google Analytics