首页 【芸香阁】veritas SHELL脚本范例

【芸香阁】veritas SHELL脚本范例

举报
开通vip

【芸香阁】veritas SHELL脚本范例【芸香阁】veritas SHELL脚本范例 SHELL脚本范例 Netbackup的备份会用到shell脚本,例如oracle和sap的数据备份,不仅这样,有很多复杂或罗嗦的操作都可以通过shell脚本简单的执行,结合cron和at还可以实现无人职守的自动执行操作。 这里我们只对shell内容中实现的功能做介绍,并不深入讨论shell编程的具体实现,这就需要读者有一定的shell编程基础。 用于备份oracle数据库的shell脚本 #!/usr/bin/sh #-------------------...

【芸香阁】veritas SHELL脚本范例
【芸香阁】veritas SHELL脚本范例 SHELL脚本范例 Netbackup的备份会用到shell脚本,例如oracle和sap的数据备份,不仅这样,有很多复杂或罗嗦的操作都可以通过shell脚本简单的执行,结合cron和at还可以实现无人职守的自动执行操作。 这里我们只对shell内容中实现的功能做介绍,并不深入讨论shell编程的具体实现,这就需要读者有一定的shell编程基础。 用于备份oracle数据库的shell脚本 #!/usr/bin/sh #--------------------------------------------------------------------------- //取得当前用户名称 CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1` //删除旧log文件 RMAN_LOG_FILE=${0}.out if [ -f "$RMAN_LOG_FILE" ] then rm -f "$RMAN_LOG_FILE" fi echo >> $RMAN_LOG_FILE chmod 666 $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== started on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE //定义变量 ORACLE_HOME=/export/oracle/product ORACLE_SID=PROD ORACLE_USER=oracle TARGET_CONNECT_STR=sys/change_on_install RMAN=$ORACLE_HOME/bin/rman NB_SYS_POLICY=oracle_control_file CTL_PATH=/export/home2/backup CTL_NAME=ctl_"$ORACLE_SID"_`date +'%Y%m%d'`.bak echo >> $RMAN_LOG_FILE //定义需要注册的环境变量 ORA_ENV=" ORACLE_HOME=$ORACLE_HOME export ORACLE_HOME ORACLE_SID=$ORACLE_SID export ORACLE_SID NB_ORA_SERV=bk1 export NB_ORA_SERV NB_ORA_POLICY=v880_ora_PROD_online export NB_ORA_POLICY " //判断并指定备份方式:完全、增量等 if [ "$NB_ORA_FULL" = "1" ] then echo "Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0" elif [ "$NB_ORA_INCR" = "1" ] then echo "Differential incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1" elif [ "$NB_ORA_CINC" = "1" ] then echo "Cumulative incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE" elif [ "$BACKUP_TYPE" = "" ] then echo "Default - Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0" fi # --------------------------------------------------------------------------- //定义利用RMAN备份Oracle的命令 CMD_STR=" $ORA_ENV $RMAN target $TARGET_CONNECT_STR nocatalog << EOF RUN { # backup database ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; BACKUP $BACKUP_TYPE SKIP INACCESSIBLE TAG hot_db_bk_level0 FILESPERSET 20 # recommended format FORMAT 'bk_%s_%p_%t' DATABASE; sql 'alter system archive log current'; RELEASE CHANNEL ch00; # backup all archive logs ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE'; BACKUP filesperset 100 FORMAT 'al_%s_%p_%t' ARCHIVELOG ALL; RELEASE CHANNEL ch00; RELEASE CHANNEL ch01; # backup control file ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; BACKUP # recommended format FORMAT 'cntrl_%s_%p_%t' CURRENT CONTROLFILE; RELEASE CHANNEL ch00; } EOF " //执行定义的命令 # Initiate the command string if [ "$CUSER" = "root" ] then su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? else /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? fi //判断命令执行的结果 if [ "$RSTAT" = "0" ] then echo "" else exit $RSTAT fi # --------------------------------------------------------------------------- //定义备份control file的命令 # make second copy of control file CMD_STR=" sqlplus /nolog << EOF conn /as sysdba alter database backup controlfile to '$CTL_PATH/control.bak'; EOF mv $CTL_PATH/control.bak $CTL_PATH/$CTL_NAME /usr/openv/netbackup/bin/bpbackup -p $NB_SYS_POLICY $CTL_PATH/$CTL_NAME " //执行定义的命令 # Initiate the command string if [ "$CUSER" = "root" ] then su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? else /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? fi //判断命令执行的结果 if [ "$RSTAT" = "0" ] then LOGMSG="ended successfully" else LOGMSG="ended in error" exit $RSTAT fi echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE exit $RSTAT 备份oracle的shell脚本最关键的部分在于环境变量的注册和rman命令的使 用。 用于恢复Oracle数据库的shell脚本 #!/usr/bin/sh # --------------------------------------------------------------------------- //取得当前用户名称 CUSER=`id |cut -d"(" -f2 | cut -d ")" -f1` //删除旧log文件 RMAN_LOG_FILE=${0}.out if [ -f "$RMAN_LOG_FILE" ] then rm -f "$RMAN_LOG_FILE" fi echo >> $RMAN_LOG_FILE chmod 666 $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== started on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE //定义变量 ORACLE_HOME=/export/oracle/product ORACLE_SID=PROD ORACLE_USER=oracle TARGET_CONNECT_STR=sys/change_on_install RMAN=$ORACLE_HOME/bin/rman NB_SYS_POLICY=oracle_control_file CTL_PATH=/export/home2/backup CTL_NAME=ctl_"$ORACLE_SID"_`date +'%Y%m%d'`.bak echo >> $RMAN_LOG_FILE //定义需要注册的环境变量 ORA_ENV=" ORACLE_HOME=$ORACLE_HOME export ORACLE_HOME ORACLE_SID=$ORACLE_SID export ORACLE_SID NB_ORA_SERV=bk1 export NB_ORA_SERV NB_ORA_POLICY=v880_ora_PROD_online export NB_ORA_POLICY " if [ "$NB_ORA_FULL" = "1" ] then echo "Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0" elif [ "$NB_ORA_INCR" = "1" ] then echo "Differential incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1" elif [ "$NB_ORA_CINC" = "1" ] then echo "Cumulative incremental backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE" elif [ "$BACKUP_TYPE" = "" ] then echo "Default - Full backup requested" >> $RMAN_LOG_FILE BACKUP_TYPE="INCREMENTAL LEVEL=0" fi # --------------------------------------------------------------------------- //定义用RMAN恢复数据库的命令 CMD_STR=" $ORA_ENV $RMAN target $TARGET_CONNECT_STR nocatalog << EOF RUN { # backup database ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE'; RESTORE DATABASE; //如果需要恢复归档日志,则使用命令 RESTORE ARCHIVELOG ALL; RELEASE CHANNEL ch00; } EOF " //执行定义的命令 # Initiate the command string if [ "$CUSER" = "root" ] then su - $ORACLE_USER -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? else /usr/bin/sh -c "$CMD_STR" >> $RMAN_LOG_FILE RSTAT=$? fi //判断命令执行的结果 if [ "$RSTAT" = "0" ] then LOGMSG="ended successfully" else LOGMSG="ended in error" exit $RSTAT fi echo >> $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== $LOGMSG on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE exit $RSTAT 恢复用的shell脚本可以根据备份的脚本改造得来,主要是将命令定义部分 改为恢复命令。 用于备份SAP数据库的shell脚本 #!/bin/sh //定义变量 ORACLE_BASE=/oracle ORACLE_SID=PRD ORACLE_HOME=$ORACLE_BASE/$ORACLE_SID/920_64 SAP_SERVER=bk1 SAP_POLICY=sapr3db_sap_PRD_online RSTAT=0 # SAP_ENV - Holds environmental variables. //定义需要注册的环境变量 SAP_ENV=" setenv SAP_SERVER $SAP_SERVER setenv SAP_POLICY $SAP_POLICY setenv SAP_DRIVES 2 setenv ORACLE_HOME $ORACLE_HOME setenv ORACLE_SID $ORACLE_SID " //定义备份命令,通过命令可以执行不同类型的备份:离线、在线、 CMD_LINE=" $SAP_ENV brbackup -c -u / -d util_file -t online -m all -p initNBU.sap " //执行定义的命令 #echo "Execute $CMD_LINE" su - oraprd -c "$CMD_LINE" RSTAT=$? exit $RSTAT 这里执行的命令是用于在线备份的命令,如果需要执行离线备份就需要使用 命令 brbackup -c -u / -d util_file -t offline_force -m all -p initNBU.sap 如果是执行archivelog备份的话,需要执行以下命令 brarchive -c -u / -d util_file -cds -p initNBU.sap 用于恢复SAP数据库的shell脚本 #!/bin/sh //定义变量 ORACLE_BASE=/oracle ORACLE_SID=PRD ORACLE_HOME=$ORACLE_BASE/$ORACLE_SID/920_64 SAP_SERVER=bk1 SAP_POLICY=sapr3db_sap_PRD_online RSTAT=0 # SAP_ENV - Holds environmental variables. //定义需要注册的环境变量 SAP_ENV=" setenv SAP_SERVER $SAP_SERVER setenv SAP_POLICY $SAP_POLICY setenv SAP_DRIVES 2 setenv ORACLE_HOME $ORACLE_HOME setenv ORACLE_SID $ORACLE_SID " //定义用于恢复的命令 CMD_LINE=" $SAP_ENV brrestore -u / -d util_file -m all -p initNBU.sap " //执行定义的命令 #echo "Execute $CMD_LINE" su - oraprd -c "$CMD_LINE" RSTAT=$? exit $RSTAT 用于备份netbackup catalog的脚本 #!/usr/bin/sh //定义变量 # environment BAK_PATH=/export/home/backup BAK_LOG=bak_cat.log //判断并定义月份和日期 DET_MON=`date +'%m' | cut -c1` if [ "$DET_MON" = "0" ] then CUR_MON=`date +'%m' | cut -f2 -d0` else CUR_MON=`date +'%m'` fi OLD_MON=`echo "$CUR_MON"-1 | bc` CUR_DATE=`date +'%Y%m%d'` if [ "$DET_MON" = "0" ] then OLD_DATE=`date +'%Y'`0"$OLD_MON"`date +'%d'` else OLD_DATE=`date +'%Y'`"$OLD_MON"`date +'%d'` fi SERVER=bk1 TARSTAT=0 FTPSTAT=0 RMSTAT=0 echo $OLD_DATE echo "--------Log Start--------" >> $BAK_PATH/$BAK_LOG echo "" >> $BAK_PATH/$BAK_LOG //将catalog数据打包 # make backup of catalog echo "`date +'%Y/%m/%d %H:%M:%S'" >> $BAK_PATH/$BAK_LOG echo " make new backup of catalog" >> $BAK_PATH/$BAK_LOG for i in 1 2 do CMD="tar cf $BAK_PATH/ca_"$SERVER"_"$CUR_DATE"_"$i".tar $BAK_PATH/catalog"$i"" tar cf $BAK_PATH/ca_"$SERVER"_"$CUR_DATE"_"$i".tar $BAK_PATH/catalog"$i" TARSTAT=`echo $TARSTAT+$? | bc` echo "`date +'%Y/%m/%d %H:%M:%S'" >> $BAK_PATH/$BAK_LOG echo " $CMD" >> $BAK_PATH/$BAK_LOG if [ "$TARSTAT" = "0" ] then echo " sucessful" >> $BAK_PATH/$BAK_LOG else echo "fail" >> $BAK_PATH/$BAK_LOG fi echo "" >> $BAK_PATH/$BAK_LOG done //将tar包ftp到bk2上 # ftp backup to server bk2 if [ "$TARSTAT" = "0" ] then echo "`date +'%Y/%m/%d %H:%M:%S'" >> $BAK_PATH/$BAK_LOG echo " ftp new backup of catalog to server bk2" >> $BAK_PATH/$BAK_LOG else exit $TARSTAT fi for i in 1 2 do ftp -n bk2 << EOF >> $BAK_PATH/$BAK_LOG user any any lcd $BAK_PATH bin put ca_"$SERVER"_"$CUR_DATE"_"$i".tar bye EOF FTPSTAT=`echo $FTPSTAT+$? | bc` done # delete expired backup of catalog //删除旧的tar包 if [ "$FTPSTAT" = "0" ] then echo " sucessful" >> $BAK_PATH/$BAK_LOG echo "" >> $BAK_PATH/$BAK_LOG echo "`date +'%Y/%m/%d %H:%M:%S'" >> $BAK_PATH/$BAK_LOG echo " delete expired backup of catalog" >> $BAK_PATH/$BAK_LOG else exit $FTPSTAT fi for i in 1 2 do CMD="rm $BAK_PATH/ca_"$SERVER"_"$OLD_DATE"_"$i".tar" rm $BAK_PATH/ca_"$SERVER"_"$OLD_DATE"_"$i".tar RMSTAT=`echo $TARSTAT+$? | bc` echo "`date +'%Y/%m/%d %H:%M:%S'" >> $BAK_PATH/$BAK_LOG echo " $CMD" >> $BAK_PATH/$BAK_LOG if [ "$RMSTAT" = "0" ] then echo " sucessful" >> $BAK_PATH/$BAK_LOG elif [ "$RMSTAT" = "2" ] then echo "file not exist" >> $BAK_PATH/$BAK_LOG RMSTAT=0 else echo "fail" >> $BAK_PATH/$BAK_LOG fi echo "" >> $BAK_PATH/$BAK_LOG done echo "--------Log Stop--------" >> $BAK_PATH/$BAK_LOG echo "" RSTAT=`echo $TARSTAT+$FTPSTAT+$RMSTAT | bc` exit $RSTAT 这个脚本可以使用cron定义每天执行,这样就保证catalog的备份在异地也 有备份,并且及时删除一个月钱的就备份。 用于netbackup duplicate的shell脚本 在介绍脚本之前介绍以下脚本用到的资源文件policy_list # backup policy list # netbackup duplicate script uses this list # type sample # FS = File system # ORA = Oracle # CTL = Oracle Control File # SAP = SAP # ARC = SAP Archive Log # NULL = None //type是标记关键字来区分不同备份类型 //policy_name是策略的名字 //schedule是使用数字标记复制需要执行的日期(星期) # type policy_name schedule *FS* DNS-A_fs_sys #5 *FS* HS-DB01_fs_sys #2 *ORA* HS-DB01_ora_b2c_online #0#1#2#3#4#5#6 *FS* HS-Web01_fs_sys #2 *FS* ERPDB_fs_sys #1 *ORA* ERPDB_ora_erpdb_online #0#1#2#3#4#5#6 *FS* hscc1_fs_sys #3 *ORA* hscc1_ora_hsccs_online #0#1#2#3#4#5#6 *CTL* oracle_control_file #0#1#2#3#4#5#6 *FS* qingdao_fs_sys #3 *ORA* qingdao_ora_hscrm_online #0#1#2#3#4#5#6 *FS* SALESDB_fs_sys #1 *NULL* SALESDB_ora_salesdb_offline #0#1#2#3#4#5#6 *FS* sapr3ci_fs_sys #4 *FS* sapr3db_fs_sys #0 *SAP* sapr3db_sap_PRD_offline #0 *SAP* sapr3db_sap_PRD_online #1#2#3#4#5#6 *ARC* sapr3db_sap_archive * *FS* sapr3dev_fs_sys #0 *SAP* sapr3dev_sap_DEV_offline #0 *SAP* sapr3dev_sap_DEV_online #1#2#3#4#5#6 *ARC* sapr3dev_sap_archive * *FS* sapr3qas_fs_sys #4 *SAP* sapr3qas_sap_QAS_offline #0 *FS* v880_fs_sys #5 *ORA* v880_ora_PROD_online #0#1#2#3#4#5#6 这个资源文件在shell脚本执行是被读取。 #!/bin/sh //定义变量 LANG=en export LANG CUR_WEEK=`date | awk {'print $1'}` DUP=/opt/openv/netbackup/bin/admincmd/bpduplicate //判断当天是星期几,并定义对应的关键字 case "$CUR_WEEK" in Sun) KEY_WORD=#0;; Mon) KEY_WORD=#1;; Tue) KEY_WORD=#2;; Wed) KEY_WORD=#3;; Thu) KEY_WORD=#4;; Fri) KEY_WORD=#5;; Sat) KEY_WORD=#6;; esac //针对不同类型的备份数据分别进行duplicate cat /scripts/policy_list | grep $KEY_WORD | grep *ORA* | awk {'print $2'} | xargs -n 1 -I {} $DUP -dstunit bk2-hcart2-robot-tld-1 -dp HuangDao_oracle -policy {} -hoursago 24 -number_copies 1 -rl 0 cat /scripts/policy_list | grep $KEY_WORD | grep *CTL* | awk {'print $2'} | xargs -n 1 -I {} $DUP -dstunit bk2-hcart2-robot-tld-1 -dp control_file_3 -policy {} -hoursago 24 -number_copies 1 -rl 0 cat /scripts/policy_list | grep $KEY_WORD | grep *SAP* | awk {'print $2'} | xargs -n 1 -I {} $DUP -dstunit bk2-hcart2-robot-tld-1 -dp HuangDao_sap_on -policy {} -hoursago 24 -number_copies 1 -rl 0 cat /scripts/policy_list | grep $KEY_WORD | grep *FS* | awk {'print $2'} | xargs -n 1 -I {} $DUP -dstunit bk2-hcart2-robot-tld-1 -dp HuangDao_file_system -policy {} -hoursago 24 -number_copies 1 -rl 0 cat /scripts/policy_list | grep $KEY_WORD | grep *OFF* | awk {'print $2'} | xargs -n 1 -I {} $DUP -dstunit bk2-hcart2-robot-tld-1 -dp HuangDao_sap_off -policy {} -hoursago 24 -number_copies 1 -rl 0 可以使用此脚本对备份数据统一进行复制,也可以添加到crontab里自动执行。关于bpduplicate命令的详细用法可以参考本文关于维护的章节或“VERITAS NetBackup 5.1 Commands for UNIX”( 268116_cmd.pdf)。
本文档为【【芸香阁】veritas SHELL脚本范例】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_005190
暂无简介~
格式:doc
大小:47KB
软件:Word
页数:20
分类:互联网
上传时间:2018-04-25
浏览量:29