Saturday, 14 September 2024

15th other

Filled under:

 bash

#!/bin/bash

# Function to check if a database is up
check_db_status() {
    local db_name="$1"
    sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'UP' FROM v\$instance WHERE status = 'OPEN';
EXIT;
EOF
}

# Function to check if GoldenGate is configured
check_goldengate() {
    if [ -d "/u01/ogg" ]; then
        if [ "$(ps -ef | grep -i 'ggsci' | grep -v 'grep' | wc -l)" -gt 0 ]; then
            echo "GoldenGate: Configured"
        else
            echo "GoldenGate: Not Configured"
        fi
    else
        echo "GoldenGate: Not Installed"
    fi
}

# Function to check if Oracle Wallet is configured
check_wallet() {
    if [ -f "/etc/ORACLE_WALLET" ]; then
        echo "Wallet: Configured"
    else
        echo "Wallet: Not Configured"
    fi
}

# Function to check if Data Guard is configured and sync status
check_dataguard() {
    local db_name="$1"
    sync_status=$(sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT CASE
    WHEN (SELECT count(*) FROM v\$database WHERE role = 'PHYSICAL STANDBY') > 0 THEN
        'Data Guard: Configured as Standby'
    WHEN (SELECT count(*) FROM v\$database WHERE role = 'PRIMARY') > 0 THEN
        'Data Guard: Configured as Primary'
    ELSE
        'Data Guard: Not Configured'
END FROM dual;
EXIT;
EOF
)

    echo "$sync_status"

    # Check if Data Guard is configured, then check synchronization
    if [[ "$sync_status" == *"Configured"* ]]; then
        sync_check=$(sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT 'Sync Status: ' || (SELECT 'SYNCHRONIZED' FROM v\$archive_dest_state WHERE destination = 'VALID' AND state = 'VALID' AND error IS NULL) FROM dual;
EXIT;
EOF
)

        echo "$sync_check"
    fi
}

# Main script execution
echo "Oracle Database Configuration Summary"
echo "--------------------------------------"

# Get the list of database instances based on PMON processes
pmon_processes=$(ps -ef | grep pmon | grep -v grep | awk '{print $NF}' | cut -d'_' -f3 | sort -u)

for db in $pmon_processes; do
    echo "Checking database: $db"
    db_status=$(check_db_status "$db")
    
    if [[ "$db_status" == "UP" ]]; then
        echo "Status: UP"
        check_goldengate
        check_wallet
        check_dataguard "$db"
    else
        echo "Status: DOWN"
    fi

    echo "--------------------------------------"
done

echo "Summary check completed."

0 comments:

Post a Comment