之前一直沿用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相关的问题我都很感兴趣