Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249387
  • 博文数量: 64
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 565
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-18 10:54
文章分类

全部博文(64)

文章存档

2011年(4)

2010年(60)

我的朋友

分类: Oracle

2010-03-25 18:56:31

恢复目录管理

一、建立恢复目录的步骤
1
、建立恢复目录表空间
   SQL>CREATE TABLESPACE RMAN_TS
     2>DATAFILE 'D:\ORACLE\TEST\RMAN.DBF' SIZE 100M

2、建立恢复目录所有者
    SQL>CREATE USER RMAN IDENTIFIED BY RMAN
      2>DEFAULT TABLESPACE RMAN_TS

3、授予恢复目录所有者角色。恢复目录所有者必须具有RECOVERY_CATALOG_OWNER角色。另外,当建立恢复目录时,需要连接到数据库,并且在恢复目录表空间上创建
  
表,因此还应该为恢复目录所有者授予CONNECT RESOURCE角色
   SQL>GRANT CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER TO RMAN

4、建立恢复目录。
   C:\>RMAN CATALOG .
   RMAN>CREATE CATALOG;

5、注册目标数据库。在建立了恢复目录之后,为了将目标数据库的RMAN元数据存放到恢复目录中,必须连接到目标数据库,并使用REGISTER DATABASE命令注册目标数据库,
  
可以使用REPORT SCHEMA命令检查是否注册成功。

   C:\>RMAN CATALOG

   RMAN>CONNECT TARGET

   RMAN>REGISTER DATABASE

   RMAN>REPORT SCHEMA;

二、使用存储脚本
1
、建立存储脚本
   RMAN>CREATE SCRIPT BACKUP_DATABASE{
      2>BACKUP FORMAT='D:\BACKUP\%d_%s.bak' database
      3>include current controlfile
      4>plus archivelog;
      5>sql 'alter system archive log current';
      6>}

2、运行存储脚本
   (1)
RMAN提示符下运行存储脚本
       RMAN>RUN{EXECUTE SCRIPT BACKUP_DATABASE;}

   (2)在命令行运行存储脚本。
       C:\>RMAN CATALOG TARGET SCRIPT BACKUP_DATABASE

3、显示脚本内容
   RMAN>PRINT SCRIPT BACKUP_DATABASE

4、替换存储脚本
   RMAN>REPLACE SCRIPT BACKUP_DATABASE{
   2>BACKUP DATABASE;
   3}

5、删除存储脚本
   RMAN>DELETE SCRIPT BACKUP_DATABASE;

7、列出所有存储脚本
   RMAN>LIST SCRIPT NAMES;

三、维护恢复目录

1、重新同步恢复目录
  
重新同步恢复目录的目的是为了使恢复目录和目标数据库控制文件保持同步,当目标数据库物理结构发生改变(增加和删除表空间,增加数据文件)时,应该重新同步恢复目录。
   RMAN>RESYNC CATALOG;

2、注销目标数据库
   RMAN>UNREGISTER DATABASE;

3、升级恢复目录
  
如果RMAN客户端版本高于恢复目录的版本号,那么应该升级恢复目录。注意,当升级恢复目录时,需要执行两次UPGRADE CATALOG命令。
   RMAN>UPGRADE CATALOG;
   ...
   ...
   RMAN>UPGRADE CATALOG;

4、删除恢复目录
  
删除恢复目录时,会删除目录的所有信息。注意,当删除恢复目录时,需要执行两次DROP CATALOG命令。

5、恢复数据库到早期数据库副本
  
当执行了不完全恢复之后,需要使用RESETLOGS选项打开数据库,当用该选项打开数据库后,会建立数据库的副本,如果想将数据库恢复到早期副本的状态,
  
则必须使用RESET DATABASE TO INCARNATION命令设置当前数据库副本为早期副本,然后执行相应操作。步骤如下:
   (1)
确定数据库副本的副本键值
      RMAN>LIST INCARNATION OF DATABASE;

   (2)设置数据库到早期版本
      RMAN>STARTUP FORCE MOUNT
      RMAN>RESET DATABASE TO INCARNATION 2;

   (3)转储早期版本的控制文件。当转储控制文件时,要求目标数据库必须处于NOMOUNT状态。注意,当转储早期版本的控制文件时,必须确保控制文件副本存在。
      RMAN>RUN{
      2>STARTUP FORCE NOMOUNT;
      3>SET UNTIL SCN=656740;
      4>RESTORE CONTROLFILE;
      5>}

   (4)恢复数据库到早期副本。
      RMAN>RUN{
      2>ALTER DATABASE MOUNT;
      3>RESTORE DATABASE;
      4>RECOVER DATABASE;
      5>ALTER DATABASE OPEN RESETLOGS;
      6>}

四、查询恢复目录

1RC_DATABASE
  
该数据字典视图用于显示在恢复目录中已经注册的所有目标数据库信息。
   SQL>SELECT DBID,NAME,RESETLOGS_CHANGE# FROM RC_DATABASE

2RC_TABLESPACE
  
该数据字典视图用于显示在恢复目录中所记载的目标数据库的表空间信息。
   SQL>SELECT TS#,NAME,CREATION_CHANGE# FROM RC_TABLESPACE WHERE DB_NAME='MYDB'

3RC_DATAFILE
   
该数据字典视图用于显示在恢复目录中所记载的目标数据库的数据文件信息。
   SQL>SELECT FILE#,NAME,BYTES FROM RC_DATAFILE WHERE DB_NAME='MYDB'

4RC_STORED_SCRIPT
  
该数据字典视图用于显示在恢复目录中所记载的所有存储脚本信息。
   SQL>SELECT SCRIPT_NAME FROM RC_STORED_SCRIPT WHERE DB_NAME='MYDB'

5RC_STORED_SCRIPT_LINE
  
该数据字典视图用于存储脚本的内容。
   SQL>SELECT LINE,TEXT FROM RC_STORED_SCRIPT_LINE WHERE SCRIPT_NAME='BACKUP_DATABASE'

 

RMAN配置与维护命令

一、REPORT
1
、报告目标数据库的物理结构
    RMAN>REPORT SCHEMA

2、报告需要备份的数据文件

    在执行备份之前,常常需要取得需要备份的数据文件信息,通过执行REPORT NEED BACKUP 命令,可以列出需要备份的数据文件。当使用REPORT NEED BACKUP命令时,可以带
   
INCREMENTALDAYSREDUNDANCYRECOVERY WINDOW 四个选项。
   
    (1)
报告需要转储的增量备份超出特定个数的数据文件
      
当恢复数据文件时,需要转储数据文件备份,然后应用归档日志执行恢复。如果备份数据文件采用了增量备份和累积备份策略,那么在转储数据文件时依次转储
       0
12..级别的增量备份,转储的数据文件备份越多,恢复时间越长,下面以报告恢复数据文件需要转储的增量备份个数超过3次的数据文件为例:
       RMAN>REPORT NEED BACKUP INCREMENTAL 3

       其中 file 用于标识数据文件的编号,Incrementals用于标识需要转储的备份文件个数,Name用于标识数据文件的名称,如果某个文件出现转储的次数大于3次,
      
应该在该数据文件上执行完全备份或增量0级备份。

    (2)报告特定天数未备份的数据文件
      
当恢复数据文件时,在转储了所需的数据文件备份之后,会应用从备份点开始的所有归档日志。需要应用的归档日志越多,恢复时间越长,为了减少恢复时间,应该制定
      
备份数据文件的时间周期。

       USERS表空间上3天未备份的数据文件
       RMAN>REPORT NEED BACKUP DAYS 3 TABLESPACE USERS;

       数据库内10天以上未备份的数据文件
       REPORT NEED BACKUP DAYS 10

   
    (3)
报告低于特定备份次数的数据文件
      
恢复数据文件时,需要转储数据文件备份。当数据文件出现介质失败,并且数据文件备份也出现问题时,会导致数据文件无法恢复。在制定备份册落时,
      
为了防止数据文件备份出现问题,应该为数据文件保留多个备份,但某些文件的备份次数过少时,需要增加备份数量。
      RMAN>REPORT NEED BACKUP REDUNDANCY 2 DATABASE;

    (4)报告在恢复时间窗口内未备份的数据文件
      
当恢复数据文件时,在转储了所需的数据文件备份之后,会应用从备份点开始的所有归档日志。需要应用的归档日志越多,恢复时间越长。通过使用
      
恢复时间窗口,可以将恢复操作需要应用的归档日志控制在特定时间范围内。下面以报告超过恢复窗口6天的未备份数据文件为例,说明使用DAYS选项的方法:
       RMAN>REPORT NEED BACKUP RECOVERY WINDOW OF 6 DAYS

       DAYS 用于标识恢复数据文件需要应用几天前的归档日志。

3、报告陈旧备份
    
当使用RMAN执行恢复操作时,RMAN会自动转储最近的备份文件,然后应用该备份文件之后的归档日志。如果在特定数据文件上进行了多次备份,那么可以删除
    
早期备份,通过使用REPORT OBSOLETE命令,可以报告陈旧备份。下例报告备份次数超过2次的陈旧备份:
      RMAN>REPORT OBSOLETE REDUNDANCY 2;

4、报告不可恢复的数据文件
    
当使用NOLOGGING选项装载了数据库之后,因为数据变化没有被记录到归档日志中,所以会导致过去的数据文件备份不能恢复当前数据文件。为防止数据文件不能
    
恢复,应该备份该数据文件,通过如下语句,可以查看数据库所有不可恢复的数据文件:
     RMAN>REPORT UNRECOVERABLE;


二、LIST

   1、列出数据文件备份集
      RMAN>LIST BACKUP OF TABLESPACE USER01;

   2、列出控制文件备份集
      RMAN>LIST BACKUP OF CONTROLFILE;
  
   3
、列出归档日志备份集
      RMAN>LIST BACKUP OF ARCHIVELOG ALL;

   4、列出SPFILE备份集
      RMAN>LIST BACKUP OF SPFILE;

   5、列出数据文件映像副本
     
可用LIST COPY OF DATABASE列出所有数据文件的映像副本;用LIST COPY OF TABLESPACE 列出特定表空间数据文件的映像副本;用 LIST COPY OF DATAFILE列出特定
      
数据文件的映像副本。
    
       RMAN>LIST COPY OF DATAFILE 5

   6、列出控制文件映像副本
       RMAN>LIST COPY OF CONTROLFILE
  
   7
、列出归档日志映像副本。
       RMAN>LIST COPY OF ARCHIVELOG ALL;

   8、列出数据库副本
     
每次使用RESETLOGS选项打开数据库之后都会生成一个新的数据库副本。
       RMAN>LIST INCARNATION OF DATABASE;


三、CROSSCHECK
  
该命令用于核对磁盘和磁带上的备份文件,以确保RMAN资料库与备份文件保持同步。该命令只会检查RMAN资料库所记载的备份文件。当执行CROSSCHECK命令时,如果资料库
  
记录不匹配于备份文件的物理状态,那么该命令会更新资料库记录的状态信息。当使用CROSSCHECK命令核对备份文件之后,备份文件的状态会包括AVALIABLEUNAVALIABLEEXPIRED 三种,
  
如果备份文件处于EXPIRED状态,则说明物理文件已经被手工删除或者损坏。注意,如果备份文件处于EXPIRED状态,应该使用DELETE命令删除该备份文件。
  
   1
、核对所有备份集
      RMAN>CROSSCHECK BACKUP;

   2、核对所有数据文件的备份集
      RMAN>CROSSCHECK BACKUP OF DATABASE;

   3、核对特定表空间的备份集
      RMAN>CROSSCHECK BACKUP OF TABLESPACE SYSTEM;

   4、核对特定数据文件的备份集
      RMAN>CROSSCHECK BACKUP OF DATAFILE 4;

   5、核对控制文件的备份集
      RMAN>CROSSCHECK BACKUP OF CONTROLFILE;

   6、核对SPFILE的备份集
      RMAN>CROSSCHECK BACKUP OF SPFILE;
  
   7
、核对归档日志的备份集
      RMAN>CROSSCHECK BACKUP OF ARCHIVELOG SEQUENCE 3;

   8、核对所有映像副本
      RMAN>CROSSCHECK COPY;

   9、核对所有数据文件的映像副本
      RMAN>CROSSCHECK COPY OF DATABASE;

   10、核对特定表空间的映像副本
      RMAN>CROSSCHECK COPY OF TABLESPACE USERS;

   11、核对特定数据文件的映像副本
       RMAN>CROSSCHECK COPY OF DATAFILE 4;

   12、核对控制文件的映像副本
        RMAN>CROSSCHECK COPY OF CONTROLFILE;

   13、核对归档日志的映像副本
       RMAN>CROSSCHECK COPY OF ARCHIVELOG SEQUENCE 4;


四、DELETE

    该命令用于删除RMAN备份记录及相应的物理文件

    1、删除陈旧备份
       RMAN>DELETE OBSOLETE;

    2、删除 EXPIRED 备份集
     
当使用OS命令删除了备份集对应的备份片文件后,如果执行CROSSCHECK命令核对备份集,那么会将该备份集标记为EXPIRED状态。
       RMAN>DELETE NOPROMPT EXPIRED BACKUP;

    3、删除EXPIRED副本
       RMAN>DELETE NOPROMPT EXPIRED COPY;      


    4
、删除特定备份集
      RMAN>DELETE NOPROMPT BACKUPSET 19;

    5、删除特定备份片
      RMAN>DELETE NOPROMPT BACKUPPIECE 'D:\BACKUP\DEMO_18.BAK';

    6、删除所有备份集
      RMAN>DELETE NOPROMPT BACKUP;

    7、删除特定映像副本
       RMAN>DELETE NOPROMPT DATAFILECOPY 'D:\BACKUP\DEM0_19.BAK';

    8、删除所有映像副本
       RMAN>DELETE NOPROMPT COPY;

    9、在备份后删除输入对象
      
当使用BACKUP命令备份归档日志或备份集时,在备份完成之后可以删除原有输入对象,示例如下:
       RMAN>BACKUP ARCHIVELOG ALL DELETE INPUT;
       RMAN>BACKUP BACKUPSET 22 FORMAT='D:\BACKUP\%u.BAK' DELETE INPUT;

五、CHANGE

   1、改变备份集状态
     
可用CHANGE BACKUPSET .. UNAVAILABLE/AVAILABLE 来改变一个备份集的状态。

      RMAN>CHANGE BACKUPSET 22 UNAVAILABLE

   2、改变映像副本状态
     
数据文件:CHANGE DATAFILECOPY .. AVAILABLE/UNAVAILABLE
     
控制文件:CHANGE CONTROLFILECOPY .. AVAILABLE/UNAVAILABLE
     
归档日志:CHANGE ARCHIVELOG .. AVAILABLE/UNAVAILABLE

      例如:
       RMAN>CHANGE DATAFILECOPY 'D:\BACKUP\DEMO_37.BAK' UNAVAILABLE;

   3、建立长期备份
     
长期备份是指被长期保留的备份文件,使用长期备份的目的是为了可以将数据库恢复到过去的特定时间点。当社顶了长期备份之后,RMAN会从设备冗余策略中
     
免除该备份文件,也就是说,长期备份文件不会被标记为陈旧备份。
     
命令:CHANGE .. KEEP/NOKEEP

      (1)使备份集156永久保留
         RMAN>CHANGE BACKUPSET 156 KEEP FOREVER LOGS;
      (2)
使备份集198保留60
         RMAN>CHANGE BACKUPSET 198 KEEP UNTIL TIME 'SYSDATE+60' LOGS;
      (3)
免除备份集156的保留期限
         RMAN>CHANGE BACKUPSET 156 NOKEEP

RMAN管理的备份与恢复

一、配置RMAN环境
    1.
配置自动通道
     
9i之前,当使用RMAN执行备份、转储和恢复操作时,必须手工分配通道,并指定相应参数配置,从9i开始,DBA可以将RMAN通道配置存放到RMAN资料库,从而使得
      RMAN
可以自动分配通道。但是,当执行特殊RMAN作业时,DBA仍然可以使用ALLOCATE CHANNEL覆盖默认通道配置。
      (1)
配置通道并行度。
        RMAN>CONFIGURE DEVICE TYPE DISK PARALLELISM 3
        RMAN>CONFIGURE DEVICE TYPE sbt PARALLELISM 3

      (2)
配置所有通道的备份文件格式。默认情况下,RMAN会自动为 DISK 分配一个通道,并且没有任何选项。通过配置自动通道,可以指定所有通道的备份文件格式。示例如下:
        RMAN>CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:\BACKUP\%d_%s_%p.bak';
     
      (3)
配置特定通道的备份文件格式。当配置自动通道时,如果不指定通道号,则会配置所有通道。如果要培植特定通道,则可以指定通道号。示例如下:
        RMAN>CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT 'D:\BACKUP\%d_%s_%p.bak';
      
        RMAN>CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT 'D:\BACKUP\%u.bak';

      (4)配置默认存储设备。默认情况下,RMAN的存储设备为DISK。通过配置默认存储设备,可以将默认存储设备配置为磁盘或者磁带。示例如下:
        RMAN>CONFIGURE DEFAULT DEVICE TYPE TO DISK;

RMAN>CONFIGURE DEFAULT DEVICE TYPE TO SBT;        

   2.配置备份集和备份片最大尺寸
    
通过配置备份集最大尺寸,可以将多哥文件的备份分布到多个备份集上。注意,当配置备份集最大尺寸时,必须确保其尺寸可以容纳最大数据文件的备份集体。示例如下:
     RMAN>CONFIGURE MAXSETSIZE TO 1G;
    
    
默认情况下,每个备份集只包含一个备份片文件,通过培植备份片的最大尺寸,可以将一个大的备份集划分为几个相对小的备份片文件,并将这些备份片文件分布到多个
    
设备上。示例如下:
     RMAN>CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 500M;

   3.配置备份优化
    
备份优化用于在某些情况下跳过特定文件的备份。如果摸个文件完全相同的备份已经存在,那么当激活备份优化时会跳过该文件。注意,备份优化只适用于BACKUP DATABASE
     BACKUP ARCHIVELOG ALL/LIKE
BACKUP BACKUPSET ALL命令。默认情况下,RMAN禁止备份优化。激活备份优化的示例如下:
     RMAN>CONFIGURE BACKUP OPTIMIZATION ON
   4.
配置多重备份
    
默认情况下,当使用RMAN执行备份操作时,只会生成一个备份片副本,为了生成多个备份片副本,可以配置多重备份。示例如下:
     RMAN>CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE TO 3;

   5.配置免除表空间
    
默认情况下,当执行BACKUP DATABASE命令时,会备份除了临时表空间外的所有表空间。如果某些表空间只是用于存放测试数据或者表空间变化很少,那么可以在备份数据库时
    
免除该表空间。
     RMAN>CONFIGURE EXCLUDE FOR TABLESPACE USER03;

   6.配置备份冗余策略
     RMAN>CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

   7.配置辅助例程的数据文件名。
    
当使用RMAN执行表空间时间点恢复(TSPITR)或复制数据库时,可能需要设置辅助例程的数据文件名。
     RMAN>CONFIGURE AUXNAME FOR DATAFILE 2 TO 'D:\AUXI\DF_2.DBF'

   8.配置快照控制文件名
     RMAN>CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\ORACLE\ORA10\snfcDEMO.ORA';

   9.
显示RMAN配置

     (1)显示所有RMAN配置
        RMAN>SHOW ALL;

     (2)显示默认设备类型
        RMAN>SHOW DEFAULT DEVICE TYPE;

     (3) 显示自动通道配置
         RMAN>SHOW CHANNEL FOR DEVICE TYPE DISK/sbt;

     (4) 显示备份冗余策略
         RMAN>SHOW RETENTION POLICY;
    
     (5)
显示备份优化
         RMAN>SHOW BACKUP OPTIMIZATION

     (6) 显示快照控制文件
         RMAN>SHOW SNAPSHOT CONTROLFILE NAME;

     (7) 显示备份集最大尺寸
         RMAN>SHOW MAXSETSIZE;

     (8) 显示多重备份
         RMAN>SHOW DATAFILE BACKUP COPIES

         RMAN>SHOW ARCHIVELOG BACKUP COPIES;

     (9) 清除RMAN配置(恢复默认)。示例如下:
         RMAN>CONFIGURE RETENTION POLICY CLEAR


二、RMAN备份

   1、命名格式匹配符

    %c:当生成多重备份时,用于指定备份片的副本
    %d:
用于指定数据库名
    %e:
用于指定归档日志序列号
    %p:
用于指定在备份集内备份片的编号
    %s:
用于指定备份集编号
    %N:
用于指定表空间的名称
    %f:
用语指定绝对文件号

    2、完全数据库备份集
    (1)
一致性备份。一致性备份是指在关闭了数据库之后备份所有数据文件和控制文件的方法,既可用于归档模式和非归档模式。
            RMAN>SHUTDOWN IMMEDIATE
            RMAN>STARTUP MOUNT
            RMAN>BACKUP DATABASE FORMAT='D:\BACKUP\%d_%s.dbf';
            RMAN>SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'
   
        (2)
非一致性备份
           RMAN>BACKUP DATABASE FORMAT='D:\BACKUP\%d_%s.dbf';
           RMAN>SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'
  
        (3)
免除表空间
           RMAN>CONFIGURE EXCLUDE FOR TABLESPACE USER03;
           RMAN>BACKUP DATABASE FORMAT='D:\BACKUP\%d_%s.dbf';
           RMAN>SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'

    3、表空间备份集
       
备份表空间只适用于归档模式,并且要求数据库必须处于OPEN状态。
           RMAN>BACKUP TABLESPACE USER03 FORMAT='D:\BACKUP\%N_%f_%s.dbf';

    4、数据文件备份集
      
备份数据文件既可以在OPEN状态下,也可以在MOUNT状态下。
       RMAN>BACKUP DATAFILE 5 FORMAT='D:\BACKUP\%N_%f_%s.dbf';
   
    5
、控制文件备份集
       RMAN>BACKUP CURRENT CONTROLFILE FORMAT='D:\BACKUP\%d_%s.dbf'
      
注意:当备份数据文件1时,会自动备份控制文件。当备份其他数据文件时,通过指定 INCLUDE CURRENT CONTROLFILE 选项可以同时备份控制文件,如:
       RMAN>BACKUP DATAFILE 5 FORMAT='D:\BACKUP\%d_%s.dbf' include current controlfile;

    6SPFILE备份集
       RMAN>BACKUP SPFILE FORMAT='D:\BACKUP\%d_%s.par';

    7、归档日志备份集
       RMAN>BACKUP FORMAT='D:\BACKUP\%d_%s.arc' ARCHIVELOG FROM TIME='SYSDATE-1' UNTIL TIME='SYSDATE';

    8、并行化备份集
       RMAN>CONFIGURE DEVICE TYPE DISK PARALLELISM 3;
       RMAN>BACKUP DATABASE FORMAT='D:\BACKUP\%d_%s.dbf';
       RMAN>CONFIGURE DEVICE TYPE DISK CLEAR;

    9、建立多重备份
      RMAN>BACKUP COPIES 3 TABLESPACE USERS FORMAT='D:\BACKUP\%N_%s.dbf','E:\BACKUP\%N_%s.DBF','F:\BACKUP\%N_%s.DBF'

    10、备份备份集
       RMAN>BACKUP BACKUPSET 32 FORMAT='D:\BACKUP\%d_%s.bak';

    11、建立多个备份片
      
当建立备份集时,默认情况下,每个备份集只包含一个备份片。如果磁带存储空间不组以存放一个备份集的单个备份片文件,则需要将备份集划分为几个小的备份
      
片文件,并且备份片的最大尺寸应该小于磁带尺寸。注意,当建立多个备份片时,必须要指定%p匹配符。
       RMAN>CONFIGURE CHANNEL DEVICE TYPE sbt MAXPIECESIZE 4G;
       RMAN>BACKUP DEVICE TYPE sbt FORMAT '%d_%s_%p.dbf' database;

    12、建立压缩备份集
       RMAN>BACKUP AS COMPRESSED BACKUPSET TABLESPACE USERS FORMAT='D:\BACKUP\%d_%s.dbf';

    13、备份数据文件和归档日志
       RMAN>BACKUP FORMAT 'D:\BACKUP\%d_%s.bak' tablespace user01 plus archivelog;

    14、指定备份集标记
       RMAN>BACKUP FORMAT 'D:\BACKUP\%d_%s.bak' tablespace users tag='users';

    15、建立映像副本
       (1)
建立数据文件映像副本
          RMAN>BACKUP AS COPY FORMAT='D:\BACKUP\DF_5.DBF' DATAFILE 5;
          RMAN>COPY DATAFILE 5 TO 'D:\BACKUP\DF_5.DBF'

       (2)建立控制文件映像副本
          RMAN>BACKUP AS COPY FORMAT='D:\BACKUP\DEMO.CTL' CURRENT CONTROLFILE;
          RMAN>COPY CURRENT CONTROLFILE TO 'D:\BACKUP\DEMO.CTL';

       (3)建立归档日志映像副本
          RMAN>BACKUP AS COPY FORMAT='D:\BACKUP\ARCHIVE\ARC20.LOG' ARCHIVELOG SEQUENCE 20;
          RMAN>COPY ARCHIVELOG 'D:\DEMO\ARCHIVE\ARC00020_0538067512.001' TO 'D:\BACKUP\ARCHIVE\ARC20.LOG'

       (4)并行化建立映像副本
          RMAN>CONFIGURE DEVICE TYPE DISK PARALLELISM 3;
          RMAN>BACKUP AS COPY FORMAT='D:\BACKUP\DF_%f.DBF' DATAFILE 5,5,7;
          RMAN>CONFIGURE DEVICE TYPE DISK CLEAR;

       (5)指定映像副本标记
          RMAN>BACKUP AS COPY FORMAT='D:\BACKUP\DF_%f.DBF' DATAFILE 5 TAG=DF_5;
          RMAN>COPY DATAFILE 5 TO 'D:\BACKUP\DF_%f.DBF' TAG=DF_5;
       

    16、建立增量备份和累积备份
       (1)
建立增量备份
          RMAN>BACKUP INCREMENTAL LEVEL 0 FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

   RMAN>BACKUP INCREMENTAL LEVEL 1 FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

   RMAN>BACKUP INCREMENTAL LEVEL 2 FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

       (2)建立累积备份
          RMAN>BACKUP INCREMENTAL LEVEL 0 FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

   RMAN>BACKUP INCREMENTAL LEVEL 2 FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

          RMAN>BACKUP INCREMENTAL LEVEL 2 cumulative FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

          RMAN>BACKUP INCREMENTAL LEVEL 1 FORMAT='D:\BACKUP\%d_%s.dbf' tablespace users;

    17、显示备份信息
        (1)V$ARCHIVED_LOG.
该动态性能视图用于显示所有归档日志映像副本的信息。
          SQL>select sequence#,name,first_change# from v$archived_log where status='A'

        (2)V$BACKUP_DATAFILE 该动态视图用于显示控制文件和数据文件的备份信息。通过在动态性能视图V$BACKUP_DATAFILE,V$BACKUP_PIECE之间进行连接查询,
          
可以显示特定数据文件的备份片文件信息。
           SQL>SELECT A.FILE#,B.HANDLE,A.BLOCKS*A.BLOCK_SIZE BYTE FROM V$BACKUP_DATAFILE A,V$BACKUP_PIECE B WHERE A.SET_STAMP=B.SET_STAMP AND B.STATUS='A';
       
        (3) V$BACKUP_REDOLOG
该动态性能视图用于显示归档日志备份集的信息,每个归档日志备份集可以包含一个或多个归档日志。通过在V$BACKUP_PIECE V$BACKUP_REDOLOG
           
之间进行连接查询,可以显示备份片文件所包含的归档日志备份信息。
            SQL>SELECT DISTINCT A.HANDLE,B.SEQUENCE#,B.FIRST_CHANGE#,B.BLOCKS FROM V$BACKUP_PIECE A,V$BACKUP_REDOLOG B WHERE A.SET_STAMP=B.SET_STAMP AND A.STATUS='A'

        (4)V$BACKUP_SET,V$BACKUP_PIECE, 前者用于显示备份集的详细信息,后者用于显示备份片的详细信息,通过在二者之间进行连接查询,可以显示备份集所对应的备份片的信息。
            SQL>SELECT B.HANDLE,A.BACKUP_TYPE,A.PIECES,A.ELAPSED_SECONDS FROM V$BACKUP_SET A,V$BACKUP_PIECE B WHERE A.SET_STAMP=B.SET_STAMP AND B.STATUS='A'


            
注意:handle用于表示备份片文件名,backup_type用于表示备份片类型(D: 数据文件完备份,I:数据文件增量备份, L:归档日志备份),pieces用于表示备份片个数,
                  elapsed_seconds
用于表示备份的总开销时间。

        (5)V$BACKUP_CORRUPTION 用于显示在执行BACKUP命令时所检测到的损坏数据块信息。
           SQL>SELECT FILE#,BLOCK#,BLOCKS,MARKED_CORRUPT FROM V$BACKUP_CORRUPTION;

(6)V$COPY_CORRUPTION 用于显示在执行COPY命令时所检测到的损坏数据块信息。
    SQL>SELECT FILE#,BLOCK#,BLOCKS,MARKED_CORRUPT FROM V$COPY_CORRUPTION;


三、RMAN恢复
    1
RMAN转储命令
    
     (1) RESTORE DATABASE
用于转储数据库的所有文件,当数据库的所有数据文件全部出现介质失败,或者执行不完全恢复时,应该使用该命令。
        
注意,该命令只能在MOUNT状态下使用。
  
     (2) RESTORE TABLESPACE
用于转储特定表空间的数据文件。如果某个表空间的所有数据文件全部出现介质失败,并且数据库处于OPEN状态,那么应该使用该命令
        
转储其所有数据文件。注意,该命令只能在OPEN状态下使用。

     (3)RESTORE DATAFILE。用于转储特定数据文件,该命令可以在MOUNT OPEN 状态下使用

     (4)RESTORE CONTROLFILE 用于转储控制文件,当执行基于控制文件的不完全恢复或者将数据库恢复到先前副本状态时,必须转储控制文件。
       
注意,该命令只能在NOMOUNT状态下使用。
    
     (5)RESTORE ARCHIVELOG
用于转储归档日志。当执行完全恢复和不完全恢复时,都需要应用归档日志。如果归档日志出现介质失败,或者归档日志映像副本不存在,
       
则需要使用该命令转储归档日志,该命令可在 MOUNT OPEN状态下使用。

     (6)RESTORE SPFILE
用语转储服务器参数文件,只能在 NOMOUNT 状态下使用。

     2RMAN恢复命令
    
     (1)RECOVER DATABASE
用于恢复数据库所有文件,只能在MOUNT状态下使用。

     (2)RECOVER TABLESPACE 用于恢复特定表空间的所有数据文件,只能在 OPEN 状态下使用。

     (3)RECOVER DATAFILE
用于恢复特定数据文件,可在OPEN AND MOUNT状态下使用。


     3
RMAN 完全恢复
     (1)
恢复数据库
         a)
所有数据文件丢失

          RMAN> STARTUP FORCE MOUNT
          RMAN>RUN{
          2>RESTORE DATABASE;
          3>RECOVER DATABASE;
          4>SQL 'ALTER DATABASE OPEN';
          5>}

        b) 数据文件所在磁盘出现硬件故障
         
如果数据文件所在磁盘出现硬件故障,数据文件将不能转储到原位置,为了恢复数据库,必须将数据文件转储到其他位置。在执行RESTORE DATABASE之前,通过
         
执行SET NEWNAME 命令可以为数据文件指定新的位置;在执行RESTORE DATABASE 命令之后,通过执行 SWITCH DATAFILE命令可以改变控制文件所记载的数据文件
         
位置和名称,在通过执行RECOVER DATABASE命令可以应用归档日志。
          RMAN>RUN{
          2>STARTUP FORCE MOUNT;
          3>SET NEWNAME FOR DATAFILE 1 TO 'E:\DEMO\SYSTEM01.DBF';
          4>SET NEWNAME FOR DATAFILE 2 TO 'E:\DEMO\UNDOTBS01.DBF';
          5>SET NEWNAME FOR DATAFILE 3 TO 'E:\DEMO\SYSAUX01.DBF';
          6>SET NEWNAME FOR DATAFILE 4 TO 'E:\DEMO\USERS01.DBF';
   7>RESTORE DATABASE;
          8>SWITCH DATAFILE ALL;
          9>RECOVER DATABASE;
          10>SQL 'ALTER DATABASE OPEN';
   11>}
       
         
在恢复并打开数据库后,通过REPORT SCHEMA 可以查看数据库新的物理方案
          RMAN>REPORT SCHEMA

    (2) 恢复SYSTEM表空间的数据文件
        
          a) SYSTEM
表空间的数据文件被误删除
             RMAN>RUN{
             2>STARTUP FORCE MOUNT;
             3>RESTORE DATAFILE 1;
             4>RECOVER DATAFILE 1;
             5>SQL 'ALTER DATABASE OPEN';
             6>}

           b)SYSTEM 表空间数据文件所在磁盘出现故障
             RMAN>RUN{
             2>STARTUP FORCE MOUNT;
             3>SET NEWNAME FOR DATAFILE 1 TO 'D:\DEMO\SYSTEM01.DBF';
             4>RESTORE DATAFILE 1;
             5>SWITCH DATAFILE 1;
             6>RECOVER DATAFILE 1;
             7>SQL 'ALTER DATABASE OPEN';
             8>}

     (3)OPEN状态下恢复关闭后意外丢失的数据文件

           a)数据文件被误删除
             RMAN>RUN{
             2>STARTUP FORCE MOUNT;
             3>SQL 'ALTER DATABASE DATAFILE 4 OFFLINE';
             4>SQL 'ALTER DATABASE OPEN';
             5>RESTORE DATAFILE 4;
             6>RECOVER DATAFILE 4;
             7>SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
             8>}

     b)数据文件所在磁盘出现损坏
             RMAN>RUN{
             2>STARTUP FORCE MOUNT;
             3>SQL 'ALTER DATABASE DATAFILE 4 OFFLINE';
             4>SQL 'ALTER DATABASE OPEN';
             5>SET NEWNAME FOR DATAFILE 4 TO 'D:\DEMO\USERS01.DBF';
             6>RESTORE DATAFILE 4;
             7>SWITCH DATAFILE 4;
             8>RECOVER DATAFILE 4;
             9>SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
      10>}

     (4)OPEN状态下恢复打开时意外丢失的数据文件
            
当数据库处于OPEN状态时,如果SYSTEM表空间的数据文件出现介质失败,那么会立即终止例程,此时需要在MOUNT状态下恢复其数据文件,如果在OPEN状态
            
下其他数据文件出现介质失败,则只有介质失败所涉及到的数据文件不能访问,而不影响其他数据文件。

             a)数据文件被误删除
              RMAN>RUN{
              2>SQL 'ALTER DATABASE DATAFILE 4 OFFLINE';
              3>RESTORE DATAFILE 4;
              4>RECOVER DATAFILE 4;
              5>SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
              6>}
  
             b)
数据文件所在磁盘出现故障
              RMAN>RUN{
              2>SQL 'ALTER DATABASE DATAFILE 4 OFFLINE';
              3>set newname for datafile 4 to 'd:\demo\users01.dbf';
              4>RESTORE DATAFILE 4;
              5>SWITCH DATAFILE 4
              6>RECOVER DATAFILE 4;
              7>SQL 'ALTER DATABASE DATAFILE 4 ONLINE';
              8>}

       (5)OPEN状态下恢复未备份的数据文件
            
前提:从建立数据文件到目前为止的所有归档日志必须存在。
      
             a)
数据文件被误删除
              
10G开始,如果数据文件备份不存在,转储数据文件时会自动建立数据文件。
               RMAN>RUN{
               2>STARTUP FORCE MOUNT;
               3>SQL 'ALTER DATABASE DATAFILE 7 OFFLINE';
               4>SQL 'ALTER DATABASE OPEN';
               5>RESTORE DATAFILE 7;
               6>RECOVER DATAFILE 7;
               7>SQL 'ALTER DATABASE DATAFILE 7 ONLINE';
               8>}

              b)数据文件所在磁盘出现故障
               RMAN>RUN{
               2>STARTUP FORCE MOUNT;
               3>SQL 'ALTER DATABASE DATAFILE 7 OFFLINE';
               4>SQL 'ALTER DATABASE OPEN';
               5>SET NEWNAME FOR DATAFILE 7 TO 'D:\DEMO\USERS04.DBF';
               6>RESTORE DATAFILE 7;
               7>SWITCH DATAFILE 7;
               8>RECOVER DATAFILE 7;
               9>SQL 'ALTER DATABASE DATAFILE 7 ONLINE';
               10>}

       (6)恢复表空间

              a)表空间全部数据文件被误删除
               RMAN>RUN{
               2>SQL 'ALTER TABLESPACE USERS OFFLINE FOR RECOVER';
               3>RESTORE TABLESPACE USERS;
               4>RECOVER TABLESPACE USERS;
               5>SQL 'ALTER TABLESPACE USERS ONLINE';
               6>}

               b)表空间数据文件所在磁盘出现故障
        RMAN>RUN{
               2>SQL 'ALTER TABLESPACE USERS OFFLINE FOR RECOVER';
               3>SET NEWNAME FOR DATAFILE 4 TO 'D:\DEMO\USERS01.DBF';
               4>RESTORE TABLESPACE USERS;
               5>SWITCH DATAFILE 4;
               6>RECOVER TABLESPACE USERS;
               7>SQL 'ALTER TABLESPACE USERS ONLINE';
               8>}

       (7) 数据块介质恢复
              
9i开始,使用BLOCKRECOVER命令可以恢复损坏的数据块,示例如下:
               RMAN>BLOCKRECOVER DEVICE TYPE DISK
               2>DATAFILE 5 BLOCK 21,48,128;

4RMAN 不完全恢复
     RMAN
不完全恢复只适用于归档模式,并且只能在MOUNT状态下完成。

     (1)基于时间恢复
        RMAN>RUN{
        2>STARTUP FORCE MOUNT;
        3>SET UNTIL TIME='2007-08-24 17:23:22';
        4>RESTORE DATABASE;
        5>RECOVER DATABASE;
        6>SQL 'ALTER DATABASE OPEN RESETLOGS';
        7>}

       RESETLOGS选项打开数据库后,会复位日志序列号,建议删除早期备份,并重新备份数据库,示例如下:
       RMAN>RUN{
       2>DELETE NOPROMPT BACKUP;
       3>DELETE NOPROMPT COPY;
       4>BACKUP DATABASE FORMAT='D:\BACKUP\%d_%s.bak';
       5>sql 'alter system archive log current';
       6>}

     (2)基于SCN恢复
        RMAN>RUN{
        2>STARTUP FORCE MOUNT;
        3>SET UNTIL SCN=511402;
        4>RESTORE DATABASE;
        5>RECOVER DATABASE;
        6>SQL 'ALTER DATABASE OPEN RESETLOGS';
        7>}

     (3)基于日志序列号恢复
RMAN>RUN{
        2>STARTUP FORCE MOUNT;
        3>SET UNTIL SEQUENCE=21;
        4>RESTORE DATABASE;
        5>RECOVER DATABASE;
        6>SQL 'ALTER DATABASE OPEN RESETLOGS';
        7>}

     (4)基于备份控制文件恢复
        c:\>set nls_date_format=yyyy-mm-dd hh24:mi:ss
        c:\>rman target nocatalog
        RMAN>STARTUP FORCE NOMOUNT
        RMAN>SET DBID=3282656886;
        RMAN>RESTORE CONTROLFILE FROM AUTOBACKUP MAXSEQ 6;
        RMAN>ALTER DATABASE MOUNT;
        RMAN>RUN{
        2>SET UNTIL TIME='2007-08-25 14:25:02';
        3>RESTORE DATABASE;
        4>RECOVER DATABASE;
        5>SQL 'ALTER DATABASE OPEN RESETLOGS';
        6>}

 

用户管理的备份与恢复

第一部分 备份
1.1
一致性备份
1.1.1
查询要备份的数据文件和控制文件
      select name from v$datafile
      union
      select name from v$contrilfile

1.2.2、关闭数据库
        1.2.3
拷贝所要备份的文件到备份目录

1.2 非一致性备份(只适用于归档模式)
        2.2.1
查询要备份的数据文件
               select name from v$datafile;

        2.2.2 将数据库设置为备份状态
               alter database begin backup
        2.2.3
拷贝数据文件到备份目录
    
        2.2.4
备份控制文件
               alter database backup controlfile to 'd:\controlfile.ctl';
2.2.5
结束数据库备份,为确保数据文件备份的同步性,还应该归档当前日志组
               alter database end backup
               alter system archive log current


1.3
备份表空间
        1.3.1
脱机备份
        a)
确定表空间所包含的数据文件
           select file_name from dba_data_files where tablespace_name='USERS';

b) 设置表空间为脱机状态
           alter tablespace users offline;

        c) 复制数据文件到备份目录

        d) 设置表空间为联机状态
           alter tablespace users online;

1.3.2 联机备份

         a)
确定表空间所包含的数据文件
           select file_name from dba_data_files where tablespace_name='USERS';

b) 设置表空间为备份模式
            alter tablespace users begin backup;

         c) 复制相应的数据文件到备份目录

d)
设置表空间为正常模式
            alter tablespace users end backup

1.4 处理联机备份失败
        
当执行联机备份时,如果出现例程失败,那么执行STARTUP启动数据库时,会显示
          ORA-01113:
文件4需要介质恢复
          ORA-01110:
数据文件4:'d:\demo\users01.dbf'
         
         
如上所示,如果数据文件仍然处于联机备份状态,那么在打开数据库时会显示错误信息,为了打开数据库,必须要结束这些数据
         
文件的联机备份,具体步骤如下:
         
   a)
装载数据库,为了结束数据文件的联机备份状态,首先需要装载数据库。
             startup force mount
  
          b)
确定处于联机备份状态的所有数据文件
             select file# from v$backup where status='ACTIVE';

          c)结束联机备份状态
           
如果存在多个数据文件处于联机备份状态,可使用如下命令结束联机备份状态
             ALTER DATABASE END BACKUP

            如果只有某个数据文件处于联机备份状态,那么可以使用如下命令结束联机备份
             ALTER DATABASE DATAFILE 4 END BACKUP
           
           
另外使用RECOVER命令也可以结束数据文件的联机备份状态
            RECOVER DATAFILE 4

1.5 备份只读表空间
           a)
确定处于READ ONLY状态下的表空间
             SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE STATUS='READ ONLY';

    b)确定只读表空间包含的数据文件
             SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME='QUERY'

    c)复制只读表空间的数据文件到备份目录。因为只读表空间的数据文件不会发生任何变化,所以可以直接备份。


1.6
备份控制文件
a)
建立控制文件副本
            alter database backup controlfile to 'd:\backup\ctlfile.ctl'

     alter database backup controlfile to 'd:\backup\ctlfile.ctl' REUSE  

b) 备份到跟踪文件
            alter database backup controlfile to trace;
           
           
确定跟踪文件名称:跟踪文件名称的格式为:_ora_.trc
    
确定跟踪文件的位置

     show parameter user_dump_dest

1.7 备份其他文件
      a)
备份归档日志
  
在归档模式下,物理恢复要用到归档日志,为确保恢复可以顺利进行,还应该备份归档日志,备份归档日志时,首先确定需要备份
         
的归档日志,然后复制到备份目录,示例如下:
          
          select name from v$archived_log where dest_id=1 and first_time>=sysdate-1 --
备份一天前的日志

          将对应的文件拷贝到备份目录即可.

      b) 备份参数文件
          create pfile ='d:\backup\pfilemydb.ora' from spfile='%ORACLE_HOME%\DATABASE\SPFILEMYDB.ORA'

      c) 备份口令文件
         
口令文件可以直接COPY到备份目录就行
        SQL>host copy %ORACLE_HOME%\DATABASE\PWDMYDB.ORA D:\BACKUP


第二部分 用户管理的完全恢复

2.1 转储数据文件到其他磁盘
    
当数据文件出现介质失败后,在执行SQL恢复命令之前,必须使用OS命令复制数据文件。如果数据文件被误删除,那么可以将备份文件
    
复制到原有目录;但如果数据文件所在磁盘出现损坏,那么必须将数据文件备份复制到其他磁盘。

     a) MOUNT状态下改变数据文件位置
ALTER DATABASE RENAME FILE 'D:\DEMO\USERS01.DBF' TO 'E:\DEMO\USERS01.DBF'
在此命令前,必须确保目标文件已经存在

     b) OPEN状态下改变数据文件的位置
       
在该状态下,既可以使用ALTER TABLESPACE RENAME DATAFILE 命令也可以使用 ALTER DATABASE RENAME FILE 命令改变数据文件位置。
        *
该状态下不能该表SYSTEM表空间的数据文件位置
        *
在修改数据文件位置之前,必须确保目标文件存在。
        *
在修改数据文件位置之前,必须先使表空间或数据文件脱机

        SQL>ALTER DATABASE DATAFILE 'D:\DEMO\USERS01.DBF' OFFLINE
SQL>HOST COPY d:\backup\users01.dbf e:\demo
        SQL>ALTER TABLESPACE USERS rename DATAFILE 'D:\DEMO\USERS01.DBF' TO 'E:\DEMO\USERS01.DBF'

2.2 完全恢复命令
       
当使用用户管理的完全恢复时,在将数据文件复制到目标路径之后,还需要使用RECOVER DATABASERECOVER TABLESPACE RECOVER DATAFILE
三种命令应用归档日志和重做日志。
      a)RECOVER DATABASE
       
该命令只能在MOUNT状态下运行,如果要在MOUNT状态下恢复数据文件,并且存在多个数据文件损坏,那么可以使用该命令进行恢复。示例如下:
SQL>RECOVER DATABASE

      b)RECOVER TABLESPACE
       
该命令只能在OPEN状态下运行,该命令用于恢复一个或多个表空间的所有数据文件,例如:
SQL>RECOVER TABLESPACE USERS,USERS2
     
      c) RECOVER DATAFILE
        
该命令可以在MOUNTOPEN状态下运行,当执行该命令时,既可指定数据文件名称,也可指定数据文件编号,例如:
         SQL>RECOVER DATAFILE 'D:\DEMO\USERS01.DBF'
         OR
         SQL>RECOVER DATAFILE 4,5

2.3 应用归档日志
      a)
使用ORACLE建议的归档日志位置
       
当执行完全恢复命令时,如果不指定归档位置,ORACLE会提供建议应用的归档日志,并显示提示信息。如下所示:
        SQL>RECOVER DATAFILE 5
       
      b)
指定归档日志位置
        
如果在默认位置下不存在归档日志,那么当执行完全恢复命令时,可以指定归档日志所在位置,示例如下:
         SQL>RECOVER FROM 'C:\ARCHIVELOG' DATAFILE 5
      c)
自动应该用归档日志
       
如果完全恢复所需的归档日志都存放在特定归档目录中,那么可以使服务器进程自动应用归档日志。
        SQL>RECOVER AUTOMATIC DATAFILE 5

2.4 查看恢复文件
     a)
列出需要恢复的数据文件
        select file#,error,change# from v$recover_file;

     b) 列出恢复要使用的归档日志
        select sequence#,archive_name from v$recovery_log;
       
2.5
恢复未备份的数据文件
     a)
查看需要恢复的文件
       select file#,error from v$recover_file;

     b)
使文件脱机
        alter database datafile 6 offline

     c)
打开数据库
        alter database open

     d)
重新建立数据文件
       
因为没有备份,所以需要重新创建一个数据文件
       
如果原文件所在磁盘没有损坏,则可以在原来位置建立数据文件副本,如下:
        SQL>ALTER DATABASE CREATE DATAFILE 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\TEST_TBS.DBF'

        如果原文件所在磁盘损坏,则需要在其他位置建立文件副本,如下:
        SQL>ALTER DATABASE CREATE DATAFILE 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\TEST_TBS.DBF' AS 'E:\ORADATA\MYDB\TEST_TBS.DBF'

      e) 恢复数据文件
       SQL>RECOVER DATAFILE 6

      f) 使数据文件联机
       SQL>ALTER DATABASE DATAFILE 6 ONLINE

第三部分 用户管理的不完全恢复

3.1 不完全恢复命令
     a)RECOVER DATABASE UNTIL TIME
      
该命令用于执行基于时间的不完全恢复,并且在指定时间点时必须要符合日期格式 YYYY-MM-DD HH24:MI:SS。当执行基于时间点
      
的不完全恢复时,必须确保在特定时间点之前的所有归档日志和重做日志全部存在。
      
     b)RECOVER DATABASE UNTIL CHANGE
      
该命令用于执行基于SCN的不完全恢复。当执行该命令时,必须确保在特定SCN之前的所有归档日志和重做日志全部存在。
  
     c)RECOVER DATABASE UNTIL CANCEL
      
该命令用于执行基于取消的不完全恢复,当执行该命令是,如果发现所需要的归档日志或重做日志不存在,那么指定CANCEL选项取消恢复。

     d)RECOVER DATABASE ... USING BACKUP CONTROLFILE
       
该命令用于执行基于备份控制文件的不完全恢复。在执行该命令之前,通过查看ALERT文件可以去顶误操作的时间点和SCN值,然后可以根据
时间点或SCN值进行恢复。

3.2 基于时间恢复
    a)
确认要恢复的时间点
    b)
关闭数据库
      
:为防止不完全恢复失败,在关闭数据库之前建议对数据库做完全备份

    c)装载数据库
      SQL>start mount

    d)复制所有数据文件备份。为了将数据库恢复到过去时间点,必须复制所有数据文件备份,并且备份文件的时间必须在恢复点之前。用如下语句可查看备份时间
      SQL>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;
    
    e)
执行 RECOVER DATABASE UNTIL TIME 命令
      SQL>RECOVER DATABASE UNTIL TIME '2007-08-24 17:25:10'

    f)RESETLOGS方式打开数据库
      SQL>alter database open resetlogs;

    g)备份数据库所有数据文件和控制文件。当以RESETLOGS方式打开数据库之后,会重新建立重做日志,清空原由重做日志的所有内容,
     
并将日志序列号复位为1,可以通过 ARCHIVE LOG LIST 查看当前日志序列号。
      SQL>ALTER DATABASE BEGIN BACKUP;
      SQL>HOST COPY D:\ORADATE\SYSTEM01.DBF E:\BACKUP
       ...
       ...
      SQL>ALTER DATABASE END BACKUP;
     
      SQL> ALTER DATABASE BACKUP CONTROLFILE TO 'E:\BACKUP\CTLFILE.CTL' REUSE;
      SQL>ALTER SYSTEM ARCHIVE LOG CURRENT; --
归档当前日志组


3.3
基于SCN恢复
     
基于SCN的恢复需要知道要恢复到的SCN号,假如要恢复到 SCN 号为 99999
     a)
关闭数据库
    
     b)
装载数据库
    
     c)
复制备份文件,备份文件的SCN值必须小于要恢复到的SCN值,复制数据备份文件后,可通过如下语句查看备份的SCN
       SQL>SELECT FILE#,CHANGE# FROM V$RECOVER_FILE;

     d)执行RECOVER DATABASE UNTIL CHANGE 命令执行完全恢复。
       SQL>RECOVER DATABASE UNTIL CHANGE 9999

     e)RESETLOGS方式打开数据库。
       SQL>ALTER DATABASE OPEN RESETLOGS;
  
     f)
备份数据库所有数据文件和控制文件。当以RESETLOGS方式打开数据库之后,会重新建立重做日志,清空原由重做日志的所有内容,
     
并将日志序列号复位为1,可以通过 ARCHIVE LOG LIST 查看当前日志序列号。
      SQL>ALTER DATABASE BEGIN BACKUP;
      SQL>HOST COPY D:\ORADATE\SYSTEM01.DBF E:\BACKUP
       ...
       ...
      SQL>ALTER DATABASE END BACKUP;
     
      SQL> ALTER DATABASE BACKUP CONTROLFILE TO 'E:\BACKUP\CTLFILE.CTL' REUSE;
      SQL>ALTER SYSTEM ARCHIVE LOG CURRENT; --
归档当前日志组

3.4 基于取消恢复
    
基于取消恢复是指将数据库恢复到特定日志序列号之前的状态,当因丢失归档日志或重做日志完全恢复失败时,可以使用这种恢复方法执行不完全
    
恢复。假定在日志序列号位10时数据文件USERS01.DBF出现了介质失败,并且在执行完全恢复时显示了如下错误信息:
     SQL>RECOVER DATAFILE 4
     ORA-00308:cannot open archived log 'd:\demo\archive\8_1_537902587.log'
     ORA-27041:unable to open file
     ODS-04002:unable to open file
     O/S-Error:(OS 2)
系统找不到指定的文件

     如上所示,错误原因是因为不能定位归档日志8_1_537902587.log。但是数据文件USERS01.DBF包含了非常重要的数据,并且该文件
    
必须恢复,在这样的情况下,可以使用基于取消的不完全恢复方法,尽可能降低损失,具体步骤如下:
     a)
关闭数据库

     b) 装载数据库

     c) 复制所有数据文件备份,当复制数据文件备份时,必须确保备份文件的SCN值小于要恢复到日志序列号的起始SCN值,复制文件之后,
       
可以通过如下语句查询备份文件的SCN值。
        SQL>select file#,change# from v$recover_file;

         通过如下语句,可以确定特定日志序列号对应的起始SCN值:
         SELECT MAX(FIRST_CHANGE#) FROM V$LOG_HISTORY WHERE SEQUENCE#=8;

      d)执行RECOVER DATABASE UNTIL CANCEL命令恢复数据库。
        SQL>RECOVER DATABASE UNTIL CANCEL
.....
        .....
       
       
如果归档日志在默认位置下存在,那么直接回车应用归档日志,遇到不存在的归档日志8_1_537902587.log时,输入CANCEL取消恢复。

      e)RESETLOGS方式打开数据库

      f)备份数据库所有数据文件和控制文件。当以RESETLOGS方式打开数据库之后,会重新建立重做日志,清空原由重做日志的所有内容,
     
并将日志序列号复位为1,可以通过 ARCHIVE LOG LIST 查看当前日志序列号。
      SQL>ALTER DATABASE BEGIN BACKUP;
      SQL>HOST COPY D:\ORADATE\SYSTEM01.DBF E:\BACKUP
       ...
       ...
      SQL>ALTER DATABASE END BACKUP;
     
      SQL> ALTER DATABASE BACKUP CONTROLFILE TO 'E:\BACKUP\CTLFILE.CTL' REUSE;
      SQL>ALTER SYSTEM ARCHIVE LOG CURRENT; --
归档当前日志组


3.5
基于备份控制文件恢复
    
基于备份控制文件恢复是指使用备份控制文件恢复数据库的过程。当误删了表空间或者数据库所有控制文件全部损坏时,可以使用这种
    
恢复方法。下面以模拟DBA用户误删表空间USERS为例。
   
     a)
因为当前控制文件没有包含该表空间的信息,所以必须使用备份控制文件恢复被误删除的表空间,通过查看ALERT文件,可以确定误删除
     
的时间。
   
     b)
关闭数据库

     c)复制所有数据文件和控制文件备份

     d) 装载数据库
      
当执行不完全恢复时,必须确保数据文件备份的时间点在恢复时间点之前,通过如下语句可以确定备份时间点:
       SQL>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;

     e) 执行RECOVER DATABASE ... USING BACKUP CONTROLFILE 命令。
     SQL> RECOVER DATABASE UNTIL TIME '2007-08-24 19:56:33' USING BACKUP CONTROLFILE

     f)RESETLOGS方式打开数据库。

     g)备份数据库所有数据文件和控制文件。当以RESETLOGS方式打开数据库之后,会重新建立重做日志,清空原由重做日志的所有内容,
     
并将日志序列号复位为1,可以通过 ARCHIVE LOG LIST 查看当前日志序列号。
      SQL>ALTER DATABASE BEGIN BACKUP;
      SQL>HOST COPY D:\ORADATE\SYSTEM01.DBF E:\BACKUP
       ...
       ...
      SQL>ALTER DATABASE END BACKUP;
     
      SQL> ALTER DATABASE BACKUP CONTROLFILE TO 'E:\BACKUP\CTLFILE.CTL' REUSE;
      SQL>ALTER SYSTEM ARCHIVE LOG CURRENT; --
归档当前日志组

第四部分 其他恢复问题

4.1 恢复控制文件
   
控制文件有如下几条使用原则:1、多元化控制文件。2、当数据库物理结构改变时备份控制文件
   
    a)
单个控制文件的介质失败。
     
多元化控制文件之后,多个控制文件互为镜像,内容完全一致,在其中一个文件出现失败时,只需要修改初始化参数control_files
     
去掉损坏的控制文件,增加新的控制文件,然后重新启动数据库。
     
如:OLD   control_files = d:\demo\control01.ctl,e:\demo\control02.ctl

          NEW   control_files = d:\demo\control01.ctl,f:\demo\control02.ctl

    b)所有控制文件的介质失败
     
所有控制文件全部损坏,为了使数据库可以重新使用,必须重建控制文件,尽管使用手工方法可以建立控制文件,但因为这种方法比较复杂,而且
     
容易出错,所以建议使用跟踪文件建立控制文件
      (1)
复制控制文件备份。如果初始化参数control_files只包含一个控制文件,那么只需要将控制文件备份复制到一个位置,如果包含多个控制文件,
        
那么需要将控制文件备份复制到每个相关位置。
   
      (2)
生成文本跟踪文件。
       SQL>STARTUP FORCE MOUNT
       SQL>ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS;

      (3)编辑文本跟踪文件。建立文本跟踪文件之后,该跟踪文件不仅包含了与恢复相关的SQL*PLUS 命令和 SQL命令,而且还包含了大量文本注释信息,为了执行与
        
恢复相关的SQL*PLUS命令和 SQL 命令,应该去掉注释信息,并将其内容保存到SQL脚本(例如:D:\BACKUP\CREATE.SQL) 编辑后的示例如下。
     STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "MYDB" NORESETLOGS ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 454
LOGFILE
   GROUP 1 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\REDO01.LOG' SIZE 10M,
   GROUP 2 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\REDO02.LOG' SIZE 10M,
   GROUP 3 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\REDO03.LOG' SIZE 10M
-- STANDBY LOGFILE
DATAFILE
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\SYSTEM01.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\UNDOTBS01.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\SYSAUX01.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\USERS01.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\USERSTBLSPACE.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\USER_A.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\USER_B.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\USER_C.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\USER_D.DBF',
   'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYDB\TEST.DBF'
CHARACTER SET ZHS16GBK
;
RECOVER DATABASE
        ALTER SYSTEM ARCHIVE LOG ALL;
        ALTER DATABASE OPEN;

      (4)关闭数据库
         SQL>SHUTDOWN IMMEDIATE
      (5)
恢复控制文件
      SQL>@D:\BACKUP\CREATE.SQL

   c) 恢复重做日志
      (1)
日志组的某个日志成员损坏
         
多元化重做日志的目的就是为了防止日志成员的介质失败,假定数据库包含三个日志组,每个日志组包含两个日子成员,并且同一个日志组的不同日志成员
         
分布在不同磁盘上,在这种情况下,如果某个日志组的一个日志成员出现介质失败,那么数据库仍然可以正常工作。
         
假如日志组1包含LOG1ALOG1B两个成员,如果LOG1A出现介质失败后,LGWR仍然可以将事务变化写入到成员LOG1B,从而使得数据库仍然可以正常运行,当日志组
         
的某个日志成员出现介质失败时,DBA可以删除损坏的日志成员,在数据库运行过程中,通过如下语句可以确定出现介质失败的日志成员:
          SQL>SELECT MEMBER FROM V$LOGFILE WHERE STATUS='INVALID'

      (2)删除介质失败的成员
如果出现介质失败的日志成员是当前日志组的日志成员,那么该日志成员将不能被删除,为了删除当前日志组的日志成员,必须手工切换日志,示例如下:
         SQL>ALTER SYSTEM SWITCH LOGFILE;
         SQL>ALTER DATABASE DROP LOGFILE MEMBER 'C:\DEMO\REDO01_2.LOG';

      (3)增加日志成员
         SQL>ALTER DATABASE ADD LOGFILE MEMBER 'C:\DEMO\REDO01_3.LOG' TO GROUP 1;
注:新增加的日志成员的状态也是 INVALID

   d) 非活动日志组的所有日志成员全部损坏
     
非活动日志组是指处于 INACTIVE 状态的日志组,当非活动日志组的所有日志成员全部出现介质失败时,如果数据库处于OPEN状态,那么当切换到该日志组时,数据库
     
将会处于等待状态,下面以在OPEN 状态和 CLOSE 状态下解决日志组鼓掌为例,说明非活动日志组损坏的处理方法。

      (1)
OPEN状态下非活动日志组的所有日志成员全部损坏
        
当数据库处于OPEN状态时,如果非活动日志组的所有日志成员全部出现介质失败,那么数据库仍然可以正常工作。当将来切换到该日志组时,因为其内容不能被
        
归档,所以LGWR会处于等待状态,为了使得LGWR可以继续工作,应该清除该日志组,示例如下:
         SQL>ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1; --
假如日志组1出现介质故障

* 当执行了以上命令之后,ORACLE回重新建立日志组1的所有成员,此时LGWR可以继续正常工作。但因为日志组内容没有被归档,所以会导致过去的数据文件备份
         
不能使用。

   e) 在关闭状态下非活动日志组的所有日志成员全部损坏
    
     
当在关闭状态下非活动日志组的所有日志成员出现介质失败时,可以增加新的日志组,删除原有日志组,然后打开数据库,示例如下:
      SQL>ALTER DATABASE ADD LOGFILE
        2 ('D:\DEMO\REDO04.LOG','D:\DEMO\REDO04_2.LOG')
        3 SIZE 10M;
      SQL>ALTER DATABASE DROP LOGFILE GROUP 1;--
删除损坏的日志组
      SQL>ALTER DATABASE OPEN;

   f) 当前日志组的所有日志成员全部损坏
     
当前日志组是指正在被LGWR写入事务变化的日志组。如果在OPEN状态下当前日志组所有成员全部出现介质失败,那么ORACLE会终止例程;如果在关闭状态下当前日志组
     
所有日志成员全部出现介质失败,那么数据库将不能打开。

      (1)在关闭状态下当前日志组所有成员全部损坏
        
当在关闭状态下当前日志组所有日志成员全部出现介质失败时,因为数据文件,控制文件都处于完全一致状态,所以只需要使用 RECOVER DATABASE UNTIL CANCEL 命令
        
执行基于取消的不完全恢复,然后用RESETLOGS选项打开数据库即可。示例如下:
         SQL>RECOVER DATABASE UNTIL CANCEL
         SQL>ALTER DATABASE OPEN RESETLOGS;

      (2)OPEN状态下当前日志组所有日志成员全部损坏
        
当处于OPEN状态下当前日志组的所有成员都出现介质失败,当LGWR将事物变化写入该日志组时,例程会自动关闭,并显示错误信息,当出现该情况时,在以特权
        
用户登陆之后,必须要使用数据文件备份、归档日志执行基于取消的不完全恢复。示例如下:
         SQL>STARTUP MOUNT
         SQL>HOST COPY D:\BACKUP\SYSTEM01.DBF D:\DEMO
         SQL>HOST COPY D:\BACKUP\SYSAUX01.DBF D:\DEMO
         ....
         ....
         ....

SQL>RECOVER DATABASE UNTIL CANCEL

SQL>ALTER DATABASE OPEN RESETLOGS;

    g) 恢复临时文件
      
当执行了不完全恢复或者用RESETLOGS选项打开数据库之后,会导致过去的临时文件不能使用。另外,当临时文件出现介质失败时,同样会导致临时文件不能使用。
      
当临时文件不能使用时,排序操作可能会失败,并显示如下错误信息
       ORA-25153
Temporary Tablespace is Empty

       此时只要为相应的临时表空间增加一个新的临时文件,然后重新执行相应操作即可,示例如下:
       SQL>ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\DEMO\TEMP.DBF' SIZE 10M REUSE;

 

阅读(1827) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~