ORACLE RMAN的备份和还原

一、数据库备份与RMAN备份的概念

1.数据库完全备份:按归档模式分为归档和非归档
    归档模式
        打开状态,属于非一致性备份
        关闭状态,可以分为一致性和非一致性
    非归档模式
        打开状态,非一致性备份无效
        关闭状态,一致性备份,非一致性备份不被推荐
2.RMAN备份     
    RMAN使用服务器会话来完成备份操作,从RMAN客户端连接到服务器将产生一个服务器会话
    RMAN备份内容包括:整个数据库,表空间,数据文件,指定的数据文件,控制文件,归档日志文件,参数文件等

3.RMAN备份的类型
    完整备份(full) 或增量备份(incremental)
    热备(open)或冷备(closed),冷备时数据库必须处于mount状态,冷备可以分为一致性备份(consistent)或不一致性备份(inconsistent)

   * 完整备份
        一个或多个数据文件的一个完整副本,包含从备份开始处所有的数据块.完整备份不能作为增量的基础

    *增量备份
        包含从最近一次备份以来被修改或添加的数据块.可以分为差异增量备份和累计增量备份
        差异增量备份仅仅包含n级或n级以下被修改过的数据块。备份数据量小,恢复时间长。
        累计增量备份仅仅包含n-1级或n-1级以下被修改过的数据块。备份数据量大,恢复时间短。
        0级增量备份相当于一个完整备份,该备份包含所有已用的数据块文件,与完整备份的差异是完整备份不能用作级增量备份的基础

    *一致性备份
        备份所包含的各个文件中的所有修改都具备相同的系统变化编号(system change number,SCN)。
        也就是说,备份所包含的各个文件中的所有数据均来自同一时间点。
        一致性数据库完全备份(consis-tent whole database backup)进行还原(restore)后,不需要执行恢复操作(recovery)

    *非一致性备份
        在数据库处于打开(open)状态时,或数据库异常关闭(shut down abnormally)后,对一个或多个数据
        库文件进行的备份。非一致性备份需要在还原之后进行恢复操作

4.备份集与镜像副本
    备份集
        是包含一个或多个数据文件,归档日志文件的二进制文件的集合.备份集由备份片组成,一个备份集中可以包含一个或多个备份片
        可以通过filesperset参数来设置备份集中可包含的备份片数,
        也可以设定参数maxpiecesize来制定每个备份片的大小。
        备份集中空闲的数据块将不会被备份,因此备份集可以支持压缩。备份集支持增量备份,可以备份到磁盘或磁带。

    镜像副本
        是数据文件或归档日志文件等的完整拷贝,未经过任何压缩等处理,不能备份到磁带,也不支持增量备份
        恢复时可以立即使用实现快速恢复
        等同于操作系统的复制命令
        可以作为级增量备份

5.备份路径
    可以备份到磁盘目录
    可以备份到磁带
    闪回区

6.备份限制
    数据库必须处于mount或open状态
    不能备份联机日志
    在非归档模式下仅仅能作干净备份,即在干净关闭且启动到mount状态下备份,可以使用RMAN备份read-only和offline的表空间,表空间与数据文件对应关系:dba_data_files / v$datafile_header
    在归档模式下,current状态下数据文件可以备份

二、使用RMAN进行备份
1.备份数据库

    RMAN> show all;

    RMAN configuration parameters are:
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u01/app/oracle/rmanbak/df_%d_%U';# default
    CONFIGURE MAXSETSIZE TO UNLIMITED

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM ‘AES128’; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/10g/dbs/snapcf_orcl.f’; # defaul

    RMAN> backup database format '/u01/app/oracle/rmanbak/whole_%d_%U';  --备份整个数据库

    RMAN> backup as compressed backupset                       --备份整个数据库并压缩备份集
    2> database format '/u01/app/oracle/rmanbak/whole_%d_%U';

    RMAN> run{
    2> allocate channel ch1 type disk                          --手动分配一个通道
    3> maxpiecesize=2g;                                        --指定备份片的大小为2g
    4> backup as compressed backupset                          --压缩备份集
    5> format  '/u01/app/oracle/rmanbak/whole_%d_%U' filesperset=3--指定备份集中允许容纳的文件数为个
    6> database;
    7> release channel ch1;}                                   --释放通道

    RMAN> configure device type disk parallelism 3;   --将并行度改为

    old RMAN configuration parameters:
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
    new RMAN configuration parameters:
    CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
    new RMAN configuration parameters are successfully stored

    RMAN> backup as compressed backupset    --并行度改为之后,自动启用了个通道
    2> format '/u01/app/oracle/rmanbak/whole_%d_%U' filesperset=3
    3> database;

    Starting backup at 14-OCT-10
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=148 devtype=DISK    --sid值对应v$session视图中的sid
    allocated channel: ORA_DISK_2
    channel ORA_DISK_2: sid=146 devtype=DISK
    allocated channel: ORA_DISK_3
    channel ORA_DISK_3: sid=144 devtype=DISK

    RMAN> run{
    2> allocate channel ch1 type disk
    3> maxpiecesize=100m;   --备份片大小设置为m,则一个备份集包含多个备份片,且每个备份片大小为100m
    4> backup
    5> format '/u01/app/oracle/rmanbak/whole_%d_%U'
    6> database;
    7> release channel ch1;}

    RMAN> list backupset tag=TAG20101014T171115;

    List of Backup Sets
    ===================

    BS Key  Type LV Size       Device Type Elapsed Time Completion Time
    ------- ---- -- ---------- ----------- ------------ ---------------
    21      Full    690.30M    DISK        00:01:39     14-OCT-10
      List of Datafiles in backup set 21
      File LV Type Ckp SCN    Ckp Time   Name
      ---- -- ---- ---------- ---------- ----
      1       Full 1648791    14-OCT-10 /u01/app/oracle/oradata/orcl/system01.dbf
      2       Full 1648791    14-OCT-10 /u01/app/oracle/oradata/orcl/undotbs01.dbf
      3       Full 1648791    14-OCT-10 /u01/app/oracle/oradata/orcl/sysaux01.dbf
      4       Full 1648791    14-OCT-10 /u01/app/oracle/oradata/orcl/users01.dbf
      5       Full 1648791    14-OCT-10 /u01/app/oracle/oradata/orcl/example01.dbf
      6       Full 1648791    14-OCT-10 /u01/app/oracle/oradata/orcl/tbs1.dbf

      Backup Set Copy #1 of backup set 21
      Device Type Elapsed Time Completion Time Compressed Tag
      ----------- ------------ --------------- ---------- ---
      DISK        00:01:39     14-OCT-10      NO         TAG20101014T171115

        List of Backup Pieces for backup set 21 Copy #1
        BP Key  Pc# Status      Piece Name
        ------- --- ----------- ----------
        21      1   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_1_1
        22      2   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_2_1
        23      3   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_3_1
        24      4   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_4_1
        25      5   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_5_1
        26      6   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_6_1
        27      7   AVAILABLE   /u01/app/oracle/rmanbak/whole_ORCL_0nlqemtj_7_1

    BS Key  Type LV Size       Device Type Elapsed Time Completion Time
    ------- ---- -- ---------- ----------- ------------ ---------------
    22      Full    6.80M      DISK        00:00:01     14-OCT-10
            BP Key: 28   Status: AVAILABLE  Compressed: NO  Tag: TAG20101014T171115
            Piece Name: /u01/app/oracle/rmanbak/whole_ORCL_0olqen0s_1_1
      Control File Included: Ckp SCN: 1648817      Ckp time: 14-OCT-10
      SPFILE Included: Modification time: 14-OCT-10

-----------------------------------------------------------------------------------------------------------------------
2.备份数据文件
    Oracle数据文件及表空间的管理请参考:Oracle 表空间与数据文件
    RMAN> backup as copy datafile 4                                             --备份类型为镜像备份
    2> format '/u01/app/oracle/rmanbak/df_%d_%U';

    RMAN> list copy; 

    RMAN> backup datafile 4,5,6 format '/u01/app/oracle/rmanbak/df_%d_%U';      --备份类型为备份集

-----------------------------------------------------------------------------------------------------------------------
3.备份表空间
    Oracle数据文件及表空间的管理请参考:Oracle 表空间与数据文件

    RMAN>  backup tablespace users,example format '/u01/app/oracle/rmanbak/tb_%d_%U';

    RMAN> backup tablespace temp;  --临时表空间不需要备份

    Starting backup at 14-OCT-10
    using channel ORA_DISK_1
    using channel ORA_DISK_2
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of backup command at 10/14/2010 18:56:12
    RMAN-20202: tablespace not found in the recovery catalog
    RMAN-06019: could not translate tablespace name "TEMP"

-----------------------------------------------------------------------------------------------------------------------
4.备份控制文件
    Oracle 控制文件的详细介绍请参考:Oracle 控制文件(CONTROLFILE)

    RMAN> configure controlfile autobackup on;--自动备份控制文件置为on状态,将自动备份控制文件和参数文件

    old RMAN configuration parameters:
    CONFIGURE CONTROLFILE AUTOBACKUP OFF;
    new RMAN configuration parameters:
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    new RMAN configuration parameters are successfully stored

    注:在备份system01.dbf或system表空间时将会自动备份控制文件和参数文件,即使自动备份控制文件参数为off

    --单独备份控制文件及参数文件
    RMAN> backup current controlfile;

    --备份数据文件时包含控制文件
    RMAN> backup datafile 4 include current controlfile;

    RMAN> sql "alter database backup controlfile to ''/tmp/orclcontrol.bak''";

    sql statement: alter database backup controlfile to ''/tmp/orclcontrol.bak''

    RMAN>  sql "alter database backup controlfile to trace as ''/tmp/orclcontrol.sql''";

    sql statement: alter database backup controlfile to trace as ''/tmp/orclcontrol.sql''

    --单独备份spfile
    RMAN> backup spfile format '/u01/app/oracle/rmanbak/sp_%d_%U';

    RMAN> backup copies 2 device type disk spfile;

-----------------------------------------------------------------------------------------------------------------------
5.备份归档日志文件
    备份归档日志时仅仅备份归档过的数据文件(不备份联机重做日志文件)
    备份归档日志时总是对归档日志做完整备份
    RMAN对归档日志备份前会自动做一次日志切换,且从一组归档日志中备份未损坏的归档日志
    RMAN会自动判断哪些归档日志需要进行备份
    归档日志的备份集不能包含其它类型的文件

    关于Oracle日志文件请参考:Oracle 联机重做日志文件(ONLINE LOG FILE)
    关于Oracle归档日志请参考:Oracle 归档日志

    RMAN> backup
    2> format '/u01/app/oracle/rmanbak/lf_%d_%U'
    3> archivelog all delete input;   --delete input 删除所有已经备份过的归档日志

    RMAN> backup            --此种写法实现了上述相同的功能
    2> archivelog all delete input
    3> format '/u01/app/oracle/rmanbak/lf_%d_%U';

    RMAN>  backup archivelog sequence between 50 and 120 thread 1 delete input;

    RMAN> backup archivelog from time "sysdate-15" until time "sysdate-7";

    RMAN> backup
    2> format '/u01/app/oracle/rmanbak/lf_%d_%U'
    3> archivelog from sequence=80
    4> delete input;

    使用plus archivelog时备份数据库完成的动作(backup database plus archivelog)
        1.首先执行alter system archive log current 命令(对当前日志归档)
        2.执行backup archivelog all 命令(对所有归档日志进行备份)
        3.执行backup database命令中指定的数据文件、表空间等
        4.再次执行alter system archive log current
        5.备份在备份操作期间产生的新的归档日志

    --执行下面的命令,并观察备份列出的信息,可以看到使用plus archivelog时使用了上面描述的步骤来进行备份
    RMAN> backup database plus archivelog
    2> format  '/u01/app/oracle/rmanbak/lg_%d_%U' delete input;

6.备份闪回区

    RMAN> backup recovery area;
        使用backup recovery area时,将备份位于闪回区且未进行过备份的所有文件,这些文件包括完整、增量备份集、自动备份的
        控制文件(假定使用闪回区作为备份路径时)、归档日志、数据文件的镜像副本等。闪回日志,当前的控制文件。
        联机重做日志不会被备份

    RMAN> backup recovery files;
        使用backup recovery files时,将备份磁盘上未进行过备份的所有恢复文件,而不论是否位于闪回区

7.总结:
    数据文件的备份集对于未使用的块可以执行增量备份,可以跳过未使用过的数据块来进行压缩备份
    对于控制文件、归档日志文件、spfile文件则是简单的拷贝,并对其进行打包压缩而已

三、常用的rman备份操作
1. 备份内容:
整个数据库:RMAN>backup database;
经典整库备份:backup as compressed backupset database include current controlfile plus archivelog delete input;
tablespace:RMAN>backup tablespace 名字;
数据文件:RMAN>backup datafile n; (n:具体的数据文件编号select file_name,file_id,tablespace_name from dba_data_files;)
控制文件:RMAN>backup current controlfile;
或者RMAN>backup database include current controlfile;
日志文件:RMAN>backup archivelog all;
或者RMAN>backup database plus archivelog;
参数文件:RMAN>backup spfile;
2.按内容查看:
整个数据库:list backup of database;
tablespace:list backup of tablespace users;
数据文件:list backup of datafile n;
控制文件:list backup of controlfile;
归档日志:list archivelog all;
3. 删除备份
所有backup备份集:delete backup;
所有copy备份机:delete copy;
特定备份机:delete backupset 19;
删除根据保存规则可删除文件:delete obsolete;
删除过期的备份:
delete expired backupset;
delete expired copy;

四、备份练习
数据库起到归档模式
SYS@orcl>shutdown immediate;
SYS@orcl>startup mount;
SYS@orcl>alter database archivelog;

Database altered.
SYS@orcl>select log_mode from v$database;

LOG_MODE

ARCHIVELOG

练习前一定要做好全备
rman target /
RMAN>backup full format ‘/home/oracle/full_%T_%U’ database plus archivelog;

查看文件路径进行删除
SYS@orcl>select name from v$datafile;

NAME

/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf

删除文件(如果文件在其他路径有备份可以一起删除,重做日志除外)
[oracle@localhost ~] cd/u01/app/oracle/oradata/orcl/[oracle@localhostorcl] c d / u 01 / a p p / o r a c l e / o r a d a t a / o r c l / [ o r a c l e @ l o c a l h o s t o r c l ] ls
control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
[oracle@localhost orcl] rmrf.ctl[oracle@localhostorcl] r m − r f ∗ . c t l [ o r a c l e @ l o c a l h o s t o r c l ] rm -rf *.dbf
[oracle@localhost orcl] lsredo01.logredo02.logredo03.log[oracle@localhostorcl] l s r e d o 01. l o g r e d o 02. l o g r e d o 03. l o g [ o r a c l e @ l o c a l h o s t o r c l ] cd /u01/app/oracle/fast_recovery_area/orcl/
[oracle@localhost orcl] lscontrol02.ctl[oracle@localhostorcl] l s c o n t r o l 02. c t l [ o r a c l e @ l o c a l h o s t o r c l ] rm -rf c*
[oracle@localhost orcl] ls[oracle@localhostorcl] l s [ o r a c l e @ l o c a l h o s t o r c l ] cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
[oracle@localhost dbs]$ rm -rf spfileorcl.ora

YS@orcl>shutdown abort 关闭数据库并重启到mount状态

rman target /
RMAN> startup nomount;
RMAN> restore spfile from ‘/home/oracle/full_20180825_08tbeuaj_1_1’; home/oracle/有恢复文件,试一下哪一个是我在这里是/full_20180825_08tbeuaj_1_1
RMAN>shutdown abort;重启
RMAN>startup nomount;
RMAN> restore controlfile from ‘/home/oracle/full_20180825_08tbeuaj_1_1’;
RMAN>alter database mount;

RMAN> run
2> {restore database;
3> recover database ;
4> alter database open resetlogs;}

最后使用alter database open resetlogs打开数据库。由于已经还原了控制文件并且需要重新构建重做日志,所以必须用resetlogs。

重新备份数据库
delete noprompt backupset;
RMAN> backup full format ‘/home/oracle/full_%T_%U’ database plus archivelog;
startup 到这里就完全好啦

####################################
重做日志文件删除恢复比较困难
tablespace users
恢复表空间需要让该表空间处于脱机状态
alter tablespace users offline/online

引索表空间的恢复
[oracle@ccry ~] cd/u01/app/oracle/product/11.2.0/dbhome1/dbs/[oracle@ccrydbs] c d / u 01 / a p p / o r a c l e / p r o d u c t / 11.2.0 / d b h o m e 1 / d b s / [ o r a c l e @ c c r y d b s ] rm -rf orapworcl
[oracle@ccry dbs]$ orapwd file=orapworcl password=oracle force=y ignorecase=y

在rman恢复的时候,如果spfile 和pfile 都丢失的情况下,且没开启controlfile autobackup,就需要先恢复spfile,然后在恢复控制文件,因为spfile和pfile中control_files记录了控制文件恢复到什么位置的信息。如果开启控制文件自动备份的时候,会自动备份spfile,这时候就只需restore controlfile from autobackup。

参考文章:
http://blog.itpub.net/31529748/viewspace-2153300/
https://blog.csdn.net/dba_miracle/article/details/20706589

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值