当前位置:  数据库>oracle

基于Linux下 Oracle 备份策略(RMAN)

    来源: 互联网  发布时间:2017-04-04

    本文导语: 对于 Oracle 数据库的备份与恢复,尽管存在热备,冷备以及逻辑备份之外,使用最多的莫过于使用RMAN进行备份与恢复。而制定RMAN备份策略则是基于数据库丢失的容忍程度,即恢复策略来制定。在下面的备份策略中,给出的是一...

对于 Oracle 数据库的备份与恢复,尽管存在热备,冷备以及逻辑备份之外,使用最多的莫过于使用RMAN进行备份与恢复。而制定RMAN备份策略则是基于数据库丢失的容忍程度,即恢复策略来制定。在下面的备份策略中,给出的是一个通用的备份策略。在该备份策略中,使用了catalog方式来保持备份脚本以及备份信息。在实际环境中应根据具体的情况对此进行相应的调整。

 

一、步骤

    1.确认备份可用空间以及备份路径,根据需要创建相应文件夹

   

    1.对于账户的连接创建一个connect.rcv,该文件包含连接到target 和catalog信息

   

    2.创建通用的脚本用于删除过旧的备份和备份控制文件以及备份归档日志

        global_del_obso      --删除过旧的备份

        global_bkctl         --备份控制文件

        global_arch          --备份归档日志

   

    3.创建0,1,2级增量备份

        这三个脚本中均包含第2步的3个脚本,先调用global_del,然后做增量备份,最后备份归档日志global_arch和控制文件global_bkctl

       

    4.创建inc0.rcv,inc1.rcv,inc2.rcv

        文件内容包含调用 @@//connect.rcv以及run{execute global script scriptname;}exit;

       

    5.编辑第4步的三个文件分别为inc0.sh,inc1.sh,inc2.sh

        nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc1.rcv log=/u03/bk/scripts/inc0.log append &

   

    6.使用crontab制定备份计划   

 

二、具体实现

    演示环境:

        系统:            CentOS release 4.6 (Final) + Oracle 10g

        目标数据库:      austin

        恢复目录数据库:   david

        备份目录:        /u03/bk

        连接脚本所在路径:/u03/bk/scripts

        注:监听需要配置好且已启动

   

    1.连接脚本

        connect.rcv文件内容

            connect catalog rman/rman@david;

            connect target sys/oracle@austin;

        catalog的通用脚本

            rman cmdfile=/u03/bk/scripts/connect.rcv --(在rman中使用外部脚本)

            rman catalog rman/rman@david target sys/oracle@austin   --使用该脚本连接后创建通用脚本

 

    2.建立通用脚本

        --删除不必要的备份

            RMAN> create global script global_del_obso  comment 'A script for obsolete backup and delete it' {

            2> crosscheck archivelog all;

            3> delete noprompt expired archivelog all;

            4> allocate channel ch1 device type disk;

            5> delete noprompt obsolete recovery window of 7 days; 

            6> release channel ch1;

            7> }

       

        --备份控制文件脚本

            RMAN> create global script global_bkctl comment 'A script for backup control file'{

            2> allocate channel ch1 device type disk;

            3> backup as compressed backupset

            4> current controlfile reuse

            5> format='/u03/bk/backupctl.ctl'

            6> tag='bkctl';

            7> release channel ch1;

            8> }

       

        --备份归档日志脚本

            RMAN> create global script global_arch comment "backup archivelog and then delete it" {

            2> allocate channel ch1 device type disk;

            3> allocate channel ch2 device type disk;

            4> sql "alter system archive log current";    --归档当前的联机日志

            5> set limit channel ch1 readrate=10240;        --(读取速率10M)            

            6> set limit channel ch1 kbytes=4096000;        --(备份片的大小)   

            7> backup as compressed backupset

            8> format='/u03/bk/arch_%d_%U'

            9> tag='bkarch'

            10> archivelog all delete input;

            11> release channel ch1;

            12> release channel ch2;

            13> }

       

        --使用list查看所有的已建立的全局脚本

            list global script names;               --(列出所有的脚本)

            delete globals script script_name;      --(删除脚本)

           

            RMAN> list global script names;

 

            List of Stored Scripts in Recovery Catalog

                        

                Global Scripts

                        

                   Script Name

                   Description

                   -----------------------------------------------------------------------

                   global_arch

                   backup archivelog and then delete it

           

                   global_bkctl

                   A script for backup control file

            

                   global_del_obso

                   A script for obsolete backup and delete it

   

    3.创建0,1,2级增量备份脚本(注:每个脚本备份前会执行删除过旧的备份,脚本尾部会调用另外两个脚本来备份归档日志及控制文件)

        --创建0级增量备份

            RMAN> create global script global_inc0 comment "backup database as incrmental level 0"{

            2> execute global script global_del_obso;

            3> allocate channel ch1 device type disk;

            4> allocate channel ch2 device type disk;

            5> set limit channel ch1 readrate=10240;

            6> set limit channel ch1 kbytes=4096000;

            7> set limit channel ch2 readrate=10240;

            8> set limit channel ch2 kbytes=4096000;

            9> backup as compressed backupset

            10> incremental level 0 database

            11> format='/u03/bk/inc0_%d_%U'

            12> tag='inc0';

            13> release channel ch1;

            14> release channel ch2;

            15> execute global script global_arch;

            16> execute global script global_bkctl;

            17> }

           

        --创建1级增量备份       

            RMAN> create global script global_inc1 comment "backup database as incrmental level 1"{

            2> execute global script global_del_obso;

            3> allocate channel ch1 device type disk;

            4> allocate channel ch2 device type disk;

            5> set limit channel ch1 readrate=10240;

            6> set limit channel ch1 kbytes=4096000;

            7> set limit channel ch2 readrate=10240;

            8> set limit channel ch2 kbytes=4096000;

            9> backup as compressed backupset

            10> incremental level 1 database

            11> format='/u03/bk/inc1_%d_%U'

            12> tag='inc1';

            13> release channel ch1;

            14> release channel ch2;

            15> execute global script global_arch;

            16> execute global script global_bkctl;

            17> }

 

        --创建2级增量备份       

            RMAN> create global script global_inc2 comment "backup database as incrmental level 2"{

            2> execute global script global_del_obso;

            3> allocate channel ch1 device type disk;

            4> allocate channel ch2 device type disk;

            5> set limit channel ch1 readrate=10240;

            6> set limit channel ch1 kbytes=4096000;

            7> set limit channel ch2 readrate=10240;

            8> set limit channel ch2 kbytes=4096000;

            9> backup as compressed backupset

            10> incremental level 2 database

            11> format='/u03/bk/inc2_%d_%U'

            12> tag='inc2';

            13> release channel ch1;

            14> release channel ch2;

            15> execute global script global_arch;

            16> execute global script global_bkctl;

            17> }

       

        --在rman中检验在rman中写的脚本global_inc0、global_inc1、global_inc2,因为RMAN不会自动检查,下面的语句用来执行脚本(检验)

            RMAN> run{

            2> execute global script global_inc0;

            3> execute global script global_inc1;

            4> execute global script global_inc2;

            5> }

       

        --查看备份完成情况

            list backupset summary;

 

    4.建立shell脚本,让linux自动执行脚本

        a. vi inc0.rcv,inc1.rcv ,inc2.rcv   --注意不同的文件执行不同的备份脚本

            @@/u03/bk/scripts/connect.rcv       --(rman下的脚本去调用其他脚本用@@符号)(调用脚本不需要分号)

            run{

            execute global script gloal_inc0;

            }

            exit;

    

        b. 编辑shell文件   

            vi inc0.sh

                nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc0.rcv log=/u03/bk/scripts/inc0.log append &

            vi inc1.sh

                nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc1.rcv log=/u03/bk/scripts/inc0.log append &

            vi inc2.sh

                nohup  $ORACLE_HOME/bin/rman  cmdfile=/u03/bk/scripts/inc2.rcv log=/u03/bk/scripts/inc0.log append &

       

            --注意:nohup与&表示将脚本放入后台执行

    

        c.使用crontab建立一个备份计划

        crontab -e  

            #min    hour    date  mon  day(星期)    command

            30        1      *     *    0           /u03/bk/scripts/inc0.sh

            30        1      *     *    1           /u03/bk/scripts/inc2.sh

            30        1      *     *    2           /u03/bk/scripts/inc2.sh

            30        1      *     *    3           /u03/bk/scripts/inc2.sh

            30        1      *     *    4           /u03/bk/scripts/inc1.sh

            30        1      *     *    5           /u03/bk/scripts/inc2.sh

            30        1      *     *    6           /u03/bk/scripts/inc2.sh

       

        d.重启crontab服务(如果没有启动)

            # /sbin/service crond status  --用于检查crontab 服务状态

            # /sbin/service crond stop //关闭服务

            # /sbin/service crond restart //重启服务

            # /sbin/service crond reload //重新载入配置

           

            使crontab服务在系统启动的时候自动启动:

                在/etc/rc.d/rc.local这个脚本的末尾加上:

                /sbin/service crond start

 

        e.从上面的备份策略来看,即

            周日执行0级增量备份,相当于全备

            周一,周二,周三执行2级增量备份

            周四执行1级增量备份

            周五,周六执行2级增量备份

   

        f.编辑好的shell 脚本测试

            chmod 755 *.sh         --给shell脚本加权限

            测试脚本  例如./inc0.sh

       

三、总结

    1.backup controlfile in each scripts tail (在脚本的尾部备份控制文件)

    2.Delete obsolete backupset in each scripts threshold (删除旧的备份)

    3.Switch logfile before backup database; (在数据库备份以前切换日志,备份联机重做日志)

    4.Chmod u+x*.sh


    
 
 

您可能感兴趣的文章:

  • 大家备份windows98用ghost 估计就用得很多了, 请问linux可不可以ghost 备份? 还有linux 的资源管理器在哪里? 我想打开我原来的硬盘F
  • linux装好了要做那些shell程序做备份呢?
  • 如何实现linux邮件服务器上邮件的备份?
  • 请教老师:linux系统大家是如何备份的啊?
  • Linux 系统备份工具 Back In Time
  • Linux备份工具 Deja Dup
  • Linux备份方案询问
  • linux如何 备份系统
  • 请教ghost备份linux分区!有大大知道的请告知~谢谢~
  • 在线等:我想备份我的LINUX系统,有何方法啊!GHOST行吗?还原后LINUX还能启动吗?
  • linux 备份
  • linux小白提问linux备份oracle数据库的问题
  • 如何用tar备份整个linux系统
  • Linux 如何加快 dd 命令备份的速度呢?
  • g4l备份LINUX系统的问题!
  • clonezilla-live备份LINUX使用问题
  • 如何将Aix上的oracle 物理备份 然后再在linux 系统上还原oracle
  • 送分:LINUX 下如何实现双机的备份和同步?
  • 在LINUX 系统里面 如何让MYSQL自动备份
  • 能不能用ghost备份linux?
  • 请问操作系统中任务调度主要有哪些策略,LINUX用哪种啊??实时操作系统又有哪些任务调度哪些策略啊??
  • 关于公网上的linux服务器安全策略控制
  • Linux安全策略 SELinux
  • linux cpu调度策略中的老化公式
  • 设计一个Linux的存储策略,求思路
  • 请教Linux内存分配策略与Windows有何异同?
  • 生产环境中大家的linux系统telnet,ssh等登陆的安全策略如何搞得?
  • Oracle商业数据库对Linux的策略是什么
  • linux多线程数据共享策略问题?
  • 中小异构Linux网络安全策略
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下安装oracle后使用命令行启动的方法 linux启动oracle
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • Linux系统下Oracle的启动与Oracle监听的启动
  • 在linux 中如何删除oracle db 与卸载oracle.
  • 那里有免费的oracle odbc driver for linux?或怎么破解easysoft oracle odbc driver安装包?急
  • XP Oracle客户端进入Linux Oracle服务端
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • 在Red Hat Linux 9 和 Oracle 9.2 环境下,如何配制字符集,让Oracle能存入并显示日语里的假名?
  • 红帽Linux表示Oracle提供Linux支持是不完美的
  • Linux+Oracle学习笔记
  • Linux下的Oracle安装问题(非常问题)
  • Linux安装oracle,菜鸟急用!
  • 我载了oracle8i_linux81701.tar 在linux下解包,怎么是乱码啊?
  • Linux平台下Oracle 密码文件重建
  • Suse linux使用oracle问题
  • Linux系统下利用java连接Oracle 10G
  • 在Linux下安装ORACLE
  • Gartner:Oracle的Linux 可以先用后买
  • Oracle终于涉入支持Linux操作系统了
  • 想在linux下学习oracle,有经验的高手们给点建议。
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3