P2

#!/bin/bash


# Ensure ORACLE_SID is passed as an argument

if [[ -z "$1" ]]; then

    echo "Usage: $0 <ORACLE_SID>"

    exit 1

fi


export ORACLE_SID=$1

export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

SQLPLUS="$ORACLE_HOME/bin/sqlplus -s / as sysdba"


# Standard password (static)

STANDARD_PWD="xyxyxyxyxytsts"


# Fetch cloakware password dynamically

NEWPSWD=$(/path/to/pwEcho.exe $ORACLE_SID WALLET)


# Function to execute SQL and get database info

get_db_info() {

    SQL_FILE="/tmp/sql_output.txt"

    $SQLPLUS <<EOF > $SQL_FILE

SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 500 TRIMSPOOL ON

WHENEVER SQLERROR EXIT SQL.SQLCODE

SELECT name FROM v\$database;

SELECT status FROM v\$encryption_wallet;

SELECT NVL((SELECT WRL_PARAMETER FROM gv\$encryption_wallet WHERE inst_id = (SELECT INSTANCE_NUMBER FROM v\$instance)), 'NA') FROM dual;

SELECT CASE WHEN COUNT(*) > 0 THEN 'YES' ELSE 'NO' END FROM dba_tablespaces WHERE ENCRYPTED='YES';

EXIT;

EOF

    cat $SQL_FILE | tr -d '\r' | xargs

}


# Fetch database details and split values

DB_INFO=$(get_db_info)

IFS=$'\n' read -r DBNAME WALLET_STATUS WALLET_LOCATION TBS_ENCR <<< "$DB_INFO"


# Check if Wallet is Present

WRL_PRESENT="N"

if [[ "$WALLET_LOCATION" != "NA" && -d "$WALLET_LOCATION" ]]; then

    WRL_PRESENT="Y"

fi


# Validate Wallet Presence

if [[ "$WRL_PRESENT" == "Y" ]]; then

    echo "Wallet found at: $WALLET_LOCATION"


    # Check if wallet files exist

    if [[ -f "$WALLET_LOCATION/ewallet.p12" && -f "$WALLET_LOCATION/cwallet.sso" ]]; then

        echo "Wallet files are physically available."


        # Validate Wallet Password

        WALLET_PWD_MATCH_STD=$($ORACLE_HOME/bin/mkstore -wrl $WALLET_LOCATION -list -password $STANDARD_PWD 2>/dev/null)

        WALLET_PWD_MATCH_CLOAK=$($ORACLE_HOME/bin/mkstore -wrl $WALLET_LOCATION -list -password $NEWPSWD 2>/dev/null)


        # Determine Password Match

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

            echo "Cloakware password is valid."

            PWD_MATCH="Y"

            CLK_PWD="Y"

        elif [[ -n "$WALLET_PWD_MATCH_STD" ]]; then

            echo "Wallet password matches standard password."

            PWD_MATCH="Y"

            CLK_PWD="N"

        else

            echo "Wallet password does not match either standard or cloakware password."

            PWD_MATCH="N"

            CLK_PWD="N"

        fi


        # Backup Wallet if Password is Valid

        SHARED_LOCATION="/tmp/shared"

        WRL_BKUP="N"

        if [[ "$PWD_MATCH" == "Y" ]]; then

            mkdir -p $SHARED_LOCATION

            cp $WALLET_LOCATION/* $SHARED_LOCATION

            echo "Wallet backup completed."

            WRL_BKUP="Y"

        fi

    else

        echo "Wallet files are missing."

    fi

else

    echo "Wallet location is not found in database."

fi


# Autologon Check

AUTOLOGON=$(grep -q "AUTOLOGIN" <<< "$WALLET_STATUS" && echo "Y" || echo "N")


# Generate Report

RUN_DATE=$(date '+%Y-%m-%d %H:%M:%S')

REPORT_FILE="/tmp/report-$(date '+%Y%m%d').log"


cat <<EOF > $REPORT_FILE

DB Name: $DBNAME

TDE: $( [[ "$WALLET_STATUS" == "OPEN" ]] && echo "Y" || echo "N" )

WRL: $WRL_PRESENT

Autologon (valid for 19c.11/12c-NA): $AUTOLOGON

TBS ENCR: $TBS_ENCR

WRL BKUP: $WRL_BKUP

KEY BKUP: Y/N

CLK: $CLK_PWD

PWD Match: $PWD_MATCH

Run Date: $RUN_DATE

EOF


echo "Report saved at $REPORT_FILE"

Comments

Popular posts from this blog

Database growth

DBA Day-2 ve

Sql1