This chapter contains a complete listing of the nsrdmo shell script.
#!/bin/sh
#
# @(#)nsrdmo.sh 1.7 96/12/20 Copyright (c) 1996, Legato Systems, Inc.
# All rights reserved.
#
# nsrdmo
#
# This script is part of the Database Module for Oracle.
# Modification of this script should be done with care and only after reading
# the administration manual included with this product.
#
# This script should only be run as part of a scheduled savegroup.
#
# Returns 0 on success; 1 on failure.
#
# Configuration variables, modifiable by users.
#
#
# Variable: OBK_HOME
# Default value: site specific
# Description: Specifies where the Enterprise Backup Utility is installed.
# This variable must be configured in order to locate the obackup executable
OBK_HOME=
#
# Variables: BRD_TOT_TIME, BRD_SAMP_TIME, BRD_ERR_TIME, BRD_RETRIES
# Description: The noted environment variables allow the user to
# configure the EBU Instance Manager (brd). The default settings for these
# variables as specified by Oracle are not compatible with scheduled saves
# from NetWorker where obackup starts a new brd process. If brd is started
# using the default values for these variables then savegrp will appear to
# appear to hang before backing up the indexes. The following settings
# will prevent the described behaviour by causing brd to exit seconds after
# the backup is completed. Consult the Oracle7 Enterprise Backup Utility
# Administrator's Guide Release 2.0 page 6-4 for more information about
# these variables.
#
# Variable: BRD_TOT_TIME
# Default value: 300
# Oracle Default value: 172800
# Description: Once the Instance Manager (brd) becomes idle, it will wait for
# BRD_TOT_TIME seconds for any activity by obackup before it exits.
# Caution: setting this value too low may cause brd to exit before obackup
# can establish a connection to the Backup Catalog. If this happens obackup
# will fail with the following error:
# OBK-2464: Internal error. Instance Manager process was not started
#
BRD_TOT_TIME=300
#
# Variable: BRD_SAMP_TIME
# Default value: 1
# Oracle Default value: 300
# Description: The Instance Manager (brd) checks the Backup Catalog for any
# active jobs in the interval of BRD_SAMP_TIME seconds.
#
BRD_SAMP_TIME=1
#
# Variable: BRD_ERR_TIME
# Default value: 1
# Oracle Default value: 900
# Description: If the Instance Manager (brd) detects an error it waits
# BRD_ERR_TIME before retrying the catalog.
#
BRD_ERR_TIME=1
#
# Variable: BRD_RETRIES
# Default value: 1
# Oracle Default value: 3
# Description: The Instance Manager (brd) looks for active jobs BRD_RETRIES
# number of times before going to sleep.
#
BRD_RETRIES=1
# Variable: PATH
# Default value: platform dependent
# Set up PATH environment variable. This must be configured to include
# path to the NetWorker program "mminfo" and /usr/etc.
# This variable must be configured to locate the correct executables
# platform-specific paths
#
# SGI IRIX
#PATH=/bin:/usr/sbin:/usr/etc
# HP-UX 10.x
#PATH=/opt/networker/bin:/usr/bin
# HP-UX 9.x
#PATH=/usr/networker/bin:/usr/bin
# Solaris
#PATH=/bin:/usr/sbin:/usr/bin
# AIX
#PATH=/usr/bin
# All Platforms
PATH=/bin:/usr/sbin:/usr/etc:/opt/networker/bin:/usr/networker/bin
# For HP-UX only
# Variable: SHLIB_PATH
# Default value: /usr/lib
# obackup requires this variable to be set in order to locate the
# libobk.sl shared library.
# This variable should be configured on HP-UX systems.
#
SHLIB_PATH=/usr/lib
#
# Variable: PRECMD
# Default value: NONE
# Description: This variable can be used to run a command before oracle
# backups.
# The pre command must return a non zero exit code if it fails. It is
# the resposibility of the script writer to ensure that the script
# returns the proper exit code. Please refer chapter 5 of the
# BusinesSuite Module for Oracle Administrator's Guide UNIX Version
# for templates and examples.
# Setting this variable is optional.
#
PRECMD=
#
# Variable: POSTCMD
# Default value: NONE
# Description: This variable can be used to run a command after oracle
# backups have completed.
# The post command must return a non zero exit code if it fails. It is
# the resposibility of the script writer to ensure that the script
# returns the proper exit code. Please refer chapter 5 of the
# BusinesSuite Module for Oracle Administrator's Guide UNIX Version
# for templates and examples.
# Setting this variable is optional.
#
POSTCMD=
#
# Variable: NSR_DATA_VOLUME_POOL
# Default value: none
# Description: If this variable is set to name a media pool, then database
# backups will be directed to the named media pool.
# If not set DMO will use the "Default" pool.
# Setting this variable is optional.
#
NSR_DATA_VOLUME_POOL=
#
# Variable: NSR_NO_BUSY_ERRORS
# Default value: FALSE
# Description: If this variable is set to a value of TRUE then DMO will
# will fail immediately if it encounters a busy server while initializing
# the session.
# If this variable is not set DMO will fail immediately
# Setting this variable is optional.
#
NSR_NO_BUSY_ERRORS=FALSE
#
# Variable: NSR_CHECKSUM
# Default value: FALSE
# Description: This environment variable specifies checksumming
# is performed on the data.
# If this variable is not set DMO will not use checksumming by default.
# Setting this variable is optional.
#
NSR_CHECKSUM=FALSE
#
# Variable: NSR_ENCRYPTION
# Default value: FALSE
# Description: This environment variable specifies encryption
# is performed on the data.
# If this variable is not set DMO will not use encryption by default.
# Setting this variable is optional.
#
NSR_ENCRYPTION=FALSE
#
# Variable: NSR_COMPRESSION
# Default value: FALSE
# Description: This environment variable specifies compression
# is performed on the data.
# If this variable is not set DMO will not use compression by default.
# Setting this variable is optional.
#
NSR_COMPRESSION=FALSE
#
# Variable: NSR_DEBUG_FILE
# Default value: none
# Description: To enable debugging output for DMO set the following to
# an appropriate path and file name.
# Setting this variable is for debugging purposes only
#
#NSR_DEBUG_FILE=
#
# Not Supported
# Variable: OBK_DEVDBG
# Default value: none
# Description: Set as instructed by Technical Support.
# Setting this variable is for debugging purposes only
#OBK_DEVDBG=0x00000000
#
# Shell and environment variables not configured by user.
#
NSR_SERVER="" # Server to backup to (passed by savegrp)
echo=echo # echo command
Verbose=0 # Are we generating verbose output?
Pid=0 # Which process to kill when we are cancelled
#
# usage(): display correct usage for nsrdmo
#
usage()
{
${echo} \
"This command should only be executed by savegroup."
${echo} \
"usage: $0 [<options>]
Options:
[ -BEiLnqvx ] [ -s server ] [ -N name ] [ -e expiration ]
[ -f dirfile ] [ -b pool ] [ -F file ] [ -g group ]
[ -l level ] [ -t date ] [ -m masquerade ] [ -W width ] [ path ... ]
For an explanation of all options, see the save(8) man page.
"
exit 1
}
#
# Run the pre-processing command. This can be used to shut down
# a database.
#
run_precmd()
{
if [ "${PRECMD}" = "" ]; then
return 0
fi
vecho
vecho "Executing pre-processing command `${PRECMD}' at `date`"
vecho
${PRECMD}
return_status=$?
vecho
vecho "Pre-processing command `${PRECMD}' finished at `date`"
vecho
return $return_status
}
#
# Run post-processing command. This can be used to start a database.
#
#
run_postcmd()
{
if [ "${POSTCMD}" = "" ]; then
return 0
fi
vecho
vecho "Executing post-processing command `${POSTCMD}' at `date`"
vecho
${POSTCMD}
return_status=$?
vecho
vecho "Post-processing command `${POSTCMD}' finished at `date`"
vecho
return $return_status
}
#
# Process arguments supplied by savegrp. Must handle any arguments save(8)
# accepts.
#
# Sample list of arguments
# save -s empire -g Default -n -LL -m empire -l full -W78 -N /usr /usr
#
processargs()
{
while [ $# -gt 0 ]; do
case "$1" in
-s ) # Specify server
NSR_SERVER=$2
shift
shift
;;
-B ) # Force connecting directory information
Bflag=y
shift
;;
-E ) # Estimate save set size
Eflag=y
shift
;;
-i ) # Ignore any directives
iflag=y
shift
;;
-LL ) # Force local backup and cause extra line to be printed
LLflag=y
shift
;;
-n) # No save
nflag=y
shift
;;
-q ) # Quiet
qflag=y
shift
;;
-v ) # Verbose
Verbose=1
shift
;;
-N ) # Save set name
Saveset_name=$2
shift
shift
;;
-e ) # Specify alternate expiration time
NSR_SAVESET_EXPIRATION=$2
shift
shift
;;
-f ) # Specify directives
Directives=$2
shift
shift
;;
-b ) # Specify pool
NSR_DATA_VOLUME_POOL=$2
shift
shift
;;
-F ) # Specify file for modification time comparison (not used)
Directives=$2
shift
shift
;;
-g ) # Specify group
Group=$2
shift
shift
;;
-l ) # Specify level
Level=$2
shift
shift
;;
-t ) # Specify time for comparison
Comparison_time=$2
shift
shift
;;
-m ) # Masquerade as another program
Masquerade=$2
shift
shift
;;
-W ) # Specify width of output
Output_width=$2
shift
shift
;;
*) # Name of the obackup script
obk_commands=$1
shift
;;
esac
done
}
#
#
# Make sure all environment variables are exported.
#
export_environment_variables()
{
export NSR_SERVER
export NSR_COMPRESSION
export NSR_ENCRYPTION
export NSR_CHECKSUM
export NSR_SAVESET_EXPIRATION
export OBK_HOME
export PATH
# export NSR_DATA_VOLUME_POOL
# The following variables control EBU Instance Manager operation
export BRD_TOT_TIME
export BRD_SAMP_TIME
export BRD_ERR_TIME
export BRD_RETRIES
# The following variable is required on HP-UX
export SHLIB_PATH
#
# The following variables are for debugging only.
# export NSR_DEBUG_FILE
# export OBK_DEVDBG
}
#
# backup_oracle: run obackup to backup the oracle database
# The particulars of the backup are contained in the obackup
# command script which is passed to obackup
# nsrobkstart must be on the PATH.
#
backup_oracle()
{
# $OBK_HOME/bin/obackup $obk_commands
nsrobkstart $obk_commands &
Pid=$!
wait $Pid
obackup_status=$?
if [ $obackup_status != 0 ]; then
echo "obackup returned status of "$obackup_status
fi
}
#
# Echo the arguments only if in verbose mode.
#
vecho()
{
if [ $Verbose -gt 0 ]; then
echo $*
fi
}
#
# Display output exactly like save does to keep savegroup happy.
# displays size information for database backups.
#
display_summary()
{
Hostname=`uname -n`
/bin/echo "$Hostname: Oracle Backup Status level=full, \c"
mminfo -s $NSR_SERVER -q"savetime>=$Start_time,savetime<=$End_time"\
-r "name,totalsize(1),nfiles(1)" | awk \
'BEGIN {total_kb=0; total_mb=0; total_files=0; files_str="file"} \
{ \
if ( $3 == "KB" ) { \
total_kb += $2 \
} else { \
total_mb += $2 \
} \
total_files += $4 \
} \
END { if (total_files > 1) { \
files_str = "files" \
} else { \
files_str = "file" \
} \
if (total_kb > 1000) { \
total_mb += (total_kb / 1000) \
} \
if (total_mb > 0) { \
printf "%d.%d MB 00:00:00 %d %s\n", \
total_mb, total_kb % 1000, total_files, files_str \
} else { \
printf "%d KB 00:00:00 %d %s\n", total_kb, total_files, files_str \
} \
}'
return 0
}
#
# Handle cancel signals sent by savegrp when user stops the group.
# obackup likes to be cancelled with a SIGHUP
#
handle_signal()
{
if [ $Pid != 0 ]; then
kill -1 $Pid
fi
exit 1
}
#
# The main portion of this shell.
#
# Process arguments, export environment
# Execute a pre-command (if any)
# Execute obackup backup
# Execute a post-command
# Display save output
processargs $*
#
# Make sure we respond to savegrp cancellations.
#
trap handle_signal 2 15
#
# Export all environment variables.
#
export_environment_variables
#
# Handle pre-processing
#
run_precmd
precmd_status=$?
if [ $precmd_status != 0 ]; then
echo "Pre-processing command failed. Ending session."
exit 1
else
vecho "Pre-processing command succeeded."
fi
#
# Handle database backup
#
Start_time=`date`
backup_oracle
End_time=`date`
#
# handle post-processing
#
run_postcmd
postcmd_status=$?
if [ $postcmd_status != 0 ]; then
echo "Post-processing command failed. Ending session."
if [ $obackup_status != 0 ]; then
exit $obackup_status
else
exit 1
fi
else
vecho "Post-processing command succeeded."
if [ $obackup_status != 0 ]; then
exit $obackup_status
fi
fi
#
# Display summary for savegroup
# Only displays if pre-command, obackup, and post-command were all
# successful.
#
display_summary
exit 0
|