rman备份脚本(改良版)

来源:互联网 发布:centos mount nfs 编辑:程序博客网 时间:2024/04/30 16:15


之前一直沿用tianlesoftware大牛的rman备份脚本,现在对其进行部分改动,主要是为了方便给像我一样的懒人用。

当你新上一套db,需要备份的话,把我的数据库脚本拷贝过去,简单集中地在一个地方修改几行内容就可以了。

是不是很舒服很简单? 没错,我就是想达到这个效果。



########################################################################
 
##   hot_database_backup.sh      ##
 
##   edited by dengweie (created by tianlesoftware)         ##
 
##        2013-09-02              ##
 
#########################################################################
 
#!/bin/sh 
 
# --------------------------------------------------------------------------- 
 
# Determine the user which is executing this script. 
 
# --------------------------------------------------------------------------- 
 
CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1` 
 
# --------------------------------------------------------------------------- 
# need to modify, when you copy and use it on anther machine.    //当你需要拷贝这个脚本到其他服务器并使用这个脚本时,只需要修改这个地方的几行内容就可以,需要修改的内容紧接着后面。

# Oracle home path.
# the Oracle SID of the target database.
# The Oracle DBA user id (account).
# Set the Oracle Recovery Manager name and Environment.

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


export ORACLE_HOME=/oracle/product/11gR2/db          //需要修改的第一行。 ORACLE_HOME,这个不用说了,你的HOME可能和我不一样。你若懒得改就和我建的一样吧
export ORACLE_SID=dws                                                  //需要修改的第二行。ORACLE_SID。
export ORACLE_USER=oracle                                             //需要修改的第三行。一般不用修改。
export PATH=/oracle/product/11gR2/db/bin:$PATH           //需要修改的第四行。这个和ORACLE_HOME相关
export RMAN_DATA_DIR=/local_bkup/rman/backupset   //需要修改的第五行。RMAN备份集的存放路径,自己看着办。
RMAN_LOG_FILE=/local_bkup/rman/rman_bkup_totaldb.log    //需要修改的第六行。 RMAN日志的存放路径,自己看着办。
RMAN=$ORACLE_HOME/bin/rman                                      //需要修改的第七行。RMAN程序的路径,写了这个就不用写绝对路径了。
PWD=XXXXXXX       //需要修改的第八行。用于后边登陆rman的用户密码。这里用的SYS用户。其实这个不安全,需继续优化一下。好了,一共就这几行需要修改,之后的内容都不用改了。是不是很简单?







# --------------------------------------------------------------------------- 
 
# 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 
 
# --------------------------------------------------------------------------- 
# 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 


echo   "RMAN_DATA_DIR: $RMAN_DATA_DIR" >> $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. 


# BACKUP FORMAT '$RMAN_DATA_DIR/data_%U_%T' skip inaccessible filesperset 5  DATABASE TAG totaldb_hot_bkup;
 
# --------------------------------------------------------------------------- 
 
 
 
CMD_STR=" 
 
 ORACLE_HOME=$ORACLE_HOME 
 
 export ORACLE_HOME 




export ORACLE_HOME=/oracle/product/11gR2/db 
 
ORACLE_SID=$ORACLE_SID 
 
export ORACLE_SID 


export RMAN_DATA_DIR
 
$RMAN nocatalog target sys/$PWD  msglog $RMAN_LOG_FILE append << EOF 
 
 


BACKUP FORMAT '$RMAN_DATA_DIR/data_%U_%T' skip inaccessible   DATABASE TAG totaldb_hot_bkup; 
 
 
 
sql 'alter system archive log current';
 
 
 
BACKUP FORMAT '$RMAN_DATA_DIR/arch_%U_%T' skip inaccessible filesperset 50 ARCHIVELOG ALL DELETE INPUT; 
 
 
 
backup current controlfile tag='bak_ctlfile' format='$RMAN_DATA_DIR/ctl_file_%U_%T';


 
backup spfile tag='spfile' format='$RMAN_DATA_DIR/spfile_%U_%T';
 
 
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 
 


exit $RSTAT 




___________________________________________________________________________________

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Author:   laven54 (lurou)

Email:    laven54@163.com

Blog:      http://blog.csdn.net/laven54

QQ群: 164734649  可以到群里来提问,Oracle相关的问题我都很感兴趣