Db open mode

 #!/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"


# Clear log files

> $LOGFILE

> $EMAIL_BODY


# Find running Oracle instances (excluding ASM and APX)

ps -ef | grep pmon | grep -v grep | grep -Ev "(\+ASM|APX)" | awk -F'_' '{print $3}' | while read -r ORACLE_SID

do

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

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


        # Set Oracle environment

        export ORACLE_SID=$ORACLE_SID

        export ORAENV_ASK=NO

        . oraenv > /dev/null 2>&1


        # Run SQL query to check OPEN_MODE and days in that mode

        SQL_OUTPUT=$(sqlplus -s / as sysdba <<EOF

SET HEADING OFF;

SET FEEDBACK OFF;

SET PAGESIZE 0;

SELECT '$ORACLE_SID' AS DATABASE_NAME, OPEN_MODE,

       ROUND(SYSDATE - STARTUP_TIME) AS DAYS_IN_MODE

FROM V\$DATABASE, V\$INSTANCE;

EXIT;

EOF

)


        # Process SQL output

        DB_NAME=$(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" "$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 is in mode: $OPEN_MODE (Not READ ONLY)" >> $EMAIL_BODY

        fi

    fi

done


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

if [[ -s $EMAIL_BODY ]]; then

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

fi



******


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

OPEN_MODE=$(echo "$SQL_OUTPUT" | awk '{for (i=2; i<=NF-1; i++) printf $i " "; print ""}')

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

***

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

MODE_TYPE=$(echo "$SQL_OUTPUT" | awk '{print $(NF-1)}') # Extracts second last word (ONLY, WRITE, MOUNTED)

DAYS_IN_MODE=$(echo "$SQL_OUTPUT" | awk '{print $NF}') # Last column is days in mode


****

Comments

Popular posts from this blog

Database growth

DBA Day-2 ve

Asm