zoukankan      html  css  js  c++  java
  • rman备份恢复总结

    Recovery Manager(RMAN)是一种用于备份(backup)、还原(restore)和恢复(recover)
    数据库的Oracle 工具.RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据
    库或数据库部件,如表空间、数据文件、控制文件、归档文件以及Spfile参数文件。RMAN
    也允许您进行增量数据块级别的备份,增量RMAN备份是时间和空间有效的,因为他们只备
    份自上次备份以来有变化的那些数据块。而且,通过RMAN提供的接口,第三方的备份与恢
    复软件如veritas将提供更强大的备份与恢复的管理功能。
    通过RMAN,也提供了其它更多功能,如数据库的克隆、采用RMAN建立备用数据库、
    利用RMAN备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。9i的RMAN通过
    增强的自动配置与管理功能,以及特有的块级别的恢复,将使备份与恢复工作变得更加快捷
    与完美。9i的RMAN有如下特征特性:
    ·自动的备份与恢复
    ·方便的备份归档日志
    ·自动检测新的数据文件
    ·支持增量备份
    ·最大限度的减少备份与恢复的错误
    ·减少恢复的时间
    ·在热备份中不会产生额外的redo日志
    ·腐烂数据块的自动检测·并行的备份与恢复操作
    ·在线备份时,表空间不用置于备份模式
    可以看到,在以上的一些特性中,显示了RMAN强大的功能与好处,以上功能的实现,
    是因为RMAN是块级别的备份与恢复,备份与恢复发生在数据库块级别,可以通过比较数据
    块而获得一致性的数据块,可以避免备份没有用过的块,可以检验块是否腐烂等块级别的问
    题。

       在使用rman备份分为使用恢复目录和不使用恢复目录两种形式,如果使用恢复目录,那恢复目
    录最好建另外一台机器上才更有意义,因为如果同生产库建在一起了,当此机器出现故障时,恢
    复目录数据库可以也无法使用,那么rman就不能得到先前的备份信息了,也就不能进行恢复了。
       下面介绍不使用恢复目录的备份与恢复方法,由于没有使用恢复目录那么相关的备份信息将保
    存在控制文件中,所以配置rman为自动备份控制文件,每次执行backup时就自动备份一个控制文
    件,默认保存在/opt/ora9/product/9.2.0.4/dbs/ 也可更改备份位置。
    启动控制文件自动备份configure controlfile autobackup on;
    设置自动备份控制文件格式configure controlfile autobackup format for device type disk
    to '/backup/cf_%F'
    设置备份优化configure backup optimization on;
    自动备份控制文件默认保存路径/opt/ora9/product/9.2.0.4/dbs/

    连连接数据库
    rman>connect target / 或 rman target /
    备份数据库
    RMAN> run {
    2> allocate channel dev1 type disk;
    3> backup
    4> format '/tmp/hotbak/bak'
    5> database;
    6> release channel dev1;
    7> }
    备份表空间
    RMAN> run {
    2> allocate channel dev1 type disk;
    3> backup
    4> format '/tmp/hotbak/tablespace_users'
    5> tablespace users;
    6> release channel dev1;
    7> }

    备份单独数据文件
    RMAN> run {
    2> allocate channel dev1 type disk;
    3> backup
    4> format '/tmp/hotbak/datafile_users'
    5> datafile '/opt/ora9/oradata/oradb/users01.dbf';
    6> release channel dev1;
    7> }

    备份控制文件
    RMAN> run {
    2> allocate channel dev1 type disk;
    3> backup
    4> format '/tmp/hotbak/controlfile'
    5> (current controlfile);
    6> release channel dev1;
    7> }

    恢复表空间
    rman target / nocatalog
    RMAN> startup mount
    RMAN> restore tablespace users;
    RMAN> recover tablespace users;
    RMAN> exit

    Datafile recovery 数据文件恢复
            RMAN> run {
           2> allocate channel dev1 type disk;
           3> sql "alter tablespace users offline immediate";
           4> restore datafile 4;
           5> recover datafile 4;
           6> sql "alter tablespace users online";
           7> release channel dev1;
           8> }
    恢复控制文件

    rman>startup nomount;
    rman>set dbid=2347671489
    rman>restore controlfile from autobackup 或 rman>restore controlfile from
    '/opt/arch/ct_c-2347671489-20060630-00'
    rman>alter database open resetlogs;
    RMAN> startup mount;
    恢复数据库
    RMAN> restore database;
    RMAN> recover database;
    RMAN>alter database open resetlogs;
    恢复完毕。

       上面从恢复控制文件开始,讲述的是,只要你有数据库的备份文件和备份时控制文件,才可以
    进行恢复,就算重装也可以。
    再说几个rman常用命令:
    list backup 查看备份信息
    List backup summary 查看备份汇总信息
    List backup of datafile ‘file name’
    list incarnation of database;   查看具体的备份信息
    Crosscheck命令
    检查磁盘或磁带上的备份或拷贝是否正确,并更新备份或者拷贝的状态
    Crosscheck backup;
    Crosscheck archivelog all;
    Delete [noprompt] expired backup命令删除过期备份
    也可以用List来查看相应的报告
    LIST EXPIRED BACKUP;
    LIST EXPIRED BACKUP SUMMARY;
    Delete 命令
    Delete命令可以用来删除指定的备份或者用来删除废弃或者是过期的备份集
    如删除指定的备份集与备份片
    RMAN> DELETE BACKUPPIECE 101;
    RMAN> DELETE CONTROLFILECOPY '/tmp/control01.ctl';
    RMAN> DELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt;
    删除过期或者废弃了的备份
    RMAN> DELETE EXPIRED BACKUP;
    RMAN> DELETE NOPROMPT OBSOLETE;
    RMAN> DELETE OBSOLETE REDUNDANCY = 3;
    RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS;
    删除指定的备份归档
    RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300;
    再贴几个备份脚本:
    全库备份脚本:
    #!/bin/sh
    date=`date +%Y%m%d`
    export ORACLE_BASE=/opt/ora9
    export ORACLE_HOME=/opt/ora9/product/9.2.0.4
    export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
    export ORACLE_OWNER=oracle
    export ORACLE_SID=oradb
    export ORACLE_TERM=xterm
    export LD_ASSUME_KERNEL=2.4.19
    export THREADS_FLAG=native
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    /opt/ora9/product/9.2.0.4/bin/rman target / <<EOF
    run {
    backup
    tag 'dbfull'
    format '/tmp/dbfull%u_%s_%p_%T'
    database;
    }
    exit;
    EOF
    rm /opt/arch/* -rf
    下面为增量备份脚本,增量备份分为0级,1级,2级,0级为基础备份,1级为0级增量,恢复时
    恢复0级,再恢复1级,oracle9i增量备份也要进行全库扫描,oracle10G在这方面有专门的改善。
    增量备份的好处是减小备份文件大小,但同样也增加恢复时的时间和复杂度,我更加适合数据量
    特别的数据库。
       
    0级备份脚本
    #!/bin/sh
    date=`date +%Y%m%d`
    export ORACLE_BASE=/opt/ora9
    export ORACLE_HOME=/opt/ora9/product/9.2.0.4
    export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
    export ORACLE_OWNER=oracle
    export ORACLE_SID=oradb
    export ORACLE_TERM=xterm
    export LD_ASSUME_KERNEL=2.4.19
    export THREADS_FLAG=native
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    /opt/ora9/product/9.2.0.4/bin/rman target / <<EOF
    run {
    backup
    incremental level 0
    tag 'db0'
    format '/tmp/db0%u_%s_%p_%T'
    database;
    #plus archivelog
    #delete all input;
    }
    exit;
    EOF
    rm /opt/arch/* -rf

    1级备份
    #!/bin/sh
    date=`date +%Y%m%d`
    export ORACLE_BASE=/opt/ora9
    export ORACLE_HOME=/opt/ora9/product/9.2.0.4
    export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
    export ORACLE_OWNER=oracle
    export ORACLE_SID=oradb
    export ORACLE_TERM=xterm
    export LD_ASSUME_KERNEL=2.4.19
    export THREADS_FLAG=native
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    /opt/ora9/product/9.2.0.4/bin/rman target / <<EOF
    run{
    backup
    incremental level 1
    tag 'db1'
    format '/tmp/db1%u_%s_%p_%T'
    database;
    #plus archivelog
    #delete all input;
    }
    exit;
    EOF
    如果出现故障,恢复的方法参考上面的就可以了,把相应该的备份文件控制文件和归档日志都
    放在相对的位置就可以进恢复了。

    1、切换服务器归档模式,如果已经是归档模式可跳过此步:    %sqlplus /nolog (启动sqlplus)
        SQL> conn / as sysdba (以DBA身份连接数据库)
        SQL> shutdown immediate; (立即关闭数据库)
        SQL> startup mount (启动实例并加载数据库,但不打开)
        SQL> alter database archivelog; (更改数据库为归档模式)
        SQL> alter database open; (打开数据库)
        SQL> alter system archive log start; (启用自动归档)
        SQL> exit (退出)
        2、连接:
        %rman [email=target=rman/rman@mydb]target=rman/rman@mydb[/email] (启动恢复管理器)
        3、基本设置:
        RMAN> configure default device type to disk; (设置默认的备份设备为磁盘)
        RMAN> configure device type disk parallelism 2; (设置备份的并行级别,通道数)
        RMAN> configure channel 1 device type disk fromat '/backup1/backup_%U'; (设置备份的文件格式,只适用于磁盘设备)
        RMAN> configure channel 2 device type disk fromat '/backup2/backup_%U'; (设置备份的文件格式,只适用于磁盘设备)
        RMAN> configure controlfile autobackup on; (打开控制文件与服务器参数文件的自动备份)
        RMAN> configure controlfile autobackup format for device type disk to '/backup1/ctl_%F'; (设置控制文件与服务器参数文件自动备份的文件格式)
        4、查看所有设置:
        RMAN> show all
        5、查看数据库方案报表:
        RMAN> report schema;
        6、备份全库:
        RMAN> backup database plus archivelog delete input; (备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志)
        7、备份表空间:
        RMAN> backup tablespace system plus archivelog delete input; (备份指定表空间及归档的重做日志,并删除旧的归档日志)
        8、备份归档日志:
        RMAN> backup archivelog all delete input;
        9、复制数据文件:
        RMAN> copy datafile 1 to '/oracle/dbs/system.copy';
        10、查看备份和文件复本:
        RMAN> list backup;
        11、验证备份:
        RMAN> validate backupset 3;
        12、从自动备份中恢复服务器参数文件:
        RMAN> shutdown immediate; (立即关闭数据库)
        RMAN> startup nomount; (启动实例)
        RMAN> restore spfile to pfile '/backup1/mydb.ora' from autobackup; (从自动备份中恢复服务器参数文件)
        13、从自动备份中恢复控制文件:
        RMAN> shutdown immediate; (立即关闭数据库)
        RMAN> startup nomount; (启动实例)
        RMAN> restore controlfile to '/backup1' from autobackup; (从自动备份中恢复控制文件)

    13、恢复和复原全数据库:
        RMAN> shutdown immediate; (立即关闭数据库)
        RMAN> exit (退出)
        %mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak (将数据文件重命名)
        %mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak (将数据文件重命名)
        %mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak (将数据文件重命名)
        %mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak (将数据文件重命名)
        %rman [email=target=rman/rman@mydb]target=rman/rman@mydb[/email] (启动恢复管理器)
        RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydb.ora (指定初始化参数文件启动数据库)
        RMAN> restore database; (还原数据库)
        RMAN> recover database; (恢复数据库)
        RMAN> alter database open; (打开数据库)
        14、恢复和复原表空间:
        RMAN> sql 'alter tablespace users offline immediate'; (将表空间脱机)
        RMAN> exit (退出恢复管理器)
        %mv /oracle/dbs/users01.dbf /oracle/dbs/users01.bak (将表空间重命名)
        %rman [email=target=rman/rman@mydb]target=rman/rman@mydb[/email] (启动恢复管理器)
        RMAN> restore tablespace users; (还原表空间)
        RMAN> recover tablespace users; (恢复表空间)
        RMAN> sql 'alter tablespace users online'; (将表空间联机)
        15、增量备份与恢复:
        第一天的增量基本备份:
        RMAN> backup incremental level=0 database plus archivelog delete input;
        第二天的增量差异备份:
        RMAN> backup incremental level=2 database plus archivelog delete input;
        第三天的增量差异备份:
        RMAN> backup incremental level=2 database plus archivelog delete input;
        第四天的增量差异备份:
        RMAN> backup incremental level=1 database plus archivelog delete input;
        第五天的增量差异备份:
        RMAN> backup incremental level=2 database plus archivelog delete input;
        第六天的增量差异备份:
        RMAN> backup incremental level=2 database plus archivelog delete input;
        第七天的增量差异备份:
        RMAN> backup incremental level=0 database plus archivelog delete input;
        增量恢复:
        RMAN> shutdown immediate;
        RMAN> exit
        %mv /oracle/dbs/tbs_12.f /oracle/dbs/tbs_12.bak
        %mv /oracle/dbs/tbs_13.f /oracle/dbs/tbs_13.bak
        %mv /oracle/dbs/tbs_14.f /oracle/dbs/tbs_14.bak
        %mv /oracle/dbs/tbs_15.f /oracle/dbs/tbs_15.bak
        %rman [email=target=rman/rman@mydb]target=rman/rman@mydb[/email]
        RMAN> startup pfile=/oracle/admin/mydb/pfile/initmydb.ora
        RMAN> restore database;
        RMAN> recover database;
        RMAN> alter database open.(e129)on.htm
        simulator/doc/license_keys.htm
        simulator/doc/sdk.style.css
        simulator/doc/davehitzforeword.htm
        simulator/doc/faq.htm
        simulator/doc/troubleshooting.htm
        simulator/license.htm
        simulator/readme.htm
        simulator/runsim.sh
        simulator/setup.sh
        simulator/sim.tgz

  • 相关阅读:
    dom4j读写XML文件
    Spring的javaMail邮件发送(带附件)
    PayPal网站付款标准版(for PHP)
    SpringMVC整合TaskExecutor线程池的配置/使用
    SELECT INTO和INSERT INTO SELECT(SQL Server)
    java简单的数据库查询(SQLServer数据库)
    oracle导入TYPE对象报错ORA-02304
    mysql将字符串转化为数字
    asp.net应用发布到IIS无法链接到oracle数据库
    使用js获取数组中最大、最小的数字
  • 原文地址:https://www.cnblogs.com/einyboy/p/2511618.html
Copyright © 2011-2022 走看看