zoukankan      html  css  js  c++  java
  • oracle数据库全然恢复和不全然恢复以及运行用户管理辈分恢复


    比較全然恢复和不全然恢复:

    一、全然恢复:将数据库恢复到当前最新状态,包含直至请求恢复时进行的全部已提交的数据更改


    二、不全然恢复:将数据库恢复到请求恢复操作之前指定的过去时间点

    一、全然恢复过程
    以下的步骤说明了运行全然恢复期间要採取的操作:

    1. 通过备份还原损坏或丢失的文件。

    2. 依据须要应用增量备份、归档重做日志文件和联机重做日志文件里的更改。将重做日志更改应用于数据文件,直到到达当前联机日志,而且又一次输入了最新的事务处理。在整个过程中会生成还原块。这称为前滚或快速缓存恢复。

    3. 此时,还原的数据文件里包括已提交和未提交的更改。 

    4. 还原块用于回退不论什么未提交的更改。有时也称为事务处理恢复。

    5. 此时,数据文件处于已恢复状态,且与数据库中的其他数据文件一致。

    二、不全然恢复过程:
     

        不全然恢复或数据库时间点恢复使用备份来生成非当前版本号的数据库。也就是说,不会应用最新备份之后生成的全部重做记录。仅当绝对必要时才运行此类恢复。要运行不全然恢复,须要:

    恢复点之前生成的全部数据文件的有效脱机或联机备份

    从备份时间到指定恢复时间的全部归档日志
    以下列出了运行不全然恢复的过程:

    1.从备份还原数据文件:假设还原点目标并不非常新,则使用的备份可能也不是最新的。这须要使用 OS 命令或 RMAN RESTORE 命令来拷贝文件。
    2.使用 RECOVER 命令:从归档重做日志文件应用重做,依据须要包含尽可能多的数据以达到还原点目标。

    3.恢复以后的状态:此时,数据文件包括一些已提交的事务处理和未提交的事务处理,由于重做能够包括未提交的数据。

    4.使用 ALTER DATABASE OPEN 命令:应用还原块之前数据库已打开。这是为了提供更高的可用性。

    5.应用还原数据:应用重做时,同一时候会应用支持还原数据文件的重做。这样,还原能够应用于数据文件,以便还原不论什么未提交的事务处理。这是接下来要完毕的操作。

    6.过程完毕:此时,数据文件已恢复到所选择的时间点。
      
       假设必须运行恢复且发现包括事务处理的归档日志丢失,当中的事务处理是在还原所用的备份的创建时间与目标恢复 SCN 之间发生的,则时间点恢复是唯一的选择。没有丢失的日志,则没有该期间内对数据文件进行更新的记录。唯一的选择就是从还原备份的时间点恢复数据库,直到未损坏的归档日志系列所同意的时间点,然后使用 RESETLOGS 选项打开数据库。丢失的重做日志文件里的或之后的全部更改都将丢失。


    备份和恢复的使用类型:

    数据库备份和恢复的类型包含:

    用户管理的:不使用 RMAN。
      --使用 OS 命令移动文件   --DBA 须要手动维护备份活动记录

    server管理的:使用 RMAN

    1.运行用户管理的数据库备份
      能够使用 OS 命令创建数据文件的副本,从而备份数据库。操作过程取决于数据库是否处于 ARCHIVELOG 模式。假设是,则通过在复制表空间的数据文件之前将每一个表空间置于备份模式,能够使数据库处于打开且可用状态。否则,在复制数据文件之前必须先关闭数据库。

    1)手动备份 NOARCHIVELOG 数据库:

    通过关闭数据库并将全部数据文件和控制文件拷贝到备份文件夹,能够对 NOARCHIVELOG 数据库进行一致的总体数据库备份。因为文件复制操作是使用 OS 命令完毕的,因此必须先关闭数据库。这会将数据库置于一致状态。

    SQL> SHUTDOWN IMMEDIATE
    $ cp $ORACLE_BASE/ORCL/datafile/*.dbf   /u02/backup/datafile
      --将数据文件拷贝到备份位置

    $ cp $ORACLE_BASE/ORCL/controlfile/*.ctl  /u02/backup/controlfile   --将控制文件拷贝到备份位置

    SQL> STARTUP
    2)手动备份 ARCHIVELOG 数据库

    假设数据库处于 ARCHIVELOG 模式下,则拷贝文件前不一定必须关闭数据库。终于会得到不一致备份,但应用重做数据后会使其恢复到一致状态。

    启动备份模式:
    复制数据文件之前,必须将每一个数据文件都置于备份模式。请使用 ALTER TABLESPACE 和 ALTER DATABASE 命令的 BEGIN BACKUP 子句来运行此操作。下面是每一个命令的语法:

    ALTER TABLESPACE <tablespace> BEGIN BACKUP;
      --ALTER TABLESPACE 命令仅影响属于该表空间的那些数据文件。


    ALTER DATABASE BEGIN BACKUP;
      --ALTER DATABASE 影响数据库中的全部数据文件。

    结束备份模式:
      
    使数据文件退出备份模式很重要。关闭数据库时,不能有不论什么数据文件处于备份模式。假设尝试关闭处于该状态的数据库,将收到错误。此外,因为备份模式会导致生成额外的重做数据,因此会给系统带来额外的负载。假设您不主动备份数据文件,则没有理由使不论什么数据文件处于备份模式。

    详细操作:

    备份数据文件:
    SQL> select file_name, tablespace_name from dba_data_files;
        --查看全部数据文件位置及表空间

    SQL> ALTER TABLESPACE users BEGIN BACKUP;
        --将表空间置于备份模式

    $ cp $ORACLE_HOME/oradata/orcl/users*.dbf /u02/backup/datafile
        --将该表空间的数据文件拷贝到备份位置

    SQL> ALTER TABLESPACE users END BACKUP;
        --使该表空间退出备份模式

    备份控制文件的方式包含: 

      (1).创建为映像副本,写入到指定名称的文件:

    SQL> ALTER DATABASE BACKUP CONTROLFILE TO
      '/u01/backup/controlfile.bak';
     


    Database altered.

      (2).生成又一次创建控制文件的脚本,写入到跟踪文件:

    SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
     


    Database altered.    
      --重建控制文件的脚本在$ORACLE_BASE/diag/rdbms/prod/PROD/trace

    查看刚生成脚本文件,会发现里面会有两种创建控制文件的方式:

    NORESETLOGS  ARCHIVELOG,表示日志文件等完善,重新启动数据库是不用resetlog;

    RESETLOGS  ARCHIVELOG;日志文件损坏丢失,不能运行全然恢复,将日志组号清零;


    2.运行用户管理的数据库恢复

    1)运行用户管理的数据库全然恢复

    用户管理的数据库全然恢复:

    将数据库恢复到最新的 SCN
    能够一次处理整个数据库,也能够一次处理一个数据文件或表空间 须要当前控制文件 须要有待恢复的全部文件的备份 须要到眼下为止的全部归档日志


    V$RECOVER_FILE:查看哪些文件须要介质恢复

    V$RECOVERY_LOG:查看运行恢复须要哪些归档日志

    在某些情况下,属于 SYSTEM 表空间的文件受到损坏时,实例将自己主动关闭。当某些数据文件有问题时,即使实例保持执行状态,您也能够判定使数据库保持执行状态没有不论什么意义;受影响的数据库对象太多了。在这样的情况下,请关闭数据库执行恢复。


    假设数据库仍处于打开状态,则能够查询 V$RECOVER_FILE 视图了解哪些数据文件须要恢复,并查询 V$RECOVERY_LOG 了解须要哪些归档日志。这会指示您须要从备份中还原哪些文件(假设有)。
    然后关闭数据库。调查介质故障,确定问题原因。修复该问题,以便能够从备份中还原文件。

    比如,您可能须要更换磁盘驱动器。
    如今,可使用 RECOVER 命令来运行恢复。将恢复范围限制在所需范围,如数据文件或表空间。假设须要,可恢复整个数据库。随后,打开数据库。

    SQL> SELECT file#, error FROM v$recover_file;
        --确定须要恢复的数据文件

    SQL> SELECT archive_name FROM v$recovery_log;
        --确定完毕恢复所需的归档日志文件

    确定与恢复相关的文件

      
    假设数据库仍处于打开状态,请按以下的说明查询文件。否则,请尝试启动实例,并装载数据库发出查询。
      
    为了确定哪些数据文件须要恢复,查询 V$RECOVER_FILE 视图。ERROR 列指明文件须要恢复的原因。假设此列具备 OFFLINE NORMAL 以外的不论什么值,则须要恢复。

       要查看全部受影响的数据文件和表空间的概况,能够在此查询中增加 V$DATAFILE 和 V$TABLESPACE。
    以下是一个演示样例:

    SELECT r.FILE# ,d.NAME df_name ,t.NAME tbsp_name, d.STATUS ,r.ERROR ,r.CHANGE# ,r.TIME


    FROM   V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t


    WHERE  t.TS# = d.TS#
    AND    d.FILE# = r.FILE#;
     
    这可指示受损的程度,帮助您确定 RECOVER 命令的对象。


    V$RECOVERY_LOG 视图显示运行恢复所需的归档日志文件。假设列表显示某些文件已移出默认归档日志位置,则必须将它们还原到某个位置,再运行恢复。
    记录这些查询的结果后,关闭数据库。

    还原与恢复相关的文件


    确定了须要哪些数据文件和归档日志文件后,将它们还原到对应的磁盘位置。通过从备份位置复制数据文件,能够还原该数据文件,例如以下面演示样例所看到的:

    $ cp /disk2/backup/datafile/survey01.dbf  $ORACLE_BASE/oradata/ORCL/datafile/survey01.dbf
     
    假设恢复须要不论什么归档日志,检查这些日志是否仍位于归档日志的默认磁盘位置。这些日志可能不在默认位置,
    比如,已将它们移至磁带或其他磁盘驱动器。假设日志已被移动,则需将它们还原到默认归档日志位置或暂时位置。假设默认位置(由 LOG_ARCHIVE_DEST_1 初始化參数指定)中有足够的可用空间,在该位置还原日志。否则,能够将日志置于某个其他磁盘位置。还原时,可指定该备用位置来查找归档日志文件。
    假设须要移动数据文件,则必须将这一情况记录在控制文件里。通过运行 ALTER DATABASE RENAME FILE 命令,能够完毕此操作,例如以下例所看到的:


    SQL> ALTER DATABASE RENAME FILE
     '/u01/app/oracle/oradata/ORCL/datafile/survey01.dbf' TO
     '/newdisk/ORCL/datafile/survey01.dbf';   
       --须先启动实例并装载数据库,然后才干运行 ALTER DATABASE RENAME FILE 命令。

    载数据库并使全部数据文件联机(假设尚未运行此操作)。通过查询 V$DATAFILE 视图,能够检查每一个数据文件的状态。可使用例如以下命令使数据文件联机:
     
    SQL> ALTER DATABASE DATAFILE  '/newdisk/ORCL/datafile/survey01.dbf' ONLINE;
     


    应用重做数据   

      此时,数据文件已还原到过去的某个时间点。归档日志文件也已还原到其默认位置或某个其他位置(仅用于此恢复)。已准备就绪,可运行真正的恢复步骤,这意味着已应用重做且数据文件已恢复到最新 SCN。
      使用 SQL*Plus RECOVER 命令运行此操作。
    假设没有指定 AUTOMATIC 选项,则系统会提示您指定要应用的每一个重做日志文件。这样能够提高对恢复过程的控制。通常,AUTOMATIC 用于全然恢复。
    假设归档日志文件已还原到数据库默认位置以外的某个磁盘位置,则必须指定 FROM 子句。提供存储这些文件的文件夹,恢复过程将在该文件夹中寻找文件。
    最后,打开数据库。此时已全然恢复。

    SQL> RECOVER AUTOMATIC FROM '/u01/arch_temp' DATABASE;
       --使用 RECOVER 命令应用重做数据

    SQL> ALTER DATABASE OPEN;    --打开数据库

    对打开的数据库运行全然恢复

     
    假设在数据库打开时出现介质故障,则数据库将继续执行。尝试向当中的数据文件写入数据时,数据文件将自己主动脱机。对这些数据文件进行查询不会导致其脱机,可是会向发出查询的用户返回错误。
    与恢复关闭的数据库类似,首先须要查询需恢复的文件和归档日志。然后,使包括受损数据文件的全部表空间脱机。可使用例如以下命令完毕该操作:
    SQL> ALTER TABLESPACE survey OFFLINE TEMPORARY;
      使用 TEMPORARY 选项会导致 Oracle 对全部属于表空间的联机数据文件执行检查点操作。经过检查点操作的数据文件在又一次联机后不须要进行恢复,由于对于可能会影响它们的不论什么事务处理的最新 SCN 而言,它们是最新的。虽然在此命令执行时数据文件必须可用,但此选项更符合须要。问题可能是暂时的,能够在不产生错误的情况下使表空间联机。
      检查介质以确定问题原因。可使用 DBVERIFY 有用程序来运行此操作。假设文件被永久损坏,按前面就恢复关闭数据库所述的内容进行还原和恢复。还原和恢复步骤完毕后,应使全部表空间又一次联机。

    2.运行用户管理的不全然恢复

    在下面情况下,可将数据库恢复到过去的时间点:


    希望数据库处于出现用户错误或管理错误之前的状态。

    数据库包括损坏的块。

    因为缺少某些重做日志文件,因此无法对数据库运行全然恢复。

    您希望创建一个測试数据库,该数据库处于过去某个时间的状态。

    丢失了数据文件和一个或多个未归档重做日志文件

    可通过下面方式指明何时停止应用重做数据:


    1).指定停止的时间
      SQL> RECOVER DATABASE UNTIL
      TIME '2005-12-14:12:10:03';

    2).
    指定停止的 SCN
      SQL> recover database until change1487389;


    3).在运行恢复时发出 CANCEL 命令
      SQL> RECOVER DATABASE UNTIL CANCEL;

    运行用户管理的不全然恢复


    使用下面命令运行不全然恢复:


    RECOVER [AUTOMATIC] DATABASE option


    以下是选项的含义:


    AUTOMATIC:自己主动应用归档和重做日志文件


    option: UNTIL TIME 'YYYY-MM-DD:HH24:MI:SS'
                       
    UNTIL CANCEL
                       
    UNTIL CHANGE <integer>
                      
    USING BACKUP CONTROLFILE


    基于取消的不全然恢复


      基于取消的不全然恢复与对关闭数据库运行的全然恢复很相似。差异在于运行 RECOVER 命令的方式;指定 UNTIL CANCEL 子句。此子句将导致恢复过程提示您确认要应用的每一个重做日志文件的建议名称。因此,在进行恢复过程中,系统会提示您确认已归档或联机的重做日志文件名称,并且对于每一个文件名称,您能够接受它,也能够更改它。到达要让恢复停止的时间点时,请输入 CANCEL,而不要接受文件名称。这将停止恢复。
      完毕此操作后,必须使用 RESETLOGS 选项打开数据库。因为数据库当前正在运行还有一实例化操作,因此须要重置重做日志序列号。
    打开该数据库后,检查预警日志中的消息。通过这样的方式,能够获知恢复是否已成功。要在恢复过程中自己主动应用重做日志文件,能够使用 SQL*Plus SET AUTORECOVERY ON 命令,在恢复提示符下输入 AUTO,或者使用 RECOVER AUTOMATIC 命令。


    基于时间和更改的不全然恢复


    基于时间和更改的不全然恢复与基于取消的恢复类似,差别在于使用不同标准来指定停止恢复的时间。基于时间的恢复使用在 RECOVER 命令的命令行中指定的时间来获知何时停止。基于更改的恢复使用在命令行中指定的 SCN。
    与全部的不全然恢复一样,之后必须使用 RESETLOGS 选项打开数据库。
     


    运行用户管理的不全然恢复:步骤

    1.关闭数据库。

    2.还原数据文件。

    3.装载数据库。

    4.恢复数据库。

    5.使用 RESETLOGS 选项打开数据库。 resetlogs 将日志文件的SCN号强制置位1;


       运行 ALTER DATABASE OPEN RESETLOGS 打开数据库。

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

  • 相关阅读:
    if __name__ == 'main': 的作用和原理
    第四篇、Python文件处理
    第二篇*2、Python字符串格式化
    第三篇、Python函数
    第二篇*1、Python基本数据类型
    ping包,支持ip录入
    layui之弹出层--从父窗口传递数据到子窗口
    动态调用WebService
    c# 类的反射实例 (GetType().Invoke().GetMethod().CreateInstance())
    ASP.Net UpdatePanel控件 局部刷新 && 弹出提示信息
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4070735.html
Copyright © 2011-2022 走看看