`

数据库闪回__测试恢复数据库时有用

 
阅读更多
--=====================================

-- 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以及基于用户管理的备份与恢复,其主要原因是因为数据库闪回使用的是闪回日志,而闪回日志中保存的是数据块的完整镜像。其次闪回能够恢复的程度取决于闪回空间的大小以及闪回的保留策略,闪回空间大小会被循环使用,而闪回的保留策略则决定了闪回日志保留的时间长度。总之,合理的平衡恢复速度与可用空间依赖于具体服务要求。

  
分享到:
评论

相关推荐

    数据库备份与恢复测试

    数据库备份与恢复测试,简单实用,希望对大家有用

    SQL2000 数据库测试工具

    该程序可以对SQL常见问题进行恢复,尤其对安装有进销存软件的维护工作特别有用

    软件测试教学文档 java test

     恢复测试:测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。  安全测试:测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术...

    数据库设计经验谈.pdf

    14 采用视图 14 给数据保有和恢复制定计划 14 用存储过程让系统做重活 14 使用查找 14 第 5 部分 - 各种小技巧 14 文档、文档、文档 14 使用常用英语(或者其他任何语言)而不要使用编码 15 保存常用信息 15 测试、...

    恒星:用于开发的快速数据库快照和还原工具

    当您编写数据库迁移,切换分支或使用SQL时,Stellar允许您快速恢复数据库。 支持PostgreSQL和MySQL(部分)。 基准测试 恒星很快。 与使用常规pg_dump和pg_restore相比,它可以使数据库恢复快约140倍。 怎么运行的 ...

    Oracle9i的init.ora参数中文说明

    说明: 指定数据库的默认语言, 该语言将用于消息, 日期和月份名, AD, BC, AM 和 PM 的符号, 以及默认的排序机制。可支持的语言包括英语, 法语和日语等等。 值范围: 任何有效的语言名。 默认值: 根据操作系统而定 ...

    informix 实用大全

    本书由专业Informix用户、数据库管理员、Informix管理员和应用程序开发员编写而成,把各大Informix产品的方方面面综合、深入地集中在一起,包括最新Informix产品的详细信息,如Informix Internet Foundation.2000...

    ORACLE9i_优化设计与系统调整

    §3.2.8 当参数指定错误时怎么办? 70 §3.3 参数内容说明 70 §3.4 DBA常用参数说明 71 §3.4.1 跟踪文件路径(BACKGROUND_DUMP_DEST) 71 §3.4.2 在缓冲区驻留对象(BUFFER_POOL_KEEP) 71 §3.4.3 版本兼容...

    mysql-concentrator:一个 MySQL 代理服务器,它集中连接,因此您可以在一个事务中让一个连接包装另一个连接。 这对测试很有用

    在 Web 应用程序上进行测试时,一件烦人的事情是您经常必须在每次测试之间执行一堆 TRUNCATE 或 DROP TABLE 语句才能使数据库恢复到已知状态。 这样做确实会减慢您的测试速度。 Ruby on Rails 通过将每个测试包装在...

    网管教程 从入门到精通软件篇.txt

    Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。 ...

    MySQL中文参考手册

    o 1.8 有用的MySQL相关链接 * 2 MySQL 邮件列表及如何提问或报告错误 o 2.1 MySQL邮件列表 o 2.2 提问或报告错误 o 2.3 怎样报告错误或问题 o 2.4 在邮件列表上回答问题的指南 * 3 MySQL的许可证和技术支持 ...

    MySQL安装和密码重置.pdf

    如何使用mysql_secure_installation进行MySQL安全设置:mysql_secure_installation是一个MySQL脚本,可帮助您执行常见的安全设置,例如禁用匿名用户、删除测试数据库等。 这些资源应该涵盖了MySQL

    MYSQL

    13.1.1 myisamchk的调用语法 13.1.2 myisamchk的内存使用 13.2 13.2 建立一个数据库表维护规范 13.3 获得关于一个表的信息 13.4 使用myisamchk进行崩溃恢复 13.4.1 怎样检查表的出错 ...

    MySQL中文参考手册.chm

    9.4 MySQL数据库表类型 10 从 MySQL 得到最大的性能 10.1 优化概述 10.2 系统/编译时和启动参数的调节 10.2.1 编译和链接如何影响 MySQL 的速度 10.2.2 磁盘问题 10.2.2.1 为...

    PHP和MySQL Web开发第4版pdf以及源码

    15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 ...

    PHP和MySQL Web开发第4版

    15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 ...

    PHP和MySQL WEB开发(第4版)

    15.11.2 备份与恢复MySQL数据库 15.12 自然环境安全 15.13 下一章 第16章 Web应用的安全 16.1处理安全性问题的策略 16.1.1 以正确心态为开始 16.1.2 安全性和可用性之间的平衡 16.1.3 安全监视 16.1.4 基本方法 ...

    sqlserver2000基础(高手也有用)

    11.1.6 数据库恢复模型对数据库备份和还原的影响 322 11.2 制订数据库备份方案 326 11.2.1 备份方案制订原则 326 11.2.2 建立数据备份方案 327 11.3 数据库备份与还原的实践应用 332 11.3.1 系统数据库的...

    2009 年度十大 SQL Server 技巧文章

    在对SQL Server系统执行入侵测试或者更高级别的安全审计时,有一种测试不应该被忽略,那就是SQL Server密码测试。这一点看起来显而易见,但是很多人都会忽略它。  SQL Server密码破解工具简介 使用XML在SQL ...

Global site tag (gtag.js) - Google Analytics