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

-- 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. Linux 终端访问 FTP 及 上传下载 文件

    今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...

  2. PHP7 扩展之自动化测试

    在安装 PHP7 及各种扩展的过程中,如果你是用源码安装,会注意到在 make 成功之后总会有一句提示:Don't forget to run 'make test'. 这个 make test 就是 ...

  3. 主题:PageRank解释

    转自:http://www.iteye.com/topic/95079 PageRank解释 通过对由超过 50,000 万个变量和 20 亿个词汇组成的方程进行计算,PageRank 能够对网页的重 ...

  4. REST_FRAMEWORK加深记忆-极致抽象,极致完结

    余下的就是静心看官方文档了. 这个是最抽象的了. urls.py """tutorial URL Configuration The `urlpatterns` list ...

  5. 黑马程序员--C#中属性和字段(变量)的区别

    ---------------------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------------------- 属性为类提供了一种很有用的封装数据 ...

  6. Linux基础---开关机与帮助

    1.X window与文字模式的切换 通常我们也称文字模式为 终端机接口, terminal或console!Linux预设的情况下, 会提供六个Terminal来让使用者登入,切换的方式为: [Ct ...

  7. TCL语言笔记:TCL中的数组

    一.介绍 Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念.数组的存取速度要比列表有优势,数组在内部使用散列表来存储 ...

  8. WCF揭秘(一)——简单的WCF开发实例

    一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...

  9. WCF入门(六)---主机WCF服务

    建立一个WCF服务后,下一步就是托管它,以便客户端应用程序可以使用,这就是所谓的WCF服务托管. WCF服务可以通过使用任何的四种方法如下托管. IIS主机 - IIS是Internet信息服务的缩写 ...

  10. Android Handler之Message传递参数

    最近发现Message,发送消息可以传递参数,这个思路很好,所以写了一个例子,点击屏幕,给Activity发送一个消息,传递两个参数,并把这个activity销毁掉! 程序打开界面: 点击屏幕,销毁a ...