此为备份脚本
!/bin/sh
$Header: hot_database_backup.sh,v 1.3 2010/08/04 17:56:02 $
bcpyrght
*
$VRTScprght: Copyright 1993 - 2012 Symantec Corporation, All Rights Reserved $
*
ecpyrght
---------------------------------------------------------------------------
hot_database_backup.sh
---------------------------------------------------------------------------
This script uses Recovery Manager to take a hot (inconsistent) database
backup. A hot backup is inconsistent because portions of the database are
being modified and written to the disk while the backup is progressing.
You must run your database in ARCHIVELOG mode to make hot backups. It is
assumed that this script will be executed by user root. In order for RMAN
to work properly we switch user (su -) to the oracle dba account before
execution. If this script runs under a user account that has Oracle dba
privilege, it will be executed using this user's account.
---------------------------------------------------------------------------
---------------------------------------------------------------------------
Determine the user which is executing this script.
---------------------------------------------------------------------------
CUSER=id |cut -d"(" -f2 | cut -d ")" -f1
---------------------------------------------------------------------------
Put output in <this file name>.out. Change as desired.
Note: output directory requires write permission.
---------------------------------------------------------------------------
RMAN_LOG_FILE=${0}.out
---------------------------------------------------------------------------
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
---------------------------------------------------------------------------
Replace /db/oracle/product/ora102, below, with the Oracle home path.
---------------------------------------------------------------------------
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_HOME
---------------------------------------------------------------------------
Replace ora102, below, with the Oracle SID of the target database.
---------------------------------------------------------------------------
ORACLE_SID=mofit
export ORACLE_SID
---------------------------------------------------------------------------
Replace ora102, below, with the Oracle DBA user id (account).
---------------------------------------------------------------------------
ORACLE_USER=oracle
---------------------------------------------------------------------------
Set the target connect string.
Replace "sys/manager", below, with the target connect string.
---------------------------------------------------------------------------
TARGET_CONNECT_STR=sys/oracle
---------------------------------------------------------------------------
Set the Oracle Recovery Manager name.
---------------------------------------------------------------------------
RMAN=$ORACLE_HOME/bin/rman
---------------------------------------------------------------------------
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
---------------------------------------------------------------------------
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
---------------------------------------------------------------------------
If this script is executed from a NetBackup schedule, NetBackup
sets an NB_ORA environment variable based on the schedule type.
The NB_ORA variable is then used to dynamically set BACKUP_TYPE
For example, when:
schedule type is BACKUP_TYPE is
---------------- --------------
Automatic Full INCREMENTAL LEVEL=0
Automatic Differential Incremental INCREMENTAL LEVEL=1
Automatic Cumulative Incremental INCREMENTAL LEVEL=1 CUMULATIVE
For user initiated backups, BACKUP_TYPE defaults to incremental
level 0 (full). To change the default for a user initiated
backup to incremental or incremental cumulative, uncomment
one of the following two lines.
BACKUP_TYPE="INCREMENTAL LEVEL=1"
BACKUP_TYPE="INCREMENTAL LEVEL=1 CUMULATIVE"
Note that we use incremental level 0 to specify full backups.
That is because, although they are identical in content, only
the incremental level 0 backup can have incremental backups of
level > 0 applied to it.
---------------------------------------------------------------------------
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
CMD_STR="
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
ORACLE_SID=$ORACLE_SID
export ORACLE_SID
$RMAN target $TARGET_CONNECT_STR nocatalog msglog $RMAN_LOG_FILE append << EOF
RUN {
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
BACKUP
$BACKUP_TYPE
SKIP INACCESSIBLE
TAG hot_db_bk_level0
FILESPERSET 5
# recommended format
FORMAT 'bk_%s_%p_%t'
DATABASE;
sql 'alter system archive log current';
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
backup all archive logs
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
BACKUP
filesperset 20
FORMAT 'al_%s_%p_%t'
ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
Note: During the process of backing up the database, RMAN also backs up the
control file. This version of the control file does not contain the
information about the current backup because "nocatalog" has been specified.
To include the information about the current backup, the control file should
be backed up as the last step of the RMAN section. This step would not be
necessary if we were using a recovery catalog or auto control file backups.
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
---------------------------------------------------------------------------
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
收起