# needs the oravars8 file defined
# needs the set$ORACLE_SID defined
. /var/opt/oracle/oravars8
. $SCRPT/set$1
if [ $# -eq 0 ]
then
echo "Script Usage : online_bkp \$ORACLE_SID "
exit
fi
if [ ! "$BACKUP" ]
then
echo BACKUP env variable is not defined
echo Aborting online backup
exit 1
fi
if [ ! -w . ]
then
echo "You don't have write access on working dir `pwd`."
echo "Aborting online backup!"
exit 1
fi
ORACLE_SID=$1
. set$ORACLE_SID
$ORACLE_HOME/bin/svrmgrl > /dev/null < /tmp/arc
connect internal
select log_mode from v\$database;
EOF
cat /tmp/arc |grep -w "ARCHIVELOG"
if [ $? -eq 1 ]
then
echo Database is running in NOARCHIVELOG Mode
echo CANNOT DO AN ONLINE BACKUP
exit 1
fi
BACKUP_SCRIPT=`basename $1`.sql
echo "Generating backup script..."
. set$ORACLE_SID
$ORACLE_HOME/bin/svrmgrl > /dev/null << EOF
connect internal
set serveroutput on
spool $BACKUP_SCRIPT
declare
cursor control_cursor is
select name
from v\$controlfile
where rownum = 1;
cursor tablespace_cursor is
select tablespace_name
from dba_tablespaces;
cursor data_files_cursor(p_tablespace_name in varchar2) is
select file_name
from dba_data_files
where tablespace_name = p_tablespace_name;
n number;
base_file_name varchar2(100);
begin
for i in tablespace_cursor
loop
dbms_output.put_line('Alter tablespace '||i.tablespace_name||' begin backup;');
for j in data_files_cursor(i.tablespace_name)
loop
base_file_name := substr(j.file_name, instr(j.file_name, '/', -1,1)+1);
dbms_output.put_line('!cat '||j.file_name||' |compress > $BACKUP/${ORACLE_SID}/'||base_file_name||'.Z');
end loop;
dbms_output.put_line('Alter tablespace '||i.tablespace_name||' end backup;');
end loop;
for i in control_cursor
loop
dbms_output.put_line('!cp '||i.name||' $BACKUP/${ORACLE_SID}');
end loop;
end;
/
EOF
cat $BACKUP_SCRIPT |grep -v '^Statement' |grep -v '^$' > /tmp/online$USER.$ORACLE_SID
cp /tmp/online$USER.$ORACLE_SID $BACKUP_SCRIPT
egrep -v '^Alter|^.cp|^.cat' $BACKUP_SCRIPT
if [ $? = 0 ]
then
cat $BACKUP_SCRIPT
echo "The online_backup script $BACKUP_SCRIPT is corrupted. The database may not be running!"
exit 1
fi
if [ ! -f "$BACKUP_SCRIPT" ]
then
echo "Error: Generated backup script [$BACKUP_SCRIPT] is not found. Backup is aborted"
exit 1
fi;
#Create backup directory if not existing.
if [ ! -d "$BACKUP/$ORACLE_SID" ]
then
mkdir $BACKUP/$ORACLE_SID
chmod 775 $BACKUP/$ORACLE_SID
fi
rm -f $BACKUP/$ORACLE_SID/*
echo "Starting backup for $ORACLE_SID , Please wait..."
$ORACLE_HOME/bin/svrmgrl << EOF
connect internal
@$BACKUP_SCRIPT
EOF
rm -f $BACKUP_SCRIPT
rm /tmp/arc
echo "Backup for $ORACLE_SID Complete"