RMAN备份相关知识与技能总结

来源:这里教程网 时间:2026-03-03 16:28:28 作者:

    相关知识点总结: 备份的定义及分类: 备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本,从不同的角度分类如下: 物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。 逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。

    从数据库的备份角度分类: 从数据库的备份角度,备份可以分为完全备份和增量备份和差异备份 完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。 增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。 差异备份:备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,因此只需要两份数据 恢复的定义及分类 恢复就是发生故障后,利用已备份的数据文件或控制文件,重新建立一个完整的数据库,恢复分为以下两种类型: 实例恢复:当oracle实例出现失败后,oracle自动进行的恢复 介质恢复:当存放数据库的介质出现故障时所作的恢复。介质恢复又分为完全恢复和不完全恢复 完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份并应用全部的重做日志做到的。 不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选项重设联机重做日志。

    备份恢复操作命令:1)备份及恢复数据库RMAN>backup database;RMAN>backup database plus archivelog delete input;RMAN>backup database FORMAT '$pwd/oradata/backup/rmanbak/%U';RMAN>run { allocate channel ch1 device type disk; backup database format '$pwd/oradata/backup/rmanbak/%U'; release channel ch1; }RMAN>restore database;RMAN>recover database;RMAN>alter database open(不完全恢复加参数resetlogs; 2)备份及恢复表空间或数据文件RMAN>backup tablespace users; RMAN>backup filesperset=3 tablespace users,system,sysaux;RMAN>run         {         allocate channel ch1 device type disk;         backup format '$pwd/oradata/backup/rmanbak/%U' (tablespaceusers,system,sysaux);         release channel ch1;         } run         {         sql 'alter tablespace users offline immediate';         restore tablespace users;         recover tablespace user;         sql 'alter tablespace users online';         }3)还原至特定备份集 RMAN>restore database from tag TAG20110725T104645; RMAN> recover database from tag TAG20110725T104645; RMAN> alter database open; 不完全恢复: RMAN>restore database from tag TAG20110725T104645; RMAN>recover database until time "to_date('2011-08-04 15:37:25','yyyy/mm/dd hh24:mi:ss')"; RMAN>alter database open resetlogs;

    查看RMAN的备份信息总结:

    查看备份成功的历史记录:
    SELECT * FROM V$RMAN_STATUS
     
    WHERE START_TIME >= TO_DATE(&START_TIME,'YYYY-MM-DD HH24:MI:SS')
     
      AND END_TIME   <= TO_DATE(&END_TIME  ,'YYYY-MM-DD HH24:MI:SS')
     
      AND OPERATION ='BACKUP'
     
      AND STATUS ='COMPLETED'

    查看所有备份集详细信息:

    SELECT A.RECID "BACKUP SET",
     
           A.SET_STAMP,
     
            DECODE (B.INCREMENTAL_LEVEL,
     
                    '', DECODE (BACKUP_TYPE, 'L', 'Archivelog', 'Full'),
     
                    1, 'Incr-1级',
     
                    0, 'Incr-0级',
     
                    B.INCREMENTAL_LEVEL)
     
               "Type LV",
     
            B.CONTROLFILE_INCLUDED "包含CTL",
     
            DECODE (A.STATUS,
     
                    'A', 'AVAILABLE',
     
                    'D', 'DELETED',
     
                    'X', 'EXPIRED',
     
                    'ERROR')
     
               "STATUS",
     
            A.DEVICE_TYPE "Device Type",
     
            A.START_TIME "Start Time",
     
            A.COMPLETION_TIME "Completion Time",
     
            A.ELAPSED_SECONDS "Elapsed Seconds",
     
            A.BYTES/1024/1024/1024 "Size(G)",
     
            A.COMPRESSED,
     
            A.TAG "Tag",
     
            A.HANDLE "Path"
     
       FROM GV$BACKUP_PIECE A, GV$BACKUP_SET B
     
      WHERE A.SET_STAMP = B.SET_STAMP AND A.DELETED = 'NO'
     
    RDER BY A.COMPLETION_TIME DESC;

    查找某个备份集中包含数据文件

    SELECT DISTINCT c.file#,A.SET_STAMP, D.NAME, C.CHECKPOINT_CHANGE#, C.CHECKPOINT_TIME
     
    FROM V$BACKUP_DATAFILE C, V$BACKUP_PIECE A, V$DATAFILE D
     
    WHERE A.SET_STAMP = C.SET_STAMP
     
        AND D.FILE# = C.FILE#
     
        AND A.DELETED='NO'
     
        AND c.set_stamp=&set_stamp
     
     ORDER BY C.FILE#;

    查询某个备份集中控制文件

    SELECT DISTINCT A.SET_STAMP,
     
                    D.NAME,
     
                    C.CHECKPOINT_CHANGE#,
     
                    C.CHECKPOINT_TIME
     
     FROM V$BACKUP_DATAFILE C, V$BACKUP_PIECE A, V$CONTROLFILE D
     
     WHERE A.SET_STAMP = C.SET_STAMP
     
       AND C.FILE# = 0
     
       AND A.DELETED = 'NO'
     
       AND C.SET_STAMP = &SET_STAMP;

    查看某个备份集中归档日志:

    SELECT DISTINCT B.SET_STAMP,
     
                    B.THREAD#,
     
                    B.SEQUENCE#,
     
                    B.FIRST_TIME,
     
                    B.FIRST_CHANGE#,
     
                    B.NEXT_TIME,
     
                    B.NEXT_CHANGE#
     
     FROM V$BACKUP_REDOLOG B, V$BACKUP_PIECE A
     
     WHERE A.SET_STAMP = B.SET_STAMP
     
       AND A.DELETED = 'NO'
     
       AND B.SET_STAMP = &SET_STAMP
     
     ORDER BY THREAD#, SEQUENCE#;

相关推荐