Wallet v6

 #!/bin/bash


# Ensure ORACLE_SID and DEFAULT_LOCATION are passed as arguments

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

    echo "Usage: $0 <ORACLE_SID> <DEFAULT_LOCATION>"

    exit 1

fi


export ORACLE_SID=$1

export DEFAULT_LOCATION=$2

export LOG_LOCATION="$DEFAULT_LOCATION/encryption/wallet_backup/logs"


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

export PATH=$ORACLE_HOME/bin:$PATH

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


# Ensure required directories exist

mkdir -p "$LOG_LOCATION"


# Standard password (static)

STANDARD_PWD="xyxyxyxyxytsts"


# Fetch cloakware password dynamically

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

[[ -z "$NEWPSWD" ]] && NEWPSWD="NA"


# Function to fetch DB details

get_db_info() {

    $SQLPLUS <<EOF

SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 200

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') || '|' ||

    version || '|' || NVL(WALLET_TYPE, 'NA')

FROM v\$database, v\$encryption_wallet;

EXIT;

EOF

}


# Fetch database details

DB_INFO=$(get_db_info)

IFS='|' read -r DBNAME STATUS WALLET_LOCATION TBS_ENCR DB_VERSION WALLET_TYPE <<< "$DB_INFO"


# Check if Wallet is Present

WRL_PRESENT="N"

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

    WRL_PRESENT="Y"

fi


# Wallet Backup (Independent of Password Validation)

SHARED_LOCATION="$DEFAULT_LOCATION/$DBNAME"

WRL_BKUP="N"


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

    echo "Wallet found at: $WALLET_LOCATION" | tee -a "$LOG_LOCATION/wallet_validate.log"


    # Check if database name exists in wallet path

    if [[ "$WALLET_LOCATION" == *"$DBNAME"* ]]; then

        mkdir -p "$SHARED_LOCATION"

        cp "$WALLET_LOCATION"/* "$SHARED_LOCATION"

        echo "Wallet backup completed at $SHARED_LOCATION" | tee -a "$LOG_LOCATION/wallet_validate.log"

        WRL_BKUP="Y"

    else

        echo "Database name not found in wallet path. Skipping backup." | tee -a "$LOG_LOCATION/wallet_validate.log"

    fi

else

    echo "Wallet location is not found in database." | tee -a "$LOG_LOCATION/wallet_validate.log"

fi


# Wallet Password Validation

PWD_MATCH="N"

CLK_PWD="N"


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

    # Try Cloakware Password First

    echo "$NEWPSWD" | mkstore -wrl "$WALLET_LOCATION" -list >/dev/null 2>&1

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

        PWD_MATCH="Y"

        CLK_PWD="Y"

        echo "Cloakware password is valid." | tee -a "$LOG_LOCATION/wallet_validate.log"

    else

        # Try Standard Password

        echo "$STANDARD_PWD" | mkstore -wrl "$WALLET_LOCATION" -list >/dev/null 2>&1

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

            PWD_MATCH="Y"

            CLK_PWD="N"

            echo "Standard password is valid." | tee -a "$LOG_LOCATION/wallet_validate.log"

        else

            PWD_MATCH="N"

            CLK_PWD="N"

            echo "Wallet password validation failed." | tee -a "$LOG_LOCATION/wallet_validate.log"

        fi

    fi

fi


# Generate Report

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

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


cat <<EOF > "$REPORT_FILE"

DB Name: $DBNAME

DB Version: $DB_VERSION

Wallet Type: $WALLET_TYPE

TDE: $( [[ "$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