In 2008 when I worked with some Oracle databases under Solaris and AIX, I spent some time to figure out how to make the database backup and restore and decided to use cold backup as the most straightforward method. As far as I remember, to backup the database I shutted down Oracle and then simply archive the database files using “zip” command. To restore the database I used the following shell script that extracts archived files and adjust some Oracle settings:
#!/bin/bash #read -p "Enter the name of the database: " -e db_name #export ORACLE_SID=$db_name db_name=$ORACLE_SID # variable value # export ORACLE_HOME=/u01/app/oracle/product/10.1.0/db_1 procCount=`ps -ef|grep -i $db_name$|wc -l` if [ $procCount -ne 0 ] then read -p "Database with the given name is running. Do you want to shutdown instance: Y/N " -e ans if [ "$ans" = "Y" ] then #ps -ef |grep -i $db_name$ | awk '{print $2}'|xargs kill -9 $ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF shutdown abort; EOF else exit 0 fi fi read -p "Enter name of the backup zip-file: " -e back #read -p "Enter the absolute path for the location of DB files(without the last slash): " -e dir dir=$ORACLE_ORADATA fileCount=`ls -l $dir|wc -l` if [ $fileCount -ne 0 ] then rm -r $dir* unzip -j $back -d $dir else unzip -j $back -d $dir fi mkdir $dir/dump dumpDir=$dir/dump mkdir -p $dumpDir/$db_name/adump mkdir -p $dumpDir/$db_name/bdump mkdir -p $dumpDir/$db_name/cdump mkdir -p $dumpDir/$db_name/udump pfl=`ls $dir/pf*` control=(`ls $dir/*.ctl`) sed -e '/file_dest/d;/files/d;/dump/d;/sga/d' $pfl > /tmp/pfl cat > $pfl < /tmp/pfl rm /tmp/pfl cat >> $pfl << EOF *.control_files='${control[0]}','${control[1]}','${control[2]}' *.audit_file_dest='$dumpDir/$db_name/adump' *.background_dump_dest='$dumpDir/$db_name/bdump' *.core_dump_dest='$dumpDir/$db_name/cdump' *.user_dump_dest='$dumpDir/$db_name/udump' *.sga_target=500M *.sga_max_size=800M EOF echo -e "\n" echo -e "====================================" echo -e "Creating SPFILE \n" $ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF create spfile from pfile='$pfl'; startup mount; EOF IFS='$' FileNew=(`$ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF set heading off feedback off termout off trimspool on line 1000 select 'ALTER DATABASE RENAME FILE '''||member||''' TO ''$dir/'||regexp_substr(member,'[^/]*$')||''';$' from v\\$logfile; select 'ALTER DATABASE RENAME FILE '''||name||''' TO ''$dir/'||regexp_substr(name,'[^/]*$')||''';$' from v\\$datafile; EOF`) echo -e "\n" echo -e "====================================" echo -e "Renaming datafiles and redo logs \n" $ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF ${FileNew[@]} alter database open; EOF echo -e "Database is open \n"
This script requires the following environment variables to be set:
# .bashrc export ORACLE_SID=MYDB export ORACLE_HOME=/export/home/oracle/product/10.2.0/db_1 export ORACLE_ORADATA=/export/home/oracle/app/oracle/oradata/MYDB export PATH=$PATH:/usr/bin:$ORACLE_HOME/bin
I do not remember exact versions, but as seen from the script above Oracle version was 10.2.0 or 10g.