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 |