Thursday, 24 October 2019

#!/bin/ksh

# Title:       ConfigDB.sh
# Description: Script to monitor various database health checkup 
# Date         Author              Description
# ------------ ------------------- -----------------------------------------

DBSCRIPT=`basename $0`; export DBSCRIPT
HOSTNAME=`hostname`; export HOSTNAME

if [ "$#" -ne 1 ] || [[ "$#" -eq 1 && "$1" != 'mon' && "$1" != 'rman' && "$1" != 'arch' ]]; then
   echo "Usage: ${DBSCRIPT} mon ( Configuring the database only for monitoring )"
   echo "       ${DBSCRIPT} rman ( Configuring the database for rman backup"
   echo "                          Caution - This will erase existing RMAN configuration on database!)"
   echo "       ${DBSCRIPT} arch ( Enabling the database to archive log mode"
   echo "                          Caution - This will restart database!)"

   exit 3
fi

. ReadConfig.sh

if [ -n "`ps -eaf|grep ${DBSCRIPT}|grep -v grep|grep -v $$|grep -v ${PPID}`" ]; then
ps -eaf|grep ${DBSCRIPT}|grep -v grep|grep -v $$|grep -v ${PPID} > ${SCRIPTPATH}/t.log
mailx -s "CRITICAL: Script ${DBSCRIPT} is hanging in server ${HOSTNAME} at `date +%Y/%m/%d\ %H:%M:%S`" ${MAIL_LIST} < t.log
exit
fi

ORACLE_SID="`cat ${ORATAB}|grep -v "^*"|grep -v "^#"|grep -w ${DB_NAME}|cut -d ':' -f 1|uniq|grep -v 'ASM|agent|CRS'`"; export ORACLE_SID

if [ -n "${ORACLE_SID}" ]; then
if [ ! -n  "`ps -ef|grep ${ORACLE_SID}|grep pmon`" ]; then
echo "Database ${ORACLE_SID} is down."
exit 3
fi
else
echo "Wrong database name: ${DB_NAME}. Retry by mentioning one of the below listed database for db_name in Config.txt "
cat ${ORATAB}|grep -v "^*"|grep -v "^#"|grep -v 'ASM|agent|CRS'|cut -d : -f1|grep -i [A-Z]|sort|uniq
exit 3
fi

ORAENV_ASK=NO
. oraenv >/dev/null 2>&1

if [ -n "${DB_USER}" ]; then
CONNECT_STRING="${DB_USER}"/"${DB_PASSWORD}"
else
echo "Please rerun script by providing db_user and db_password in file Config.txt"
exit 3
fi
export CONNECT_STRING

# Initial db configuration for monitoring scripts
db_config() {
$ORACLE_HOME/bin/sqlplus -S "/ as sysdba" << EOF
BEGIN
EXECUTE IMMEDIATE ('CREATE USER ${DB_USER} IDENTIFIED BY ${DB_PASSWORD}');
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
GRANT CREATE SESSION TO ${DB_USER};
GRANT SELECT ANY DICTIONARY TO ${DB_USER};
GRANT SELECT ANY TABLE TO ${DB_USER};

EOF
}

# Enabling database to archive log mode
arhive_log_config() {
$ORACLE_HOME/bin/sqlplus -S "/ as sysdba" << EOF
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=spfile;
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG; 
ALTER DATABASE OPEN;
EOF
}

# Configuration of RMAN settings 
rman_config() {
$ORACLE_HOME/bin/sqlplus -S "/ as sysdba" << EOF
ALTER SYSTEM SET db_recovery_file_dest_size = ${DB_RECOVERY_FILE_DEST_SIZE} SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest = '${DB_RECOVERY_FILE_DEST}' SCOPE=BOTH;
ALTER SYSTEM SET db_flashback_retention_target = ${DB_FLASHBACK_RETENTION_TARGET} SCOPE=BOTH;
GRANT RECOVERY_CATALOG_OWNER TO ${DB_USER};
EOF
rman target ${CONNECT_STRING} << EOF
RUN {
CONFIGURE BACKUP OPTIMIZATION CLEAR;
CONFIGURE DEFAULT DEVICE TYPE CLEAR;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR;
CONFIGURE DEVICE TYPE DISK CLEAR;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK CLEAR;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK CLEAR;
CONFIGURE MAXSETSIZE CLEAR;
CONFIGURE ENCRYPTION FOR DATABASE CLEAR;
CONFIGURE ENCRYPTION ALGORITHM CLEAR;
CONFIGURE COMPRESSION ALGORITHM CLEAR;
CONFIGURE ARCHIVELOG DELETION POLICY CLEAR;
CONFIGURE SNAPSHOT CONTROLFILE NAME CLEAR;
CONFIGURE RETENTION POLICY CLEAR;
CONFIGURE CONTROLFILE AUTOBACKUP CLEAR;
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
}
EOF
}

db_config

if [ "$1" = 'rman' ]; then
rman_config
elif [ "$1" = 'arch' ]; then
arhive_log_config
fi

exit

No comments:

Post a Comment