iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux平台下如何实现RMAN 全备和增量备份shell脚本
  • 496
分享到

Linux平台下如何实现RMAN 全备和增量备份shell脚本

2024-04-02 19:04:59 496人浏览 薄情痞子
摘要

这篇文章主要介绍了linux平台下如何实现RMAN 全备和增量备份shell脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。全备脚本以&n

这篇文章主要介绍了linux平台下如何实现RMAN 全备和增量备份shell脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

全备脚本

以 nocatalog 模式为例:

Shell 脚本:

########################################################################

##   hot_database_backup.sh      ##

##   created by Tianlesoftware   ##

##        2010-7-16                 ##

#########################################################################

#!/bin/sh 

# --------------------------------------------------------------------------- 

# Determine the user which is executing this script. 

# --------------------------------------------------------------------------- 

CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1` 

# --------------------------------------------------------------------------- 

# Put output in <this file name>.out. Change as desired. 

# Note: output directory requires write permission. 

# --------------------------------------------------------------------------- 

RMAN_LOG_FILE=${0}.out 

# --------------------------------------------------------------------------- 

# You may want to delete the output file so that backup infORMation does 

# not accumulate.  If not, delete the following lines. 

# --------------------------------------------------------------------------- 

if [ -f "$RMAN_LOG_FILE" ] 

then 

rm -f "$RMAN_LOG_FILE" 

fi 

# ----------------------------------------------------------------- 

# Initialize the log file. 

# ----------------------------------------------------------------- 

echo >> $RMAN_LOG_FILE 

chmod 666 $RMAN_LOG_FILE 

# --------------------------------------------------------------------------- 

# Log the start of this script. 

# --------------------------------------------------------------------------- 

echo Script $0 >> $RMAN_LOG_FILE 

echo ==== started on `date` ==== >> $RMAN_LOG_FILE 

echo >> $RMAN_LOG_FILE 

# --------------------------------------------------------------------------- 

oracle home path. 

# --------------------------------------------------------------------------- 

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1 

export ORACLE_HOME 

# --------------------------------------------------------------------------- 

# the Oracle SID of the target database. 

# --------------------------------------------------------------------------- 

ORACLE_SID=orcl 

export ORACLE_SID 

# --------------------------------------------------------------------------- 

# The Oracle DBA user id (account). 

# --------------------------------------------------------------------------- 

ORACLE_USER=oracle 

export ORACLE_USER 

# --------------------------------------------------------------------------- 

# Set the Oracle Recovery Manager name. 

# --------------------------------------------------------------------------- 

RMAN=$ORACLE_HOME/bin/rman 

# --------------------------------------------------------------------------- 

# Print out the value of the variables set by this script. 

# --------------------------------------------------------------------------- 

echo >> $RMAN_LOG_FILE 

echo   "RMAN: $RMAN" >> $RMAN_LOG_FILE 

echo   "ORACLE_SID: $ORACLE_SID" >> $RMAN_LOG_FILE 

echo   "ORACLE_USER: $ORACLE_USER" >> $RMAN_LOG_FILE 

echo   "ORACLE_HOME: $ORACLE_HOME" >> $RMAN_LOG_FILE 

# --------------------------------------------------------------------------- 

# Print out the value of the variables set by bphdb. 

# --------------------------------------------------------------------------- 

#echo  >> $RMAN_LOG_FILE 

#echo   "NB_ORA_FULL: $NB_ORA_FULL" >> $RMAN_LOG_FILE 

#echo   "NB_ORA_INCR: $NB_ORA_INCR" >> $RMAN_LOG_FILE 

#echo   "NB_ORA_CINC: $NB_ORA_CINC" >> $RMAN_LOG_FILE 

#echo   "NB_ORA_SERV: $NB_ORA_SERV" >> $RMAN_LOG_FILE 

#echo   "NB_ORA_POLICY: $NB_ORA_POLICY" >> $RMAN_LOG_FILE 

# --------------------------------------------------------------------------- 

# NOTE: This script assumes that the database is properly opened. If desired, 

# this would be the place to verify that. 

# --------------------------------------------------------------------------- 

echo >> $RMAN_LOG_FILE 

# --------------------------------------------------------------------------- 

# --------------------------------------------------------------------------- 

# Call Recovery Manager to initiate the backup. 

# --------------------------------------------------------------------------- 

CMD_STR=" 

ORACLE_HOME=$ORACLE_HOME 

export ORACLE_HOME 

ORACLE_SID=$ORACLE_SID 

export ORACLE_SID 

$RMAN nocatalog target sys/admin  msglog $RMAN_LOG_FILE append << EOF 

RUN { 

allocate channel c1 type disk;

allocate channel c2 type disk;

BACKUP FORMAT '/u01/backup/orcl_%U_%T' skip inaccessible filesperset 5  DATABASE TAG orcl_hot_db_bk; 

sql 'alter system arcHive log current';

BACKUP FORMAT '/u01/backup/arch_%U_%T' skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT; 

backup current controlfile tag='bak_ctlfile' format='/u01/backup/ctl_file_%U_%T';

backup spfile tag='spfile' format='/u01/backup/ORCL_spfile_%U_%T';

release channel c2;

release channel c1;

}

report obsolete; 

delete noprompt obsolete; 

crosscheck backup; 

delete noprompt expired backup;

list backup summary; 

#EOF 

# Initiate the command string 

if [ "$CUSER" = "root" ] 

then 

    echo "Root Command String: $CMD_STR" >> $RMAN_LOG_FILE     

    su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE 

    RSTAT=$? 

else 

    echo "User Command String: $CMD_STR" >> $RMAN_LOG_FILE     

    /bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE 

    RSTAT=$? 

fi 

# --------------------------------------------------------------------------- 

# Log the completion of this script. 

# --------------------------------------------------------------------------- 

if [ "$RSTAT" = "0" ] 

then 

    LOGMSG="ended successfully" 

else 

    LOGMSG="ended in error" 

fi 

echo >> $RMAN_LOG_FILE 

echo Script $0 >> $RMAN_LOG_FILE 

echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE 

echo >> $RMAN_LOG_FILE 

/bin/mailx -s "RMAN Backup SID " daimm@sf-express.com < $RMAN_LOG_FILE 

exit $RSTAT 

三. 增量备份

以catalog模式为例:

在存放catalog的实例上创建catalog 目录:

1.创建Catalog所需要的表空间

SQL>create tablespace catalog_ts datafile 'D:/APP/ADMINISTRATOR/ORADATA/ORCL/catalog_ts1.dbf'  size 20M;

2.创建RMAN用户并授权

SQL>create user catalog identified by catalog default tablespace catalog_ts;

SQL>grant recovery_catalog_owner to catalog; 

查看角色所拥有的权限: 

select * from dba_sys_privs where grantee='RECOVERY_CATALOG_OWNER';

3.创建恢复目录

[oracle@db1 scripts]$ rman target / catalog catalog/catalog@catalog1;

Recovery Manager: Release 10.2.0.1.0 - Production on Thu Jul 15 12:03:16 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=1248423599)

connected to recovery catalog database

RMAN> create catalog tablespace catalog_ts;

recovery catalog created

如果此处报错:

ORACLE error from recovery catalog database: ORA-00955: name is already used by an existing object

可以用命令删除catalog,在创建:

RMAN> drop catalog;

recovery catalog owner is CATALOG

enter DROP CATALOG command again to confirm catalog removal

RMAN> drop catalog

recovery catalog dropped

RMAN> reGISter database;

database registered in recovery catalog

starting full resync of recovery catalog

full resync complete

RMAN>

差异备份有3个级别: 

0级:相当于全备,不同的是0级可用于增量备份,全备不行。

1级:备份自上次0级备份以来的数据

2级:备份自上次备份依赖的数据

脚本的增量备份策略: 周日0级备份,周四1级备份,其他2级备份

Shell 脚本:

########################################################################

##   incremental_hot_database_backup.sh      ##

##   created by Tianlesoftware            ##

##        2010-7-16                          ##

#########################################################################

#!/bin/ksh 

export LANG=en_US

BACKUP_DATE=`date +%d`

RMAN_LOG_FILE=${0}.out

TODAY=`date`

USER=`id|cut -d "(" -f2|cut -d ")" -f1`

echo "-----------------$TODAY-------------------">$RMAN_LOG_FILE

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

export ORACLE_HOME

RMAN=$ORACLE_HOME/bin/rman

export RMAN

ORACLE_SID=orcl

export ORACLE_SID

ORACLE_USER=oracle

export ORACLE_USER

echo "ORACLE_SID: $ORACLE_SID">>$RMAN_LOG_FILE

echo "ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE

echo "ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE

echo "==========================================">>$RMAN_LOG_FILE

echo "BACKUP DATABASE BEGIN......">>$RMAN_LOG_FILE

echo "                   ">>$RMAN_LOG_FILE

chmod 666 $RMAN_LOG_FILE

WEEK_DAILY=`date +%a`

case  "$WEEK_DAILY" in

       "Mon")

            BAK_LEVEL=2

            ;;

       "Tue")

            BAK_LEVEL=2

            ;;

       "Wed")

            BAK_LEVEL=2

            ;;

       "Thu")

            BAK_LEVEL=1

            ;;

       "Fri")

            BAK_LEVEL=2

            ;;

       "Sat")

            BAK_LEVEL=2

            ;;

       "Sun")

            BAK_LEVEL=0

            ;;

       "*")

            BAK_LEVEL=error

esac

export BAK_LEVEL=$BAK_LEVEL 

echo "Today is : $WEEK_DAILY  incremental level= $BAK_LEVEL">>$RMAN_LOG_FILE

RUN_STR="

BAK_LEVEL=$BAK_LEVEL

export BAK_LEVEL

ORACLE_HOME=$ORACLE_HOME

export ORACLE_HOME

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

$RMAN TARGET sys/admin CATALOG catalog/catalog@catalog1  msglog $RMAN_LOG_FILE append <<EOF

run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

backup  incremental level= $BAK_LEVEL  skip inaccessible filesperset 5 Database format='/u01/backup/orcl_lev"$BAK_LEVEL"_%U_%T'  tag='orcl_lev"$BAK_LEVEL"' ;

sql 'alter system archive log current';

backup archivelog all tag='arc_bak' format='/u01/backup/arch_%U_%T' skip inaccessible  filesperset 5 not  backed up 1 times  delete input;

backup current controlfile tag='bak_ctlfile' format='/u01/backup/ctl_file_%U_%T';

backup spfile tag='spfile' format='/u01/backup/ORCL_spfile_%U_%T';

release channel c2;

release channel c1;

}

report obsolete; 

delete noprompt obsolete; 

crosscheck backup; 

delete noprompt expired backup;

list backup summary; 

resync catalog;

EOF

"

 # Initiate the command string 

if [ "$CUSER" = "root" ] 

then 

    echo "Root Command String: $RUN_STR" >> $RMAN_LOG_FILE     

    su - $ORACLE_USER -c "$RUN_STR" >> $RMAN_LOG_FILE 

    RSTAT=$? 

else 

    echo "User Command String: $RUN_STR" >> $RMAN_LOG_FILE     

    /bin/sh -c "$RUN_STR" >> $RMAN_LOG_FILE 

    RSTAT=$? 

fi 

# --------------------------------------------------------------------------- 

# Log the completion of this script. 

# --------------------------------------------------------------------------- 

if [ "$RSTAT" = "0" ] 

then 

    LOGMSG="ended successfully" 

else 

    LOGMSG="ended in error" 

fi 

echo >> $RMAN_LOG_FILE 

echo Script $0 >> $RMAN_LOG_FILE 

echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE 

echo >> $RMAN_LOG_FILE 

/bin/mailx -s "RMAN Backup SID " daimm@sf-express.com < $RMAN_LOG_FILE 

exit $RSTAT 

将该备份脚本添加到crontab, 然后定时执行:

[oracle@db1 u01]$ crontab -l

00 1 * * * /u01/scripts/incremental_hotbackup.sh

Unix crontab 命令详解

Http://blog.csdn.net/tianlesoftware/archive/2010/02/22/5315039.aspx

测试的时候,我们可以手工的修改,然后查看脚本的执行情况即可:

[root@db1 ~]# date --set "2010-7-16 11:11:11"

------------------------------2010年8月23日补充--------------------------

      用这个脚本的时候发现一个问题,备份集可以通过设定保存粗略定期删除,但是备份的归档文件无法删除。

     所以还需要定期的删除备份的归档文件。 一般保存15天。 shell 脚本如下。添加到crontab 里定时执行就可以了。

del_archive_backup.sh

#!/bin/ksh
# ##################################################################
#
# delete archvivelog backup file.sh
#        tianlesoftware
#
# ##################################################################
PATH=/usr/bin:/usr/ucb:/etc:.:/usr/X/bin:/bin
export PATH
find /u01/incremental_hotbackup -mtime +15 -name "arch_*" -exec rm {} /;

说明,这里的路径写你自己的就可以了。

感谢你能够认真阅读完这篇文章,希望小编分享的“Linux平台下如何实现RMAN 全备和增量备份shell脚本”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网操作系统频道,更多相关知识等着你来学习!

--结束END--

本文标题: Linux平台下如何实现RMAN 全备和增量备份shell脚本

本文链接: https://www.lsjlt.com/news/65537.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux平台下如何实现RMAN 全备和增量备份shell脚本
    这篇文章主要介绍了Linux平台下如何实现RMAN 全备和增量备份shell脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。全备脚本以&n...
    99+
    2024-04-02
  • hbase如何实现全备增量备份脚本
    小编给大家分享一下hbase如何实现全备增量备份脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧![hadoop@robot-pbs-hadoop-master ...
    99+
    2023-06-03
  • mysqldump如何实现全量和增量备份脚本
    这篇文章将为大家详细讲解有关mysqldump如何实现全量和增量备份脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 #!/bin/bash ...
    99+
    2024-04-02
  • mongodb如何实现增量/全量备份脚本
    这篇文章主要介绍了mongodb如何实现增量/全量备份脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。功能定期对mongodb数据库数据进...
    99+
    2024-04-02
  • mysql如何全量备份和增量备份
    本篇内容主要讲解“mysql如何全量备份和增量备份”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql如何全量备份和增量备份”吧!mysql 全量备份:vi...
    99+
    2024-04-02
  • mongodb增量备份脚本的实现
    mongodb增量备份脚本的实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。mongodb集群架构时,从库是通过异步复制主库的Oplog...
    99+
    2024-04-02
  • HBase如何增量备份的python脚本
    这篇文章将为大家详细讲解有关HBase如何增量备份的python脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  HBase自带的export/import机制可以实...
    99+
    2024-04-02
  • mysql如何实现定时备份shell脚本
    这篇文章给大家分享的是有关mysql如何实现定时备份shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 #!/bin/bashecho &q...
    99+
    2024-04-02
  • SVN仓库的全量备份和增量备份怎么实现
    这篇文章主要介绍“SVN仓库的全量备份和增量备份怎么实现”,在日常操作中,相信很多人在SVN仓库的全量备份和增量备份怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SVN仓库的全量备份和增量备份怎么实现...
    99+
    2023-06-04
  • 如何实现备份数据库的shell脚本
    这篇文章将为大家详细讲解有关如何实现备份数据库的shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。备份数据库的shell脚本一代码如下:#!/bin/bash#指定运行的脚本shell#运行脚本...
    99+
    2023-06-09
  • linux下实现mysql自动备份的脚本
    这篇文章主要介绍“linux下实现mysql自动备份的脚本”,在日常操作中,相信很多人在linux下实现mysql自动备份的脚本问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 如何实现远程FTP定时备份Shell脚本
    这篇文章主要讲解了“如何实现远程FTP定时备份Shell脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现远程FTP定时备份Shell脚本”吧!先说问题.公司现在有2台服务器,都是c...
    99+
    2023-06-09
  • vbs如何实现纯脚本备份
    这篇文章主要介绍vbs如何实现纯脚本备份,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!说明:   不能说此脚本比驱动精灵更完美,但它确实弥补了驱动精灵的不足!   这个版本是我先前版本上(借助DevCon纯脚本备份驱...
    99+
    2023-06-09
  • mysql如何实现innobackupex备份脚本
    这篇文章主要为大家展示了“mysql如何实现innobackupex备份脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何实现innobackup...
    99+
    2024-04-02
  • 如何实现innobackuppex全备脚本
    小编给大家分享一下如何实现innobackuppex全备脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! [root@loc...
    99+
    2024-04-02
  • 如何实现备份网站内容的shell脚本代码
    这篇文章主要介绍如何实现备份网站内容的shell脚本代码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!备份网站内容 代码如下:#!/bin/bash#指定运行的脚本shell#运行脚本要给用户执行权限bakdir=/...
    99+
    2023-06-09
  • mysql如何实现按表备份脚本
    这篇文章主要为大家展示了“mysql如何实现按表备份脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何实现按表备份脚本”这篇文章吧。 ...
    99+
    2024-04-02
  • Linux系统如何配置文件简易shell备份脚本
    这篇文章主要为大家展示了“Linux系统如何配置文件简易shell备份脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统如何配置文件简易shell备份脚本”这篇文章吧。在计算机科学...
    99+
    2023-06-05
  • 如何实现alwayson的备份还原脚本
    这篇文章主要介绍如何实现alwayson的备份还原脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1、 备份数据库 在主副本上,将需要做AlwaysOn的数据库做一次全备和日...
    99+
    2024-04-02
  • shell脚本实现自动化下载并检测ftp文件备份
    本篇内容介绍了“shell脚本实现自动化下载并检测ftp文件备份”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现代码:#!/bin/bas...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作