These examples are provided to give an idea of the scripts you will need to develop for your system. You will need to customize the scripts to suit your own environment and requirements. Note also that many variables are hard-coded in the scripts: file names and extensions, for example. Your files may be named differently.
The dbbackup procedure does the following:
| File Name | Description |
| $TOOLS/db_mgmt/backup/dbbackup | main routine |
| $TOOLS/db_mgmt/backup/dbbackup_begin | called by dbbackup |
| $TOOLS/db_mgmt/backup/dbexport_begin | called by dbbackup |
| $TOOLS/db_mgmt/backup/dbbackup_sched.dat | schedule file |
| $TOOLS/system/crontab.dat | crontab schedule |
| $DBNAME/tools/backup/dbname_backup_admin.sh | environment variables |
| $DBNAME/tools/backup/dbname_backup_date.dyn | dynamic sql written by dbbackup_begin |
| $DBNAME/tools/log/dbname_backup_date.log | log written by dbbackup |
| $DBNAME/tools/log/dbname_backup_date.err | error log written by dbbackup |
| $DBNAME/tools/log/dbname_backup_date.msg | email message written by dbbackup |
| $DBNAME/tools/log/dbname_export.par | export parameter file |
| $DBNAME/log/dbbackup.log | crontab log |
dbbackup dbname
The sample script contains:
#! /bin/sh
# name $TOOLS/db_mgmt/backup/dbbackup
#
# purpose Perform a backup of a database.
#
# usage $TOOLS/db_mgmt/backup/dbbackup dbname
# Calls $TOOLS/db_mgmt/backup/dbbackup_begin
#
# parameters $1=dbname
#
# set environment
# ..........................................................
. /db_admin/tools/system/crontab.env >> /dev/null
# ..............................................................
# set local variables
# ...........................................................
BEGIN_JOB="`date`"
ERRMSG='$TOOLS/db_mgmt/backup/dbbackup: syntax error, parameter=dbname'
if [ "$1" ]
then DBNAME=$1
else echo $ERRMSG
exit
fi
LOGFILE="/db_admin/db_$DBNAME/tools/log/${DBNAME}_backup_`date '+%y%m%d'`.log"
LOGFILE2="/db_admin/db_$DBNAME/tools/log/${DBNAME}_backup_`date
'+%y%m%d'`_old.log"
ERRFILE="/db_admin/db_$DBNAME/tools/log/${DBNAME}_backup_`date '+%y%m%d'`.err"
ERRFILE2="/db_admin/db_$DBNAME/tools/log/${DBNAME}_backup_`date
'+%y%m%d'`_old.err"
MSGFILE="/db_admin/db_$DBNAME/tools/log/${DBNAME}_backup_`date '+%y%m%d'`.msg"
ADMIN_FILE="/db_admin/db_$DBNAME/tools/backup/${DBNAME}_backup_admin.sh"
SCHED_FILE="/db_admin/tools/db_mgmt/backup/dbbackup_sched.dat"
JOBNAME="$TOOLS/db_mgmt/backup/dbbackup"
DBBACKUP_BEGIN="$TOOLS/db_mgmt/backup/dbbackup_begin"
DBEXPORT_BEGIN="$TOOLS/db_mgmt/backup/dbexport_begin"
TODAY="`date`"
THIS_DAY="`date '+%a'`"
MSG="$DBNAME Backup succeeded at `date`"
# ..............................................................
# begin
# ..............................................................
if [ -f "$LOGFILE" ]; then
#
# Save old file
#
cat $LOGFILE >> $LOGFILE2
fi
if [ -f "$ERRFILE" ]; then
#
# Save old file
#
cat $ERRFILE >> $ERRFILE2
fi
$TOOLS/system/script_header $JOBNAME > $MSGFILE
$TOOLS/system/script_header $JOBNAME > $LOGFILE
#
# Read backup schedule
#
awk -v dbname=$DBNAME -v this_day=$THIS_DAY '{
#
# get a record
#
cmd=$0
sizeofarray=split(cmd,rec," ")
dbname2=rec[1]
day_of_week=rec[2]
backup=rec[3]
export=rec[4]
special_task=rec[5]
post_backup_task=rec[6]
if (( dbname2 == dbname ) && ( this_day == day_of_week ))
print " " backup " " export " " special_task " " post_backup_task
}' $SCHED_FILE | while read BACKUP EXPORT SPECIAL_TASK POST_BACKUP_TASK
do
. /db_admin/db_$DBNAME/.orauser_$DBNAME
#
# Parameters
#
PARAMETER_MSG="
\n...............................................................
\nBackup Job Parameters:
\n
\nDatabase Name = $DBNAME
\nBackup Type = $BACKUP
\nExport Type = $EXPORT
\nSpecial Task = $SPECIAL_TASK
\nPost Backup = $POST_BACKUP_TASK
\n
\nEnvironment Variables:
\nORACLE_HOME = $ORACLE_HOME
\nORACLE_SID = $ORACLE_SID
\nORACLE_BASE = $ORACLE_BASE
\nPATH = $PATH
\n...............................................................
\n
"
echo $PARAMETER_MSG >> $LOGFILE 2> $ERRFILE
echo $PARAMETER_MSG >> $MSGFILE
bdf >> $LOGFILE 2> $ERRFILE
echo " " >> $LOGFILE 2> $ERRFILE
#
# Backup
#
if [ "$BACKUP" != "nobackup" ]; then
echo "..................................." >> $LOGFILE 2>> $ERRFILE
echo "Begin backup at `date`" >> $LOGFILE 2>> $ERRFILE
echo "..................................." >> $LOGFILE 2>> $ERRFILE
$DBBACKUP_BEGIN $DBNAME $BACKUP $SPECIAL_TASK >> $LOGFILE 2>> $ERRFILE
echo "..................................." >> $LOGFILE 2>> $ERRFILE
echo "End backup at `date`" >> $LOGFILE 2>> $ERRFILE
echo "..................................." >> $LOGFILE 2>> $ERRFILE
fi
#
# Export
#
if [ "$EXPORT" != "noexport" ]; then
echo "..................................." >> $LOGFILE 2>> $ERRFILE
echo "Begin export at `date`" >> $LOGFILE 2>> $ERRFILE
echo "..................................." >> $LOGFILE 2>> $ERRFILE
$DBEXPORT_BEGIN $DBNAME $EXPORT $SPECIAL_TASK >> $LOGFILE 2>> $ERRFILE
echo "..................................." >> $LOGFILE 2>> $ERRFILE
echo "End export at `date`" >> $LOGFILE 2>> $ERRFILE
echo "..................................." >> $LOGFILE 2>> $ERRFILE
fi
echo " " >> $MSGFILE
echo "Backup log file errors and warnings:" >> $MSGFILE
echo " " >> $LOGFILE 2>> $ERRFILE
bdf >> $LOGFILE 2>> $ERRFILE
echo " " >> $LOGFILE 2>> $ERRFILE
#
# Errors
#
grep -e error -e warning -e ORA- -e EXP- -e fatal $LOGFILE | grep -v "No
errors." >> $MSGFILE
ERRCNT=`grep -e error -e ORA- -e EXP- -e fatal $LOGFILE | grep -c -v "No
errors."`
grep -e error -e warning -e ORA- -e EXP- -e fatal $ERRFILE | grep -v "Export
terminated successfully" >> $MSGFILE
ERRCNT2=`grep -e error -e ORA- -e EXP- -e fatal $ERRFILE | grep -c -v
"Export terminated successfully"`
END_JOB="`date`"
if [ "$ERRCNT" -gt 0 -o "$ERRCNT2" -gt 0 ]
then MSG="**ALERT** $DBNAME backup failed at ${END_JOB}"
else MSG="$DBNAME backup succeeded at ${END_JOB}"
fi
echo " " >> $MSGFILE
echo "Log files: " >> $MSGFILE
echo "Log file=$LOGFILE" >> $MSGFILE
echo "Error file=$ERRFILE" >> $MSGFILE
echo "Message file=$MSGFILE" >> $MSGFILE
$TOOLS/templates/script.footer "$BEGIN_JOB" "$END_JOB" >> $MSGFILE
$TOOLS/templates/script.footer "$BEGIN_JOB" "$END_JOB" >> $LOGFILE
#
# Mail message
#
$TOOLS/mail/dba_mail_list "$MSG" $MSGFILE $DBNAME 0
#
# Space Report
#
. $ADMIN_FILE
$TOOLS/sql/space_report $DBNAME $ACCT1 $ACCT2
#
# Post Backup Task
#
$POST_BACKUP_TASK &
done
ITS Sun hot export - /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITS Mon hot export - /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITS Tue hot export - /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITS Wed hot export - /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITS Thu hot export - /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITS Fri cold export /dbadev/ITS/db_management/ITS_restrict1.sh /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITS Sat nobackup export - /db_admin/db_ITS/tools/disaster_recovery/push_export.sh ITSDEMO Sun nobackup noexport ITSDEMO Mon nobackup noexport ITSDEMO Tue nobackup noexport ITSDEMO Wed nobackup noexport ITSDEMO Thu nobackup noexport ITSDEMO Fri nobackup noexport ITSDEMO Sat nobackup export itstest Sun hot export itstest Mon hot export itstest Tue hot export itstest Wed hot export itstest Thu hot export itstest Fri cold export itstest Sat cold export PREPO Sun hot export - /dbadev/PR_server/bin/clear_unused_slots.sh PREPO Mon hot export - /dbadev/PR_server/bin/clear_unused_slots.sh PREPO Tue hot export - /dbadev/PR_server/bin/clear_unused_slots.sh PREPO Wed hot export - /dbadev/PR_server/bin/clear_unused_slots.sh PREPO Thu hot export - /dbadev/PR_server/bin/clear_unused_slots.sh PREPO Fri cold export /dbadev/PR/db_management/PR_restrict1.sh /dbadev/PR_server/bin/clear_unused_slots.sh PREPO Sat nobackup export PRTEST Sun hot noexport PRTEST Mon hot export PRTEST Tue hot export PRTEST Wed hot export PRTEST Thu hot export PRTEST Fri cold export PRTEST Sat cold export
#! /bin/sh
# name $TOOLS/db_mgmt/backup/dbbackup_begin
#
# purpose Perform a backup of a database.
#
# usage $TOOLS/db_mgmt/backup/dbbackup_begin dbname <backup>
# <export> <special task>
#
# parameters $1=dbname
# $2=backup type
# $3=special task
#
# ..............................................................
# set local variables
# ..............................................................
ERRMSG='
$TOOLS/db_mgmt/backup/dbbackup_begin: syntax error:
dbbackup_begin dbname <hot|cold|nobackup> <special task>.
'
DBF_REPORT="$TOOLS/db_mgmt/dbf_report "
#
# parameters
#
if [ "$1" ]
then DBNAME=$1
else echo $ERRMSG
exit 1
fi
if [ "$2" ]
then BACKUP=$2
else echo $ERRMSG
exit 1
fi
if [ "$3" -a "$3" != "-" ]
then SPECIAL_TASK=$3
else SPECIAL_TASK=" "
fi
#
# booleans
#
TRUE=0
FALSE=1
SHUTDOWN_FAILED_B=1
RESTART_FAILED_B=1
OMAIL_B="false"
#
# local variables
#
JOBNAME="$TOOLS/db_mgmt/backup/dbbackup_begin"
JOBNAME_SHORT="dbbackup_begin"
ADMIN_FILE="/db_admin/db_$DBNAME/tools/backup/${DBNAME}_backup_admin.sh"
DBBACKUP="/db_admin/db_$DBNAME/tools/backup/${DBNAME}_backup_`date
'+%y%m%d'.dyn"
WALL="/etc/wall"
CKSUM="/bin/cksum"
CMP="/bin/cmp"
ANALYZE="$TOOLS/sql/analyze"
ANALYZE_CREATE="$TOOLS/sql/analyze_create"
BANNER="/db_admin/db_${DBNAME}/banner/status"
CKSUM_SIZE_ERR="${JOBNAME_SHORT}: fatal error in cksum size comparison."
CKSUM_VALUE_ERR="${JOBNAME_SHORT}: fatal error in cksum value comparison."
CKSUM_VALUE_WAR="${JOBNAME_SHORT}: warning in cksum value comparison."
CMP_ERR="${JOBNAME_SHORT}: fatal error in cmp."
DBSERR="${JOBNAME_SHORT}: fatal error in dbs file copy."
DBSWAR="${JOBNAME_SHORT}: warning with database file copy."
ARCERR="${JOBNAME_SHORT}: fatal error in archive log copy."
if [ "$OMAIL" = "true" ]
then OMAIL_B="true"
else OMAIL_B="false"
fi
THISNODE=`uname -n`
STATFS="$TOOLS/source/system/statfs.exe "
#
# node specific logic
#
if [ "$THISNODE" = "prodhp1" ]
then TMP='/bugtmp'
else TMP='/dbatmp'
fi
# ..............................................................
# begin
# ..............................................................
#
# run the orauser
#
. /db_admin/db_$DBNAME/.orauser_$DBNAME
. $ADMIN_FILE
#
# check for database online
#
STATUS=`ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep "$DBNAME " |
grep ora_ | grep -v grep`
if [ $? != 0 ]; then
if [ "$BACKUP" = "hot" ]; then
echo "${JOBNAME_SHORT}: Error - database is not online."
echo "${JOBNAME_SHORT}: process listing is to follow..."
echo "${JOBNAME_SHORT}: ps -fu oracle | awk '{ print $8" "$9" "$10" " }' |
grep -v grep | grep "$DBNAME " | grep ora_"
ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep -v grep | grep
"$DBNAME " | grep ora_
echo "${JOBNAME_SHORT}: exiting."
exit
else
echo "${JOBNAME_SHORT}: Database is already down. Continuing."
echo "${JOBNAME_SHORT}: kill sqlnet v1 processes."
$TOOLS/unix/kill_processes.sh oracle${DBNAME}
fi
else
if [ "$BACKUP" = "cold" ]; then
#
# broadcast shutdowns
#
$WALL /db_admin/db_${DBNAME}/banner/${DBNAME}_shutdown_15min.banner
sleep 600
$WALL /db_admin/db_${DBNAME}/banner/${DBNAME}_shutdown_5min.banner
sleep 240
$WALL /db_admin/db_${DBNAME}/banner/${DBNAME}_shutdown_1min.banner
sleep 60
#
# shutdown
#
echo "${JOBNAME_SHORT}: Shutting down abort."
/db_admin/db_${DBNAME}/sql/shutdown_abort_${DBNAME}.sh
#
# kill sqlnet processes
#
echo "${JOBNAME_SHORT}: kill sqlnet v1 processes."
$TOOLS/unix/kill_processes.sh oracle${DBNAME}
fi
fi
if [ "$BACKUP" = "cold" ]; then
echo "${JOBNAME_SHORT}: Starting up restrict."
/db_admin/db_${DBNAME}/sql/startup_restrict_${DBNAME}.sh
fi
# .................................................................
# begin backup
# .................................................................
#
# build database file list
#
echo "${JOBNAME_SHORT}: building dynamic parameter file."
sqlplus -s / > $DBBACKUP <<EOF
set pagesize 0
set linesize 2048
set heading off
set feedback off
column TNAME format a20
column FNAME format a80
select tablespace_name TNAME,
file_name FNAME,
' \$BACKUPDIR'||
substr(file_name,instr(translate(file_name,'1234567890'
,'0000000000'),'0'),
instr(file_name,'/',1,2)- instr(translate(file_name,'1234567890',
'0000000000'),'0'))
from sys.dba_data_files
order by tablespace_name,file_name;
exit
EOF
#
# Check dynamic file for size
#
DYNSIZE=`$STATFS $DBBACKUP st_size`
if [ $DYNSIZE = 0 ]; then
echo "${JOBNAME_SHORT}: fatal error during backup file creation. Backup
aborting."
echo "${JOBNAME_SHORT}: cat $DBBACKUP"
cat $DBBACKUP
return
fi
#
# Get file list
#
echo " "
echo "${JOBNAME_SHORT}: Print before backup file listing."
$DBF_REPORT $DBNAME
#
# shutdown
#
if [ $BACKUP = "cold" ]; then
#
# Build analyze script
#
echo " "
echo "${JOBNAME_SHORT}: Building analyze script."
$ANALYZE_CREATE $DBNAME
echo "${JOBNAME_SHORT}: Shutting down immediate."
. /db_admin/db_${DBNAME}/sql/shutdown_${DBNAME}.sh
STATUS=`ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep -v grep |
grep "$DBNAME " | grep -v ${DBNAME}1 | grep ora_`
if [ $? = 0 ]; then
echo "${JOBNAME_SHORT}: error in shutdown. Cold backup aborting."
SHUTDOWN_FAILED_B="$TRUE"
else
echo "${JOBNAME_SHORT}: Database is shutdown."
if [ "$OMAIL_B" = "true" ]; then
. $TOOLS/mail/move_mail_logs
echo "${JOBNAME_SHORT}: kill OMail processes."
$TOOLS/unix/kill_processes.sh msync
$TOOLS/unix/kill_processes.sh mpost
$TOOLS/unix/kill_processes.sh mcollect
$TOOLS/unix/kill_processes.sh mremote
fi
echo "${JOBNAME_SHORT}: move alert log."
mv /db_admin/db_${DBNAME}/bdump/alert_${DBNAME}.log \
/db_admin/db_${DBNAME}/bdump/alert_${DBNAME}.log_`date '+%y%m%d'`
fi
fi
#
# delete last backup files
#
if [ $SHUTDOWN_FAILED_B = $TRUE ]; then
echo "${JOBNAME_SHORT}: Skipping backup file deletion."
else
echo " "
echo "${JOBNAME_SHORT}: Deleting previous backup..."
if [ -f $BACKUPDIR1/${DBNAME}_*.dbf ]; then rm $BACKUPDIR1/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR2/${DBNAME}_*.dbf ]; then rm $BACKUPDIR2/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR3/${DBNAME}_*.dbf ]; then rm $BACKUPDIR3/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR4/${DBNAME}_*.dbf ]; then rm $BACKUPDIR4/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR5/${DBNAME}_*.dbf ]; then rm $BACKUPDIR5/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR6/${DBNAME}_*.dbf ]; then rm $BACKUPDIR6/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR7/${DBNAME}_*.dbf ]; then rm $BACKUPDIR7/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR8/${DBNAME}_*.dbf ]; then rm $BACKUPDIR8/${DBNAME}_*.dbf;
fi
if [ -f $BACKUPDIR1/${DBNAME}_*.ctl ]; then rm $BACKUPDIR1/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR2/${DBNAME}_*.ctl ]; then rm $BACKUPDIR2/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR3/${DBNAME}_*.ctl ]; then rm $BACKUPDIR3/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR4/${DBNAME}_*.ctl ]; then rm $BACKUPDIR4/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR5/${DBNAME}_*.ctl ]; then rm $BACKUPDIR5/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR6/${DBNAME}_*.ctl ]; then rm $BACKUPDIR6/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR7/${DBNAME}_*.ctl ]; then rm $BACKUPDIR7/${DBNAME}_*.ctl;
fi
if [ -f $BACKUPDIR8/${DBNAME}_*.ctl ]; then rm $BACKUPDIR8/${DBNAME}_*.ctl;
fi
if [ $BACKUP = "cold" ]; then
if [ -f $BACKUPDIR1/${DBNAME}_*.log ]; then rm
$BACKUPDIR1/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR2/${DBNAME}_*.log ]; then rm
$BACKUPDIR2/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR3/${DBNAME}_*.log ]; then rm
$BACKUPDIR3/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR4/${DBNAME}_*.log ]; then rm
$BACKUPDIR4/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR5/${DBNAME}_*.log ]; then rm
$BACKUPDIR5/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR6/${DBNAME}_*.log ]; then rm
$BACKUPDIR6/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR7/${DBNAME}_*.log ]; then rm
$BACKUPDIR7/${DBNAME}_*.log; fi
if [ -f $BACKUPDIR8/${DBNAME}_*.log ]; then rm
$BACKUPDIR8/${DBNAME}_*.log; fi
else
if [ -f $CONBACK1/${DBNAME}_*.ctl ]; then rm $CONBACK1/${DBNAME}_*.ctl; fi
fi
fi
#
# Begin backup
#
if [ $SHUTDOWN_FAILED_B = $FALSE ]; then
echo " "
echo "${JOBNAME_SHORT}: Starting $BACKUP backup using $DBBACKUP..."
#
# check hot backup status
#
if [ $BACKUP = "hot" ]; then
sqldba lmode=y <<EOF
connect internal
select * from v_backup;
exit
EOF
fi
#
# begin reading dynamic parameter file
#
cat $DBBACKUP | while read TABLESPACE FILE DIR
do
if [ $BACKUP = "hot" ]; then
sqldba lmode=y <<EOF
connect internal
alter tablespace $TABLESPACE begin backup;
exit
EOF
fi
#
# copy a database file
#
BACKUPDIR=`eval echo \$DIR`
echo "${JOBNAME_SHORT}: cp $FILE $BACKUPDIR"
cp $FILE $BACKUPDIR
STATUS=$?
if [ "$STATUS" != 0 ]; then
echo "${JOBNAME_SHORT}: error during file copy $FILE."
echo "${JOBNAME_SHORT}: $CKSUM $FILE $BACKUPDIR/$DATAFILE"
$CKSUM $FILE $BACKUPDIR/$DATAFILE
fi
DATAFILE=`basename $FILE`
if [ $BACKUP = "hot" ]; then
echo "${JOBNAME_SHORT}: ls -l $FILE $BACKUPDIR/$DATAFILE"
ls -l $FILE $BACKUPDIR/$DATAFILE
# echo "${JOBNAME_SHORT}: $CKSUM $FILE $BACKUPDIR/$DATAFILE"
# $CKSUM $FILE $BACKUPDIR/$DATAFILE
# CKSUM_OUT=`$CKSUM $FILE $BACKUPDIR/$DATAFILE`
# echo $CKSUM_OUT | read VALUE1 SIZE1 NAME1 VALUE2 SIZE2 NAME2
# if [ "$VALUE1" != "$VALUE2" ]; then
# echo "$CKSUM_VALUE_WAR"
# fi
# if [ "$SIZE1" != "$SIZE2" ]; then
# echo "$CKSUM_SIZE_ERR"
# fi
else
echo "${JOBNAME_SHORT}: $CMP $FILE $BACKUPDIR/$DATAFILE"
$CMP $FILE $BACKUPDIR/$DATAFILE
STATUS="$?"
if [ "$STATUS" != 0 ]; then
echo "$CMP_ERR"
fi
fi
if [ $BACKUP = "hot" ]; then
sqldba lmode=y <<EOF
connect internal
alter tablespace $TABLESPACE end backup;
exit
EOF
fi
done
#
# check hot backup status
#
if [ $BACKUP = "hot" ]; then
sqldba lmode=y <<EOF
connect internal
select * from v_backup;
exit
EOF
fi
#
# Backup control files and online redo logs
#
if [ $BACKUP = "hot" ]; then
echo "${JOBNAME_SHORT}: backing up controlfile to
${CONBACK1}/${DBNAME}_control01.ctl"
sqldba lmode=y <<EOF
connect internal
alter database backup controlfile to '${CONBACK1}/${DBNAME}_control01.ctl';
exit
EOF
#
else
#
# control files
#
echo "${JOBNAME_SHORT}: backing up all control files..."
if [ -f /dbf1/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf1/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR1; fi
if [ -f /dbf2/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf2/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR2; fi
if [ -f /dbf3/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf3/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR3; fi
if [ -f /dbf4/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf4/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR4; fi
if [ -f /dbf5/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf5/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR5; fi
if [ -f /dbf6/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf6/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR6; fi
if [ -f /dbf7/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf7/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR7; fi
if [ -f /dbf8/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf8/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR8; fi
if [ -f /dbf9/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf9/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR9; fi
if [ -f /dbf10/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf10/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR10; fi
if [ -f /dbf11/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf11/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR11; fi
if [ -f /dbf12/$DBNAME/${DBNAME}_*.ctl ]; then cp
/dbf12/$DBNAME/${DBNAME}_*.ctl $BACKUPDIR12; fi
#
# redo logs
#
echo "${JOBNAME_SHORT}: backing up all online redo logs..."
if [ -f /dbf1/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf1/$DBNAME/${DBNAME}_*.log $BACKUPDIR1; fi
if [ -f /dbf2/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf2/$DBNAME/${DBNAME}_*.log $BACKUPDIR2; fi
if [ -f /dbf3/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf3/$DBNAME/${DBNAME}_*.log $BACKUPDIR3; fi
if [ -f /dbf4/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf4/$DBNAME/${DBNAME}_*.log $BACKUPDIR4; fi
if [ -f /dbf5/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf5/$DBNAME/${DBNAME}_*.log $BACKUPDIR5; fi
if [ -f /dbf6/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf6/$DBNAME/${DBNAME}_*.log $BACKUPDIR6; fi
if [ -f /dbf7/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf7/$DBNAME/${DBNAME}_*.log $BACKUPDIR7; fi
if [ -f /dbf8/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf8/$DBNAME/${DBNAME}_*.log $BACKUPDIR8; fi
if [ -f /dbf9/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf9/$DBNAME/${DBNAME}_*.log $BACKUPDIR9; fi
if [ -f /dbf10/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf10/$DBNAME/${DBNAME}_*.log $BACKUPDIR10; fi
if [ -f /dbf11/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf11/$DBNAME/${DBNAME}_*.log $BACKUPDIR11; fi
if [ -f /dbf12/$DBNAME/${DBNAME}_*.log ]; then cp
/dbf12/$DBNAME/${DBNAME}_*.log $BACKUPDIR12; fi
fi
#
# archive logs
#
#
# force a log switch
#
if [ $BACKUP = "hot" ]; then
sqldba lmode=y <<EOF
connect internal
alter system switch logfile;
exit
EOF
#
# wait for archive log copy to complete
#
sleep 120
fi
#
# copy archive logs
#
if [ -f $ARCOLD/${DBNAME}_*.arc ]; then
echo " "
echo "${JOBNAME_SHORT}: Delete previous backup archive logs..."
ls -l $ARCOLD/${DBNAME}_*.arc
for I in $ARCOLD/${DBNAME}_*.arc
do
ls -l $I
ARCNAME=`basename $I`
rm $ARCOLD/$ARCNAME
STATUS="$?"
if [ "$STATUS" != 0 ]; then
echo "${JOBNAME_SHORT}: error deleting old archive log:
$ARCOLD/$ARCNAME"
fi
done
else echo " "
echo "${JOBNAME_SHORT}: No old archive logs to delete."
fi
if [ -f $ARC/${DBNAME}_*.arc ]; then
echo " "
echo "${JOBNAME_SHORT}: Copying archive logs..."
for I in $ARC/${DBNAME}_*.arc
do
ls -l $I
ARCNAME=`basename $I`
echo "${JOBNAME_SHORT}: cp $ARC/$ARCNAME $ARCOLD"
cp $ARC/$ARCNAME $ARCOLD
STATUS="$?"
if [ "$STATUS" != 0 ]; then
echo "$ARCERR"
fi
echo "${JOBNAME_SHORT}: $CMP $ARC/$ARCNAME $ARCOLD/$ARCNAME"
$CMP $ARC/$ARCNAME $ARCOLD/$ARCNAME
STATUS="$?"
if [ "$STATUS" != 0 ]; then
echo "$CMP_ERR"
echo "${JOBNAME_SHORT}: $CKSUM $ARC/$ARCNAME $ARCOLD/$ARCNAME"
$CKSUM $ARC/$ARCNAME $ARCOLD/$ARCNAME
echo "${JOBNAME_SHORT}: Archive log deletion skipped."
else
# echo "${JOBNAME_SHORT}: $CKSUM $ARC/$ARCNAME $ARCOLD/$ARCNAME" # $CKSUM $ARC/$ARCNAME $ARCOLD/$ARCNAME
# CKSUM_OUT=`$CKSUM $ARC/$ARCNAME $ARCOLD/$ARCNAME`
# echo $CKSUM_OUT | read VALUE1 SIZE1 NAME1 VALUE2 SIZE2 NAME2
# if [ "$VALUE1" != "$VALUE2" -o "$SIZE1" != "$SIZE2" ]; then
# echo "$DIFFERR"
# echo "${JOBNAME_SHORT}: Archive log deletion skipped."
# else rm $ARC/$ARCNAME
# if [ $? != 0 ]; then
# echo "${JOBNAME_SHORT}: Archive deletion failed."
# fi
# fi
rm $ARC/$ARCNAME
if [ $? != 0 ]; then
echo "${JOBNAME_SHORT}: Archive deletion failed."
fi
fi
done
else echo "${JOBNAME_SHORT}: Found no archives to copy."
fi
#
# startup
#
if [ $BACKUP = "cold" ]; then
#
# dba mode tasks
#
echo "${JOBNAME_SHORT}: Begin startup restrict..."
/db_admin/db_${DBNAME}/sql/startup_restrict_${DBNAME}.sh
STATUS=`ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep -v grep |
grep "$DBNAME " | grep ora_`
if [ $? != 0 ]; then
echo "${JOBNAME_SHORT}: error in restrict startup."
else
echo "${JOBNAME_SHORT}: Begin analyze at `date`..."
$ANALYZE $DBNAME
echo "${JOBNAME_SHORT}: End analyze at `date`..."
#
# special task
#
if [ "$SPECIAL_TASK" != " " ]; then
echo "${JOBNAME_SHORT}: Running DBA mode task..."
. ${SPECIAL_TASK} > $TMP/${DBNAME}_restrict.log 2>
$TMP/${DBNAME}_restrict.err
# sqlplus / @${SPECIAL_TASK} ${SPECIAL_TASK}.log 2>>
${SPECIAL_TASK}.err
fi
fi
echo "${JOBNAME_SHORT}: Shutdown..."
/db_admin/db_${DBNAME}/sql/shutdown_${DBNAME}.sh
STATUS=`ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep -v grep |
grep "$DBNAME " | grep ora_`
if [ $? = 0 ]; then
echo "${JOBNAME_SHORT}: error in shutdown following analyze..."
else
echo "${JOBNAME_SHORT}: End shutdown..."
fi
#
# startup
#
/db_admin/db_${DBNAME}/sql/startup_exclusive_${DBNAME}.sh
STATUS=`ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep -v grep |
grep "$DBNAME " | grep ora_`
if [ $? != 0 ]; then
echo "${JOBNAME_SHORT}: error in database startup."
RESTART_FAILED_B=0
else
echo "${JOBNAME_SHORT}: Database restarted."
echo "1" > $BANNER
$WALL /db_admin/db_${DBNAME}/banner/${DBNAME}_db_online.banner
fi
fi
#
# Get file list
#
echo " "
echo "${JOBNAME_SHORT}: Print after file listing..."
$DBF_REPORT $DBNAME
fi
#
# Oracle*Mail
#
if [ "$OMAIL_B" = "true" ]; then
echo "${JOBNAME_SHORT}: Running mverify."
mverify
echo "${JOBNAME_SHORT}: Completed mverify."
fi
#! /bin/sh
# name $TOOLS/db_mgmt/backup/dbexport_begin
#
# purpose Perform a backup of a database.
#
# usage $TOOLS/db_mgmt/backup/dbexport_begin dbname
# <export> <special task>
#
# parameters $1=dbname
# $2=export
# $3=special task
#
..............................................................
# set local variables
# ..............................................................
ERRMSG='
$TOOLS/db_mgmt/backup/dbexport_begin: syntax error:
dbexport_begin dbname <export|noexport> <special task>.
'
#
# parameters
#
if [ "$1" ]
then DBNAME=$1
else echo $ERRMSG
exit 1
fi
if [ "$2" ]
then EXPORT=$2
else echo $ERRMSG
exit 1
fi
if [ "$3" ]
then SPECIAL_TASK=$3
else SPECIAL_TASK=" "
fi
#
# booleans
#
TRUE=0
FALSE=1
SHUTDOWN_FAILED_B=1
RESTART_FAILED_B=1
OMAIL_B="false"
#
# local variables
#
JOBNAME="$TOOLS/db_mgmt/backup/dbexport_begin"
JOBNAME_SHORT="dbexport_begin"
ADMIN_FILE="/db_admin/db_$DBNAME/tools/backup/${DBNAME}_backup_admin.sh"
CMP="/bin/cmp"
PARFILE="/db_admin/db_$DBNAME/tools/backup/${DBNAME}_export.par"
CMP_ERR="${JOBNAME_SHORT}: fatal error in cmp."
EXPERR="${JOBNAME_SHORT}: fatal error in export file copy."
# ..............................................................
# begin
# ..............................................................
#
# run the orauser
#
. /db_admin/db_$DBNAME/.orauser_$DBNAME
. $ADMIN_FILE
#
# check for database online
#
STATUS=`ps -fu oracle | awk '{ print $8" "$9" "$10" " }' | grep -v grep | grep
$DBNAME" " | grep ora_`
if [ $? != 0 ]; then
echo "${JOBNAME_SHORT}: error - database not online."
echo "${JOBNAME_SHORT}: process listing is to follow..."
echo "${JOBNAME_SHORT}: ps -fu oracle | grep -v grep | awk '{ print $8" "$9"
"$10" " }' | grep $DBNAME" " | grep ora_"
ps -fu oracle | grep -v grep | awk '{ print $8" "$9" "$10" " }' | grep
$DBNAME" " | grep ora_
echo "${JOBNAME_SHORT}: exiting."
exit 1
fi
# .................................................................
# Export
# .................................................................
echo " "
echo "${JOBNAME_SHORT}: List previous export files..."
ls -l $EXPORTDIR/${DBNAME}.exp*
ls -l $EXPORTDIROLD/${DBNAME}.exp*
#
# delete old export
#
if [ -f $EXPORTDIROLD/${DBNAME}.exp_old ]; then
rm $EXPORTDIROLD/${DBNAME}.exp_old
if [ $? != 0 ]; then
echo "${JOBNAME_SHORT}: error deleting previous export."
else
echo "${JOBNAME_SHORT}: Deleted previous export file."
fi
else echo "${JOBNAME_SHORT}: Found no previous export file."
fi
#
# copy current export to old
#
if [ -f $EXPORTDIR/${DBNAME}.exp ]; then
chmod 642 $EXPORTDIR/${DBNAME}.exp
echo "${JOBNAME_SHORT}: cp $EXPORTDIR/${DBNAME}.exp $EXPORTDIROLD"
cp $EXPORTDIR/${DBNAME}.exp $EXPORTDIROLD
if [ $? != 0 ]; then
echo "$EXPERR"
else echo "${JOBNAME_SHORT}: $CMP $EXPORTDIR/${DBNAME}.exp
$EXPORTDIROLD/${DBNAME}.exp"
$CMP $EXPORTDIR/${DBNAME}.exp $EXPORTDIROLD/${DBNAME}.exp
STATUS="$?"
if [ "$STATUS" != 0 ]; then
echo "$CMP_ERR"
fi
echo "${JOBNAME_SHORT}: mv ${EXPORTDIROLD}/${DBNAME}.exp
${EXPORTDIROLD}/${DBNAME}.exp_old"
mv ${EXPORTDIROLD}/${DBNAME}.exp ${EXPORTDIROLD}/${DBNAME}.exp_old
if [ $? != 0 ]; then
echo "$EXPERR"
fi
rm $EXPORTDIR/${DBNAME}.exp
if [ $? != 0 ]; then
echo "${JOBNAME_SHORT}: error deleting export file."
exit
fi
fi
else echo "${JOBNAME_SHORT}: Found no current export file to copy."
fi
#
# Begin export
#
exp parfile=$PARFILE
echo " "
echo "${JOBNAME_SHORT}: Export complete. "
ls -l $EXPORTDIR/${DBNAME}.exp*
ls -l $EXPORTDIROLD/${DBNAME}.exp*
set feedback off
set pagesize 0
set heading off
set echo off
set termout off
spool hot_backup.dat
select tablespace_name||' '||file_name||' '||'ORADISK'||
substr(file_name,INSTR(TRANSLATE(FILE_NAME,'1234567890',
'0000000000'),'0'),
INSTR(FILE_NAME,':')-
INSTR(TRANSLATE(FILE_NAME,'1234567890',
'0000000000'),'0'))||':'
FROM SYS.DBA_DATA_FILES order by tablespace_name;
spool off;
EXIT