Db open mode v2

 #!/bin/bash


LOGFILE="/tmp/database_mode.log"

EMAIL_RECIPIENT="your_email@example.com"

SUBJECT="Databases Not in READ ONLY Mode"

EMAIL_BODY="/tmp/email_body.txt"

DB_LIST="/path/to/db_list.txt" # File containing list of database names

IDNAME="your_idname" # Replace with your actual username


# Clear log files

> $LOGFILE

> $EMAIL_BODY


# Check if database list file exists

if [[ ! -f $DB_LIST ]]; then

    echo "Database list file $DB_LIST not found!" | tee -a $LOGFILE

    exit 1

fi


# Read each database name from the file

while read -r DB_NAME

do

    if [[ -n "$DB_NAME" ]]; then

        echo "Processing database: $DB_NAME" | tee -a $LOGFILE


        # Run SQL query to check OPEN_MODE and days in that mode using idnam@dbname

        SQL_OUTPUT=$(sqlplus -s "$IDNAME@$DB_NAME" <<EOF

SET HEADING OFF;

SET FEEDBACK OFF;

SET PAGESIZE 0;

WHENEVER SQLERROR EXIT SQL.SQLCODE;

SELECT '$DB_NAME' AS DATABASE_NAME, OPEN_MODE,

       ROUND(SYSDATE - STARTUP_TIME) AS DAYS_IN_MODE

FROM V\$DATABASE, V\$INSTANCE;

EXIT;

EOF

)


        # Check if SQL command was successful

        if [[ $? -ne 0 ]]; then

            echo "Failed to connect to $DB_NAME or execute SQL command!" | tee -a $LOGFILE

            echo "Database: $DB_NAME - Connection Failed" >> $EMAIL_BODY

            continue

        fi


        # Process SQL output

        DB_NAME_FROM_SQL=$(echo "$SQL_OUTPUT" | awk '{print $1}')

        OPEN_MODE=$(echo "$SQL_OUTPUT" | awk '{print $2, $3}')

        DAYS_IN_MODE=$(echo "$SQL_OUTPUT" | awk '{print $4}')


        # Log results

        printf "%-20s %-15s %-5s days\n" "$DB_NAME_FROM_SQL" "$OPEN_MODE" "$DAYS_IN_MODE" | tee -a $LOGFILE


        # If database is NOT in READ ONLY mode, add to email body

        if [[ "$OPEN_MODE" != "READ ONLY" ]]; then

            echo "Database: $DB_NAME_FROM_SQL is in mode: $OPEN_MODE (Not READ ONLY)" >> $EMAIL_BODY

        fi

    fi

done < "$DB_LIST"


# If any database is NOT in READ ONLY mode or connection failed, send email

if [[ -s $EMAIL_BODY ]]; then

    mail -s "$SUBJECT" $EMAIL_RECIPIENT < $EMAIL_BODY

fi

Comments

Popular posts from this blog

Database growth

DBA Day-2 ve

Asm