RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉。对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选。本文提供了一个简单易用的基于linux shell下的RMAN备份脚本供参考。大家可根据自己的需要进行适当调整。

RMAN备份相关方面的知识较多,可以参考:
    RMAN 概述及其体系结构    RMAN 配置、监控与管理    RMAN 备份详解    RMAN 还原与恢复    RMAN catalog 的创建和使用    基于catalog 创建RMAN存储脚本    基于catalog 的RMAN 备份与恢复    RMAN 备份路径困惑    
其次是对于shell脚本中调用sql,rman语句可以参考
  Linux/Unix shell 脚本中调用SQL,RMAN脚本 
  Linux/Unix shell sql 之间传递变量 
    
下面是脚本的具体内容

    1. ##===========================================================
    2. ##   db_bak_rman.sh
    3. ##   created by Robinson
    4. ##   2011/11/07
    5. ##   usage: db_bak_rman.sh <$ORACLE_SID> <$BACKUP_LEVEL>
    6. ##          BACKUP_LEVEL:
    7. ##             F: full backup
    8. ##             0: level 0
    9. ##             1: level 1
    10. ##============================================================
    11. #!/bin/bash
    12. # User specific environment and startup programs
    13. if [ -f ~/.bash_profile ];
    14. then
    15. . ~/.bash_profile
    16. fi
    17. ORACLE_SID=${1};                              export ORACLE_SID
    18. RMAN_LEVEL=${2};                              export RMAN_LEVEL
    19. TIMESTAMP=`date +%Y%m%d%H%M`;                 export TIMESTAMP
    20. DATE=`date +%Y%m%d`;                          export DATE
    21. RMAN_DIR=/u02/database/${ORACLE_SID}/backup/rman;   export RMAN_DIR
    22. RMAN_DATA=${RMAN_DIR}/${DATE};                export RMAN_DATA
    23. #RMAN_LOG=$RMAN_DATA/log;                     export RMAN_LOG
    24. RMAN_LOG=/u02/database/${ORACLE_SID}/backup/rman/log  export RMAN_LOG
    25. # Check rman level
    26. #======================================================================
    27. if [ "$RMAN_LEVEL" == "F" ];
    28. then  unset INCR_LVL
    29. BACKUP_TYPE=full
    30. else
    31. INCR_LVL="INCREMENTAL LEVEL ${RMAN_LEVEL}"
    32. BACKUP_TYPE=lev${RMAN_LEVEL}
    33. fi
    34. RMAN_FILE=${RMAN_DATA}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP};       export RMAN_FILE
    35. SSH_LOG=${RMAN_LOG}/${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}.log;      export SSH_LOG
    36. MAXPIECESIZE=4G;                                                export MAXPIECESIZE
    37. #Check RMAN Backup Path
    38. #=========================================================================
    39. if ! test -d ${RMAN_DATA}
    40. then
    41. mkdir -p ${RMAN_DATA}
    42. fi
    43. echo "---------------------------------" >>${SSH_LOG}
    44. echo "   " >>${SSH_LOG}
    45. echo "Rman Begin  to Working ........." >>${SSH_LOG}
    46. echo "Begin time at:" `date` --`date +%Y%m%d%H%M` >>${SSH_LOG}
    47. #Startup rman to backup
    48. #=============================================================================
    49. $ORACLE_HOME/bin/rman log=${RMAN_FILE}.log <<EOF
    50. connect target /
    51. run {
    52. CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
    53. CONFIGURE BACKUP OPTIMIZATION ON;
    54. CONFIGURE CONTROLFILE AUTOBACKUP ON;
    55. CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${RMAN_FILE}_%F';
    56. ALLOCATE CHANNEL 'ch1' TYPE DISK maxpiecesize=${MAXPIECESIZE};
    57. ALLOCATE CHANNEL 'ch2' TYPE DISK maxpiecesize=${MAXPIECESIZE};
    58. set limit channel ch1 readrate=10240;
    59. set limit channel ch1 kbytes=4096000;
    60. set limit channel ch2 readrate=10240;
    61. set limit channel ch2 kbytes=4096000;
    62. CROSSCHECK ARCHIVELOG ALL;
    63. DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
    64. BACKUP
    65. #AS COMPRESSED BACKUPSET
    66. ${INCR_LVL}
    67. DATABASE FORMAT '${RMAN_FILE}_%U' TAG '${ORACLE_SID}_${BACKUP_TYPE}_${TIMESTAMP}';
    68. SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    69. BACKUP ARCHIVELOG ALL FORMAT '${RMAN_FILE}_arc_%U' TAG '${ORACLE_SID}_arc_${TIMESTAMP}'
    70. DELETE  INPUT;
    71. DELETE NOPROMPT OBSOLETE;
    72. RELEASE CHANNEL ch1;
    73. RELEASE CHANNEL ch2;
    74. }
    75. sql "alter database backup controlfile to ''${RMAN_DATA}/cntl_${BACKUP_TYPE}.bak''";
    76. exit;
    77. EOF
    78. RC=$?
    79. cat ${RMAN_FILE}.log >>${SSH_LOG}
    80. echo "Rman Stop working @ time:"`date` `date +%Y%m%d%H%M` >>${SSH_LOG}
    81. echo >>${SSH_LOG}
    82. echo "------------------------" >>${SSH_LOG}
    83. echo "------ Disk Space ------" >>${SSH_LOG}
    84. df -h >>${SSH_LOG}
    85. echo >>${SSH_LOG}
    86. if [ $RC -ne "0" ]; then
    87. echo "------ error ------" >>${SSH_LOG}
    88. else
    89. echo "------ no error found during RMAN backup peroid------" >>${SSH_LOG}
    90. rm -rf ${RMAN_FILE}.log
    91. fi
    92. #Remove old backup than 3 days
    93. #============================================================================
    94. RMDIR=${RMAN_DIR}/`/bin/date +%Y%m%d -d "3 days ago"`;   export RMDIR
    95. echo >>${SSH_LOG}
    96. echo -e "------Remove old backup than 3 days ------\n" >>${SSH_LOG}
    97. if test -d ${RMDIR}
    98. then
    99. rm -rf ${RMDIR}
    100. RC=$?
    101. fi
    102. echo >>${SSH_LOG}
    103. if [ $RC -ne "0" ]; then
    104. echo -e "------ Remove old backup exception------ \n" >>${SSH_LOG}
    105. else
    106. echo -e "------ no error found during remove old backup set peroid------ \n" >>${SSH_LOG}
    107. fi
    108. exit
    109. oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql> ./db_bak_rman.sh GOBO1 0
    110. RMAN> RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15>
    111. 16> 17> 18> 19> 20> 21> 22> 23> 24> RMAN> RMAN>
    112. oracle@SZDB:~/robinson/scripts/dba_scripts/custom/sql>
    113. oracle@SZDB:/u02/database/GOBO1/backup/rman> ls
    114. 20120928  log
    115. oracle@SZDB:/u02/database/GOBO1/backup/rman/20120928> ls
    116. cntl_lev0.bak                             GOBO1_lev0_201209281421_arc_4onmb9ro_1_1
    117. GOBO1_lev0_201209281421_4knmb9jn_1_1      GOBO1_lev0_201209281421_c-733951103-20120928-00
    118. GOBO1_lev0_201209281421_4lnmb9jn_1_1      GOBO1_lev0_201209281421_c-733951103-20120928-01
    119. GOBO1_lev0_201209281421_arc_4nnmb9rn_1_1
    120. 转:http://blog.csdn.net/leshami/article/details/8029245

linux 下RMAN备份shell脚本的更多相关文章

  1. 在Linux下如何用Shell脚本读写XML?现有一个config.xml(转)

    在Linux下如何用Shell脚本读写XML?现有一个config.xml <?xml version="1.0" encoding="UTF-8"?&g ...

  2. Linux下如何执行Shell脚本

    Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第一行#!/bin/bas ...

  3. linux下如何编写shell脚本

    我对shell脚本的认识,除了执行过同事写的shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术log里记录下来 ...

  4. linux下后台执行shell脚本nohup

    (一)使用nohup后台执行脚本 脚本执行结果记录到nohup.out文件中 (二)使用&后台执行脚本 使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉

  5. Linux下定时备份MySQL数据库的Shell脚本

    Linux下定时备份MySQL数据库的Shell脚本   对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...

  6. Linux 平台下 RMAN 全备 和 增量备份 shell 脚本

    转:http://blog.csdn.net/tianlesoftware/article/details/5740630 全备脚本 以 nocatalog 模式为例: Shell 脚本: ##### ...

  7. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  8. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  9. Linux下远程备份、上传工程,重启服务器

    Linux下远程备份.上传工程,重启服务器 Linux服务器实现远程,原项目的备份.删除,新项目上传,以及远程重启服务器!分成一个主shell调用三个shell文件步骤完成.mainsh.sh一次按顺 ...

随机推荐

  1. 传说中的WCF(6):数据协定(b)

    我们继续,上一回我们了解了数据协定的一部分内容,今天我们接着来做实验.好的,实验之前先说一句:实验有风险,写代码须谨慎. 实验开始!现在,我们定义两个带数据协定的类——Student和AddrInfo ...

  2. <Win32_1>深入浅出windows消息机制[转自crocodile_]

    上学期学习了Java ,感觉Java写一个窗口真心简单,很易上手,也就难怪很多开发人员选择Java作为自己的开发编程语言.但是由于自身对windows的热爱,让我觉得c.c++语言才是我亲睐的编程语言 ...

  3. 深入理解javascript:揭秘命名函数表达式

    这是一篇转自汤姆大叔的文章:http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 前言 网上还没用发现有人对命名函数表达式进去重复深 ...

  4. oci.dll文件是用来干嘛的? 如果没有安装ORACLE客户端提示oci.dll未加载

    oracle数据库开发编程中,没有找到oci.dll,一般是系统的 path 设置有问题, 查找oci.dll, 然后加入到系统路径.oci.dll 可下载解压到系统盘的system32目录下.然后打 ...

  5. lintcode:买卖股票的最佳时机 IV

    买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...

  6. hdu 4664 Triangulation(题意已在讨论版中说明)

    题意: 给定n个平面(平面之间相互独立),每个平面上有一些点,并且构成凸集,C和D轮流选一个平面连接两个点画线段,并保证线段之间除了端点之外没有其它交点,当平面上出现一个完整的三角形之后此平面就不能继 ...

  7. WaitForSingleObject与WaitForMultipleObjects用法详解(好用,而且进入一个非常高效沉睡状态,只占用极少的CPU时间片)

    在多线程下面,有时候会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects ...

  8. BASM遵循的规则

    任何情况下,在寄存器的使用上,BASM遵循如下的规则: ASM 语句执行过程中,必须保存EDI.ESI.ESP.EBP.EBX 的值(5个寄存器,意思是可以用,但最后得恢复成原模原样). ASM ...

  9. iOS:UIView的block函数实现转场动画---单视图

    使用UIView动画函数实现转场动画——单视图 + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration ...

  10. UX结合需求实例化进行设计开发

    技  术  文  件 技术文件名称:实例化+UX需求分析实践:场景监控需求实例化 技术文件编号: 版        本:V1.0 共 32 页 (包括封面) 拟  制    廖开蒙.刀锋团队 审  核 ...