--=====================================

-- Oracle 闪回特性(FLASHBACK DATABASE)

--=====================================

闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回、表级别闪回、事务

级别闪回,根据闪回对数据的影响程度又可以分为闪回恢复,闪回查询。闪回恢复将修改数据,闪回点之后的数据将全部丢失。而闪回查询则可

以查询数据被DML的不同版本,也可以在此基础之上确定是否进行恢复等。本文主要描述flashback database的使用。

一、flashback database特性

flashback data1base闪回到过去的某一时刻

闪回点之后的工作全部丢失

使用resetlogs创建新的场景并打开数据库(一旦resetlogs之后,将不能再flashback至resetlogs之前的时间点)

常用的场景:truncate table、多表发生意外错误等

使用闪回日志来实现数据库闪回,闪回点之后的数据将丢失

二、flashback database的组成

闪回缓冲区:当启用flashback database,则sga中会开辟一块新区域作为闪回缓冲区,大小由系统分配

启用新的rvwr进程:rvwr进程将闪回缓冲区的内容写入到闪回日志中,注意闪回日志不同于联机重做日志,闪回日志在联机重做日志基础之

上生成,是完整数据块映像的日志。联机日志则是变化的日志。闪回日志不能复用,也不能归档。闪回日志使用循环写方式。

三、flashback database的配置

flashback database要求数据库必须处于归档模式,且闪回之后必须使用resetlogs打开数据库

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

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

LOG_MODE     OPEN_MODE  FLASHBACK_ON

------------ ---------- ------------------

ARCHIVELOG   READ WRITE NO             --FLASHBACK_ON为NO,则表示闪回特性尚未启用

b.查看及设置闪回目录、闪回目录空间大小等

--下面查看恢复目录及恢复目路分配的大小

--可以使用alter system set db_recovery_file_dest 来设置新路径

--可以使用alter system set db_recovery_file_dest_size来设定新的大小

SQL> show parameter db_recovery

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      /u01/app/oracle/flash_recovery

_area

db_recovery_file_dest_size           big integer 2G

c.设置闪回保留目标生存期

SQL> show parameter db_flashback      --缺省为分钟,即小时

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_flashback_retention_target        integer     1440

SQL> alter system set db_flashback_retention_target=30; --设定保留时间为半小时

d.在mount状态下来启用flashback,如在open状态下则出现下列错误提示

SQL> alter database flashback on;

alter database flashback on

*

ERROR at line 1:

ORA-38759: Database must be mounted by only one instance and not open.

--一致性关闭数据库后,在mount状态下设置flashback

SQL>startup mount exclusive;

SQL> select status from v$instance;

STATUS

------------

MOUNTED

SQL> alter database flashback on;     --开启闪回数据库功能

SQL> ho ps -ef | grep rvw             --可以看到新增了后台进程rvwr

oracle    3563     1  0 12:12 ?        00:00:00 ora_rvwr_orcl

--下面查看闪回区分配的大小为大约M,闪回分钟以内的数据则需要M左右的空间

--注意列oldest_flashback_time说明了允许返回的最早的时间点

SQL> select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim,

2  retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,

3  estimated_flashback_size/1024/1024 est_flhbck_size

4  from v$flashback_database_log;

OLD_FLHBCK_SCN OLD_FLHBC  RETE_TRGT FLHBCK_SIZ EST_FLHBCK_SIZE

-------------- --------- ---------- ---------- ---------------

915137 24-OCT-10         30     7.8125      11.2519531

SQL> select * from v$flashback_database_stat;   --查看闪回

BEGIN_TIM END_TIME  FLASHBACK_DATA    DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE

--------- --------- -------------- ---------- ---------- ------------------------

24-OCT-10 24-OCT-10        7905280   86802432   96329728                        0

SQL> select * from v$sgastat where name like 'flashback%';       --查看sga中分配的闪回空间大小

POOL         NAME                            BYTES

------------ -------------------------- ----------

shared pool  flashback generation buff     3981204

shared pool  flashback_marker_cache_si        9196

SQL> ho ls -hlt $ORACLE_BASE/flash_recovery_area/ORCL/flashback  --查看生成的闪回日志

total 7.9M

-rw-r----- 1 oracle oinstall 7.9M Oct 24 12:37 o1_mf_6d7dkogw_.flb

四、使用flashback database闪回数据库

步骤(前提归档日志可用)

关闭数据库

启动数据库到mount状态(exclusive模式)

闪回至某个时间点,SCN或log sequence number

使用resetlogs打开数据库

1.使用sqlplus实现闪回

可以接受一个时间标记或一个系统改变号实参

sqlplus几种常用的闪回数据库方法

FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] SCN <system_change_number>   --基于SCN闪回

FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] TIMESTMP <system_timestamp_value>--基于时间戳闪回

FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] RESTORE POINT <restore_point_name>--基于时点闪回

如下面的示例:

SQL> flashback database to timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss');

SQL> flashback database to scn 918987;

SQL> flashback database ro restore point b1_load;

a.基于时间戳闪回

SQL> select count(1) from usr1.tb1;   --查询用户usr1下表tb1中的记录数

COUNT(1)

----------

404944

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;  --获得系统当前的时间

TM

-------------------

2010-10-24 13:04:30

SQL> drop user usr1 cascade;     --删除帐户usr1,同时帐户usr1下的所有对象将被删除

SQL> conn scott/tiger;           --使用scott 帐户登陆

SQL> create table tb_emp as select * from emp;  --新创建表tb_emp

SQL> shutdown immediate;        --关系系统

SQL> startup mount ;             --重新到mount状态

SQL> flashback database to timestamp  --实施闪回

2  to_timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss') ;

SQL> alter database open resetlogs;

SQL> select count(1) from usr1.tb1;    --帐户usr1及其对象tb1被成功闪回

COUNT(1)

----------

404944

SQL> select count(1) from scott.tb_emp;   --闪回成功后,在闪回点之后修改的数据全部丢失

select count(1) from scott.tb_emp

*

ERROR at line 1:

ORA-00942: table or view does not exist

b.基于SCN号闪回

SQL> select current_scn from v$database;   --获得当前的SCN号

CURRENT_SCN

-----------

918987

SQL> drop table usr1.tb1;   --删除用户usr1下的表tb1

SQL> alter system checkpoint;    --手动执行检查点

SQL>  select file#,checkpoint_change# from v$datafile;

FILE# CHECKPOINT_CHANGE#

---------- ------------------

5             921478

SQL> shutdown abort;

SQL> startup mount;

SQL> flashback database to scn 918987;

SQL> select count(1) from usr1.tb1;

COUNT(1)

----------

404944

c.基于时点闪回

SQL> create table t(id int,col varchar2(20));   --创建表t

SQL> insert into t values(1,'ABC');

SQL> insert into t values(2,'DEF');

SQL> commit;

SQL> create restore point bef_damage;    --创建闪回点

SQL> insert into t values(3,'GHI');

SQL> select ora_rowscn,id,col from t;   --查看表t的记录

ORA_ROWSCN         ID COL

---------- ---------- --------------------

1874406          1 ABC

1874406          2 DEF

1874406          3 GHI

SQL> shutdown immediate;

SQL> startup mount exclusive;

SQL> flashback database to restore point bef_damage;  --实施时点闪回

SQL> alter database open resetlogs;

SQL> select * from t;   --闪回成功后,闪回点之后的数据丢失

ID COL

---------- --------------------

1 ABC

2 DEF

2.使用RMAN进行flashback database

使用RMAN进行闪回数据库的几种常用办法

RMAN> flashback database to scn=918987;

RMAN> flashback database to sequence=85  thread=1;

SQL> create table scott.tb_emp as select * from scott.emp;

SQL> select count(1) from scott.tb_emp;

COUNT(1)

----------

14

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;

TM

-------------------

2010-10-24 13:59:38

SQL> drop table scott.tb_emp;

SQL> shutdown abort;

SQL> startup mount;

RMAN>  flashback database

2> to time="to_date('2010-10-24 13:59:00','yyyy-mm-dd hh24:mi:ss')";

SQL> select count(1) from scott.tb_emp;

COUNT(1)

----------

14

查询视图:v$recovery_file_dest将显示闪回区的使用情况

SQL> select name,space_limit/1024/1024 sp_limt

2   ,space_used/1024/1024 sp_usd,space_reclaimable/1024/1024 sp_recl,

3  number_of_files num_fils from v$recovery_file_dest;

NAME                                             SP_LIMT     SP_USD    SP_RECL   NUM_FILS

--------------------------------------------- ---------- ---------- ---------- ----------

/u01/app/oracle/flash_recovery_area                 2048 472.070313 380.671875         18

可以将某些表空间排除在闪回之外

SQL> alter tablespace users flashback off;

SQL> select name,flashback_on from v$tablespace where ts#=4;

NAME            FLA

--------------- ---

USERS           NO

如果需要对上述表空间启用闪回功能,则需要在mount模式下对该表空间进行开启该功能。

五、总结

闪回策略是针对Oracle撤销功能的增强,为快速恢复数据库提供了更多的便利。数据库的闪回恢复的速度要快于RMAN以及基于用户管理的备份与恢复,其主要原因是因为数据库闪回使用的是闪回日志,而闪回日志中保存的是数据块的完整镜像。其次闪回能够恢复的程度取决于闪回空间的大小以及闪回的保留策略,闪回空间大小会被循环使用,而闪回的保留策略则决定了闪回日志保留的时间长度。总之,合理的平衡恢复速度与可用空间依赖于具体服务要求。

六、更多参考

有关基于用户管理的备份和备份恢复的概念请参考:

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)

有关RMAN的恢复与管理请参考:

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

有关Oracle体系结构请参考:

Oracle 实例和Oracle数据库(Oracle体系结构)

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 数据库实例启动关闭过程

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

Oracle 闪回特性(FLASHBACK DATABASE)的更多相关文章

  1. Oracle 闪回归档(Flashback Database)

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

  2. 6. Oracle闪回特性

    Oracle 闪回 (flashback)是9i版本提供的新特性.这一特性:其他数据库(PostgreSQL,Mysql)是羡慕不已.对数据恢复提供非常便捷的方式.闪回技术通常用于快速简单恢复数据库中 ...

  3. oracle闪回(flashback)的部分实用操作(彻底删除的除外)

    一.数据delete并且commit提交之后的闪回 (一):根据时间来恢复:1.查询数据库当前时间(目的是为了检查数据库时间是否与你电脑时间相近,避免时间不同而将数据恢复到错误时间点)select  ...

  4. Oracle闪回技术(Flashback)

    闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口: ...

  5. Oracle闪回(FlashBack)数据库

    Flashback Database功能非常类似与RMAN的不完全恢复,它可以把整个数据库回退到过去的某个时点的状态,这个功能依赖于Flashback log日志.比RMAN更快速和高效,因此Flas ...

  6. Oracle 闪回归档(Flashback Data Archive)

    --检查权限 SELECT * FROM dba_sys_privs WHERE privilege LIKE '%FLASH%'; --设置权限 GRANT dba TO testuser;--设置 ...

  7. Oracle 闪回

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

  8. Oracle闪回flashback

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

  9. Oracle 闪回总结

    一.闪回查询(Flashback Query)1.闪回查询技术1.1 闪回查询机制    闪回查询是指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或 ...

随机推荐

  1. 基于Pre-Train的CNN模型的图像分类实验

    基于Pre-Train的CNN模型的图像分类实验  MatConvNet工具包提供了好几个在imageNet数据库上训练好的CNN模型,可以利用这个训练好的模型提取图像的特征.本文就利用其中的 “im ...

  2. Eclipse 中Alt+/快捷键失效的解决办法。

    1.Eclipse下进入Windows ->Preperences ->General ->keys2.把word completion的快捷键设置alt+/删掉! 3.把Conte ...

  3. POJ2503Babelfish

    http://poj.org/problem?id=2503 这个题一开始是想用字典树,发现太麻烦..... #include<cstdio> #include<cstring> ...

  4. 使用ajax()方法加载服务器数据

    使用ajax()方法加载服务器数据 使用ajax()方法是最底层.功能最强大的请求服务器数据的方法,它不仅可以获取服务器返回的数据,还能向服务器发送请求并传递数值,它的调用格式如下: jQuery.a ...

  5. MIT算法导论——第一讲.Analysis of algorithm

    本栏目(Algorithms)下MIT算法导论专题是个人对网易公开课MIT算法导论的学习心得与笔记.所有内容均来自MIT公开课Introduction to Algorithms中Charles E. ...

  6. ios(苹果公司的移动操作系统)

    iOS是由苹果公司开发的移动操作系统. 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的, 后来陆续套用到iPod touch.iPad以及Appl ...

  7. 非常实用的PHP代码片段推荐

    当使用PHP进行开发的时候,如果你自己收 藏 了一些非常有用的方法或者代码片段,那么将会给你的开发工作带来极大的便利.今天我们将介绍10个超级好用的PHP代码片段,希望大家能够喜欢! 1.  使用te ...

  8. jQuery 表单验证插件 jQuery Validation Engine 使用

    jQuery 表单验证插件 jQuery Validation Engine 使用方式如下: 1.引入头文件(注意一定要把jQuery放在前面),指定使用 jQuery Validation Engi ...

  9. 车牌识别LPR(六)-- 字符分割

    第六篇:字符分割 在知道了车牌字符的规律之后,可以根据车牌的特点对字符进行分割.一般最容易想到的方法就是根据车牌投影.像素统计特征对车牌图像进行字符分割的方法.是一种最常用的.最基本的.最简单的车牌字 ...

  10. CMMI 配置管理

    配置库的相关知识 通过建立物理配置库的设立规范.各配置库目录的设立原则,确保配置库的统一与规范,确保项目产品得到有效的管理与运用,提高资源的共享与利用:通过 变更管理活动,保证产品的完整.正确.一致, ...