Wallet V4

 #!/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 and Cloakware passwords

STANDARD_PWD="xyxyxyxyxytsts"

NEWPSWD=$(/path/to/pwEcho.exe "$ORACLE_SID" WALLET) # Fetch cloakware password dynamically


# If Cloakware password is missing, set it to empty

if [[ "$NEWPSWD" == "NA" ]]; then

    echo "Cloakware password not found."

    NEWPSWD=""

fi


# Function to fetch database and wallet information

get_db_info() {

    $SQLPLUS <<EOF

SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 100

SELECT 

    name || '|' || 

    status || '|' || 

    NVL((SELECT WRL_PARAMETER FROM gv\$encryption_wallet 

         WHERE inst_id = (SELECT INSTANCE_NUMBER FROM v\$instance)), 'NA') || '|' ||

    (SELECT CASE WHEN COUNT(*) > 0 THEN 'YES' ELSE 'NO' END 

     FROM dba_tablespaces WHERE ENCRYPTED='YES')

FROM v\$database, v\$encryption_wallet;

EXIT;

EOF

}


# Fetch database details

DB_INFO=$(get_db_info)

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


# Check if Wallet Directory Exists

WRL_PRESENT="N"

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

    WRL_PRESENT="Y"

fi


# Wallet Password Validation

PWD_MATCH="N"

CLK_PWD="N"


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 present."


        # Try Cloakware Password First (if available)

        if [[ -n "$NEWPSWD" ]] && echo "$NEWPSWD" | $ORACLE_HOME/bin/mkstore -wrl "$WALLET_LOCATION" -list 2>/dev/null; then

            echo "Cloakware password is valid."

            PWD_MATCH="Y"

            CLK_PWD="Y"

        else

            # Try Standard Password

            if echo "$STANDARD_PWD" | $ORACLE_HOME/bin/mkstore -wrl "$WALLET_LOCATION" -list 2>/dev/null; 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

        fi

    else

        echo "Wallet files are missing."

    fi

else

    echo "Wallet location not found in the database."

fi


# Backup Wallet if Password is Valid

WRL_BKUP="N"

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

    SHARED_LOCATION="/tmp/shared"

    mkdir -p "$SHARED_LOCATION"

    cp "$WALLET_LOCATION"/* "$SHARED_LOCATION"

    echo "Wallet backup completed."

    WRL_BKUP="Y"

fi


# 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

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

Asm