# 080224: Created
# Check if there is only one controlfile present. If yes, create two new ones in the desired locations
#!/bin/bash
#cleanup old files
chkcntrfiles() {
rm -f /tmp/chk_cntrfile_location.sql
rm -f /tmp/chk_cntrfile_location.log
sqlfile=/tmp/chk_cntrfile_location.sql
logfile=/tmp/chk_cntrfile_location.log
echo "Check controlfile locations in database " $ORACLE_SID
cat << EoF > ${sqlfile}
set lines 200 heading off feedback off verify off echo off termout off
set pages 0
set trimspool on
col name format a70
spool ${logfile}
select name
from v\$controlfile;
exit
EoF
cd /home/oracle/&&sqlplus -s -L / as sysdba @${sqlfile}
}
chkcntrfiles
if [ `cat ${logfile} | wc -l` -ge 2 ]; then
echo "There are at least 2 controlfiles present"
else
echo "There is only one controfile present."
echo "Will now shutdown db and make another copy"
echo "shutdown immediate" | sqlplus / as sysdba
export org_contr_file=`cat ${logfile}`
cp -v $org_contr_file /disk1/oradata/$ORACLE_SID/control01.ctl
cp -v $org_contr_file /disk2/fra/$ORACLE_SID/control02.ctl
echo "startup nomount" | sqlplus / as sysdba
echo "alter system set control_files='/disk1/oradata/$ORACLE_SID/control01.ctl','/disk2/fra/$ORACLE_SID/control02.ctl' scope=spfile;" | sqlplus / as sysdba
echo "startup mount force;" | sqlplus / as sysdba
echo "Check new controlfile locations in database " $ORACLE_SID
chkcntrfiles
if [ ! `cat ${logfile} | wc -l` -ge 2 ]; then
echo "We tried creating two new controlfiles but failed for some reason. Manual checkup required."
exit 1
fi
echo "Alles OK!"
echo "alter database open;" | sqlplus / as sysdba
fi
exit
Minimalistic Oracle contains a collection of practical examples from my encounters with Oracle technologies. When relevant, I also write about other technologies, like Linux or PostgreSQL. Many of the posts starts with "how to" since they derive directly from my own personal experience. My goal is to provide simple examples, so that they can be easily adapted to other situations.
Thursday, February 8, 2024
Script to check for the number of control files in a database and create minimum two if only one is found
A script that checks for the number of controlfiles and creates two new ones if only one is found.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment