`

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

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

-- 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

    闪回数据库、闪回表和闪回事务都提供了不同程度的恢复能力,尤其在应对误操作时非常有用。 6. **归档日志模式**:在归档日志模式下,Oracle记录所有事务到归档日志文件,使得数据库能够进行完整的恢复,包括在介质...

    ORACLE数据库回闪

    当进行回闪操作时,数据库通过重做这些日志中的更改,将数据恢复到之前的状态。 1. **回闪数据库**:这是最高级别的回闪操作,可以将整个数据库恢复到某个时间点的状态。这通常用于灾难恢复,需要在归档模式下运行...

    sql_backup.rar_DELPHI 还原sql_SQL backup_数据库 备份_数据库备份

    在IT行业中,数据库管理是至关重要的任务之一,而数据库备份和恢复则是确保数据安全的关键环节。...在实际操作中,确保备份的可靠性、频率以及恢复测试是不可或缺的步骤,以确保在必要时能够迅速且有效地恢复数据。

    精通Oracle_10g备份与恢复

    制定恢复计划并定期测试是非常重要的,以确保在真正的灾难发生时,能够迅速有效地恢复数据库。测试应包括模拟不同类型的故障场景,如磁盘故障、数据库实例故障等。 ### Oracle_10g备份与恢复高级技术 #### 1. ...

    老熊ODU数据库灾难恢复工具windows版本(测试用)

    ODU(Old Bear's ODU Database Disaster Recovery Tool)是一款专为Windows操作系统设计的数据库灾难恢复工具,主要用于在数据丢失或系统故障时帮助用户恢复重要的数据库信息。这款工具由老熊团队开发,提供测试版本...

    数据库,shell,测试知识

    7. **正则表达式**:在匹配和处理文本时非常有用,例如grep、sed和awk命令。 ### 测试知识 测试是软件开发过程中的关键环节,确保产品的质量和稳定性。主要包括: 1. **测试用例**:详述了如何验证软件功能的文档...

    备份与恢复测试

    ### 备份与恢复测试——Oracle数据库中的关键实践 #### 一、概述 备份与恢复是数据库管理中极为重要的环节,对于确保数据的安全性和系统的稳定性至关重要。本文将围绕Oracle数据库中的备份与恢复策略进行深入探讨...

    Oracle数据库备份与恢复教程.zip

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其稳定性和强大的数据管理能力...通过学习本教程,你将能够掌握如何在Oracle环境中实施高效、安全的备份策略,并在必要时快速恢复数据库,确保业务连续性。

    数据库_.vip.yingshiying_

    使用这类文件,用户可以轻松地在自己的环境中重建整个数据库,这对于开发、测试和迁移数据库非常有用。 在实际应用中,这样的影视平台数据库可能包含以下核心部分: 1. 用户表:存储用户的基本信息,如用户名、...

    数据库管理工具Navicat_Premium_11.0.17

    这对于优化数据库性能、找出瓶颈以及调整数据库配置非常有用。 7. **安全性**:Navicat Premium支持SSL加密连接,确保数据在传输过程中的安全性。此外,还可以设置用户权限,控制对数据库的访问,保证数据的安全。 ...

    SQL-Database-Extractor-module.zip_sql 数据库_数据库extractor

    同时,还原功能允许用户从备份文件中恢复数据库,确保在数据丢失或系统故障时能快速恢复服务。 3. 附加和分离数据库: 附加和分离数据库是移动或管理数据库的一种方法。分离数据库会断开数据库与SQL Server实例的...

    如何恢复系统数据库

    ### 如何恢复系统数据库 在IT领域中,数据库恢复是一项重要的技能,特别是在处理关键业务数据时。本文将详细介绍一种安全有效的系统数据库恢复...此外,定期备份数据库以及测试恢复流程是确保数据安全的重要措施之一。

    Oracle 备份恢复闪回技术实战

    Oracle闪回技术是一种先进的数据恢复机制,能够帮助数据库管理员迅速恢复因逻辑错误而导致的数据损失。它不同于传统的备份与恢复方法,无需依赖备份文件,而是利用数据库内部的特殊机制来实现数据的即时恢复。这种...

    SQL数据库备份与恢复

    2. 手动恢复:同样,可以通过SSMS或T-SQL命令恢复数据库,如 `RESTORE DATABASE [DatabaseName] FROM DISK = 'BackupFilePath'`。根据恢复模式和备份类型,可能需要指定WITH NORECOVERY或WITH RECOVERY选项。 总结...

    全中文数据库处理工具Data_LLQ.rar

    迁移功能则可以在不丢失数据的情况下将数据库从一个环境迁移到另一个环境,这对于开发测试、系统升级或者灾难恢复等场景十分有用。 总的来说,Data_LLQ是一款全面、易用且适应中文环境的数据库管理工具,它的强大...

    数据库备份资料压缩包

    exp操作可以创建一个逻辑备份,即数据文件的逻辑表示,这在数据迁移、数据恢复或创建测试环境时非常有用。不过,exp并不包含数据文件的物理结构,因此在恢复时需要imp(Import)工具配合使用。 imp(Import)是exp...

    YGGL_数据库

    使用这样的SQL脚本,可以快速地在新的环境中重建整个数据库,这对于开发、测试和备份恢复等场景非常有用。同时,了解并熟练掌握SQL语言对于数据库管理和开发人员来说至关重要,因为它能帮助我们高效地操作数据,优化...

    数据库工作经验总结

    Oracle数据库的备份与恢复、性能优化、安全管理、网络配置、数据迁移和升级、以及故障诊断等都是Oracle数据库管理员需要掌握的知识点。从文档中提供的内容来看,这是作者在实际工作中积累的一系列实用SQL命令和...

    通用数据库访问工具,可以方便数据库操作,测试,浏览

    "数据跟踪,sql语句测试"则意味着工具还具备日志记录和调试功能,允许用户追踪执行的SQL语句,检查其性能和结果,对于调试复杂查询或优化数据库性能十分有用。 标签“工具”进一步确认了这是一个实用的软件工具,...

    Oracle闪回技术的应用与实践分析.pdf

    5. **闪回数据库**:这是最高级别的闪回操作,可将整个数据库恢复到过去某一时间点,通常在灾难恢复时使用。 在上述示例中,展示了如何使用闪回表来恢复数据。首先创建了一个名为Com_Employee的测试表并插入了数据...

Global site tag (gtag.js) - Google Analytics