zoukankan      html  css  js  c++  java
  • Oracle之RMAN备份及还原

    RMAN可以进行增量备份:数据库,表空间,数据文件

    只有使用过的block可以被备份成backup set

    表空间与数据文件对应关系:dba_data_files / v$datafile_header

    noarchivelog模式下,可以使用RMAN备份read-onlyoffline的表空间

    ORACLE RMAN停机备份:

    备份

    RMAN连接上ORACLE,WINDOWS下在命令模式下

    RMAN TARGET /

    连接本地数据库用的是本地认证模式。RMAN连接数据库必须在dedicate模式下。因此在share模式下的数据库应配置一个dedicate的连接用于RMAN连接。

    如果要把控制文件、参数文件也一起备份

    configure controfile autobackup on;//打开autobackup
    configure controfile autobackup off;//关闭autobackup
    关闭数据库
    RMAN>shutdown immediate
    mount 数据库RMAN的备份必须在MOUNT模式下,这也就是控制文件备份的重要。
    RMAN>startup mount
    最简单的备份
    RMAN>backup database
    就这一句就OK了
    这样的备份,备份集在数据库默认位置。%oracle_home%/ora92/database
    当然你也可以用run来灵活的定义你的备份。
    RMAN>run{
    >allocate chennel d1 type disk; //分配通道
    >backup full database //全备份数据库
    >include current controlfile //包括当前的controlfile
    >format 'e:oracleordersdb_%d_%s_%p_%t_%T'; //备份文件位置和文件名格式
    >release channel d1;//释放通道
    >}

    恢复
    1、数据文件损坏,而控制文件是好,或者已经恢复
    RMAN连上数据库
    startup mount
    restore database
    recover database noredo;
    alter database open resetlogs;
    recover database noredo该命令指示RMAN执行最后的恢复操作以准备打开这个数据库。因为是在NOARCHIVELOG模式下并且不应用任何归档的重做日志并且丢失了联机重做日志,所以要求在这条命令中使用noredo参数。

    最后使用alter database open resetlogs打开数据库。由于已经还原了控制文件并且需要重新构建重做日志,所以必须用resetlogs。
    2、还原控制文件
    startup nomount;
    set dbid = <dbid>
    restore controlfile from autobackup ;
    alter database mount;
    restore database;
    recover database noredo;
    alter database open resetlogs;
    alter database open;
    在这个例子中有一个DBID这个可以
    select * from v$database中查到。但是一个数据库在控制文件坏掉了不能OPEN如何能看的到呢这就在平时把这个DBID记下来。
    这是最简单的用RMAN备份与恢复的例子,但从中可以看到RMAN备份与恢复的梗概。

    ORACLE RMAN在线备份:

    1. ORACLE RMAN在线备份之前需要切换日志方式为归档日志;

    a. 关闭数据库
    SQL> shutdown immediate;

    b. 启动数据库到mount状态
    SQL> startup mount;

    c. 启用归档模式
    SQL> alter database archivelog;

    d. 查看修改后的数据库备份和恢复策略及归档文件的位置
    SQL> archive log list;

    注意:修改成archive模式之后,之前所有的数据库备份均无效。

    e. 修改相应的初始化参数
    Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。
    可用SQL> show parameter log_archive_start;查看
    NAME TYPE VALUE
    ------------------------------------ ----------- --------------
    log_archive_start boolean FALSE
    SQL> alter system set log_archive_start=true scope=spfile;
    重启数据库此参数生效,此时数据库处于自动归档模式。

    当然你也可以不做第5步,直接
    SQL>archive log start
    使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。

    2. 运行:RMAN target /

    3. RMAN信息保存:默认保存在control file中,保存周期7天

    调整:alter system set control_file_record_keep_time=天数;

    4. 搭建独立数据库保存RMAN备份信息

    由于只有一个数据库,就建在本身数据库上

    a. 创建表空间RC:create tablespace rc datafile size 10M autoextend on next 1M

    b. 创建用户RC:

    CREATE USER rc IDENTIFIED BY rc TEMPORARY TABLESPACE temp DEFAULT TABLESPACE rc QUOTA UNLIMITED ON rc;

    c. 授权RC: GRANT RECOVERY_CATALOG_OWNER TO rc;

    d. 搭建:

    rman catalog rc/rc@orcl

    RMAN>create catalog;

    RMAN>exit

    rman target / catalog rc/rc@orcl

    RMAN>register database;

    e. 使用:

    rman target / catalog rc/rc@orcl

    这种连接方式后,数据就会在控制文件和catalog各存一份

    5. 全局参数配置:

    查看:show all;

    修改:configure 参数名称 具体设置

    例如:修改是否自动保存control file:configure controlfile autobackup on;

    恢复默认值:configure 参数名称 clear;

    关键参数:

    a. 保存周期:retention policy

    默认是redundancy 1:保留一个备份;

    可用值:recovery window of 7 days:保留可以满足7天恢复周期的备份

    根据条件检查:report obsolete:RMAN会根据保存周期参数来列出可以删除的备份

    删除多于备份:delete obsolete

    b. 优化备份:backup optimization:RMAN会自动忽略已经备份过的内容(数据文件,归档日志,备份块)

    前提:备份指定同一个channel

    c. 默认备份渠道:default device type to disk:默认备份到磁盘,路径为flash recovery area

    渠道类型:

    disk:文件系统路径

    flash recovery area:默认路径

    sbt:磁带设备

    修改到磁盘其他路径:configure channel device type disk format '路径/%U';

    例如:configure channel device type disk format '/tmp/movedata/%U';

    6. 备份结果

    backupset:backup (as backupset) 备份内容,里面分割成一个或多个backup piece,只有该类型备份可以进行压缩。

    copy:backup as copy 备份内容

    按类型查看:

    backupset 查看:list backup summary(list backupset summary)

    查看详情:list backupset BS

    copy查看:list copy

    按内容查看:

    整个数据库:list backup of database;

    tablespace:list backup of tablespace users;

    数据文件:list backup of datafile n;

    控制文件:list backup of controlfile;

    归档日志:list archivelog all;

    按规则查看:

    查看根据保存规则可删除文件:report obsolete;

    查看根据保存规则需要备份内容:report

    RMAN和OS结合检查:corsscheck 内容;

    7. 备份方式

    full:全备;

    Incremental:增量备份

    可以增量备份的类型:数据库,数据文件,表空间

    a. 首先需要做level 0备份作为基础。例如:backup incremental level 0 备份内容;(备份内容:所有使用过的data block,和image copy不同)

    b. 增量类型:

    累计增量:backup cumulative level 1 备份内容;

    差异增量:backup incremental level 1 备份内容;

    区别:累计增量始终是基于level 0的备份;

    第一次差异增量是基于level 0的备份;从第二开始就是基于前一次增量备份

    c. Image备份增量方式:

    第一次:以Image全备为基础;

    第二次:基于全备,做增量备份;完成后合成成一个Image全备

    第三次:基于第二次的Image全备,做增量备份;完成后合成成一个Image全备

    实现:

    例如:针对tablespace example

    RUN {
    RECOVER COPY OF tablespace example WITH TAG 'incr_update';
    BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
    tablespace example;
    }

    d. 开启参数"block change tracking",可以提高速度

    查看状态:SELECT status FROM v$block_change_tracking;

    默认值:DISABLED

    开启:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;(默认存放路径OMF中的DB_CREATE_FILE_DEST)

    设置文件路径:

    ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/MYSID/rman_change_track.f' REUSE;

    关闭:ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

    备份并检查:bakcup check logical 备份内容;

    不备份只是检查文件:backup validate 备份内容;

    如果检查有报错,查看:v$backup_corruption;v$copy_corruption

    8. 备份内容:

    整个数据库: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;

    9. 还原

    a. 完全恢复

    方法一:从最近的备份集恢复整个数据库,数据库会自动运行redoarchive日志(完全恢复):

    SQL>shutdown immediate

    SQL>startup mount

    RMAN>restore database;

    RMAN>recover database;

    RMAN>sql 'alter database open';

    方法二:从tag恢复整个数据库,数据库也会运行redo archive 日志(完全恢复),结果与上面的脚本一样:

    1. 查看标签:

    RMAN> list backupset summary;
    Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
    ------- -- -- - ----------- --------------- ------- ------- ---------- ---
    25 B A A DISK 25-JUL-11 1 1 NO TAG20110725T104634
    28 B 0 A DISK 25-JUL-11 1 1 NO TAG20110725T104645
    29 B A A DISK 25-JUL-11 1 1 NO TAG20110725T104711
    30 B F A DISK 25-JUL-11 1 1 NO TAG20110725T104713
    31 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105333
    32 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105350
    33 B 1 A DISK 25-JUL-11 1 1 NO TAG20110725T105353
    34 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105408
    35 B F A DISK 25-JUL-11 1 1 NO TAG20110725T105411
    36 B A A DISK 25-JUL-11 1 1 NO TAG20110725T111403
    37 B 1 A DISK 25-JUL-11 1 1 NO TAG20110725T111405
    38 B A A DISK 25-JUL-11 1 1 NO TAG20110725T111421
    39 B F A DISK 25-JUL-11 1 1 NO TAG20110725T111423

    2. 还原数据库:

    SQL>shutdown immediate;
    SQL>startup mount;
    RMAN>restore database from tag TAG20110725T104645;

    RMAN> recover database from tag TAG20110725T104645;

    RMAN> alter database open;

    b. 不完全恢复:

    SQL>shutdown immediate;
    SQL>startup mount;
    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;
    注意:使用后所有的备份集都无效了,确保安全需要重新对数据库进行全备(ORACLE10G之后,resetlog之前的备份还是可以用的)

    关键表空间恢复(system / undotbs1 / sysaux):

    SQL>shutdown abort

    SQL>startup mount

    RMAN>restore tablespace 名字;

    RMAN>recover tablespace 名字;

    RMAN>sql 'alter database open';

    非关键表空间恢复(example / users ):

    select * from v$datafile_header; 表空间与数据文件对应关系

    SQL>alter database datafile 数字 offline;

    RMAN>restore tablespace 名字;

    RMAN>recover tablespace 名字;

    SQL>alter database datafile 数字 online;

    10. 删除备份

    所有backup备份集:delete backup;

    所有copy备份机:delete copy;

    特定备份机:delete backupset 19;

    删除根据保存规则可删除文件:delete obsolete;

    删除过期的备份:

    delete expired backupset;

    delete expired copy;

    11. RUN

    例如:

    RMAN> RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
    ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
    ALLOCATE CHANNEL c3 DEVICE TYPE sbt;
    BACKUP
    INCREMENTAL LEVEL = 0
    FORMAT '/disk1/backup/df_%d_%s_%p.bak'
    (DATAFILE 1,4,5 CHANNEL c1)
    (DATAFILE 2,3,9 CHANNEL c2)
    (DATAFILE 6,7,8 CHANNEL c3);
    ALTER SYSTEM ARCHIVE LOG CURRENT;
    }
    12. 外部变量:

    语言:set nls_lang=american

    日期:set nls_date_format=yyyy-mm-dd....

    13. RMAN sciprt

    前提条件:有catalog

    写法:(global表示可以由多个数据库调用)

    create global script 名

    comment "备注说明"

    {脚本内容}

    例如:

    create global script abc

    comment "test"

    {backup current controlfile;}

    调用:run {execute script 名}

    例如:run {execute script abc;}

    查看:print script 名

    改写:

    replace global script 名

    comment "备注说明"

    {脚本内容}

    删除:delete script 名;

    14. 永久保留备份

    条件是备份不能保留在flash recovery area中;

    a. 创建备份:

    RUN

    {
    ALLOCATE CHANNEL c1 DEVICE TYPE disk format '/tmp/autobackup/%U';
    BACKUP tablespace example;
    }

    b. 查找该备份:

    list backupset of tablespace example;

    c. 修改属性为永久

    change backupset 编号 keep forever nologs;

    15. 建立多个固定大小的备份

    例如:example 测试备份大小是大于50M

    run

    {

    allocate channel c1 device type disk maxpiecesize 10M format '/tmp/autobackup/%U';

    backup tablespace example;

    }

    /tmp/autobackup目录下有六个文件

    16.运行脚本:backup recovery area

    备份内容:

    a. control file autobackup;

    b. incremental backup sets

    17.block change tracking

    a. 针对整个数据库;

    b. 默认存放路径:background_dump_dest

  • 相关阅读:
    使用Emacs:生存篇
    编程之美:平面最近点对
    SOA体系结构之基础培训教程-大纲篇
    DNS:域名系统
    IIS7中 ASP.NET授权功能如何实现对静态文件的控制
    JVM内存管理学习总结(一)
    FMX中实现PostMessage的方法
    ddd
    4部门明确软件IC产业企业所得税优惠政策
    不要过分相信虚拟机,特别是网络连接方面
  • 原文地址:https://www.cnblogs.com/bigbean/p/4447887.html
Copyright © 2011-2022 走看看