Wallet v5

#!/bin/bash


# Check if correct arguments are passed

if [[ $# -ne 3 ]]; then

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

    exit 1

fi


# Accepting input arguments

export ORACLE_SID=$1

export DEFAULT_LOCATION=$2

export LOG_LOCATION=$3


# Setting Oracle environment variables

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)

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


# Create necessary directories

RUN_DATE=$(date '+%Y%m%d')

mkdir -p "$DEFAULT_LOCATION/$RUN_DATE/$ORACLE_SID"

mkdir -p "$LOG_LOCATION/encryption/wallet_backup/logs"

LOG_FILE="$LOG_LOCATION/encryption/wallet_backup/logs/wallet_validate.log"

REPORT_FILE="$DEFAULT_LOCATION/$RUN_DATE/$ORACLE_SID/wallet_report.log"


# Function to get DB version

get_db_version() {

    $SQLPLUS <<EOF

SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 100

SELECT version FROM v\$instance;

EXIT;

EOF

}


# Fetch DB version

DB_VERSION=$(get_db_version | tr -d '[:space:]')


# Function to get wallet information

get_db_info() {

    if [[ "$DB_VERSION" =~ 19 ]]; then

        QUERY="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') || '|' || WALLET_TYPE || '|' || '$DB_VERSION' FROM v\$database, v\$encryption_wallet;"

    else

        QUERY="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') || '|' || 'NA' || '|' || '$DB_VERSION' FROM v\$database, v\$encryption_wallet;"

    fi

    

    $SQLPLUS <<EOF

SET HEAD OFF FEEDBACK OFF PAGESIZE 0 LINESIZE 200

$QUERY

EXIT;

EOF

}


# Fetch database details

DB_INFO=$(get_db_info)

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


# Check if Wallet Location exists

WRL_PRESENT="N"

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

    WRL_PRESENT="Y"

fi


# Wallet validation

PWD_MATCH="N"

CLK_PWD="N"


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

    echo "Wallet found at: $WALLET_LOCATION" | tee -a "$LOG_FILE"


    # Check if database name exists in wallet path

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

        echo "Database name found in wallet path, initiating backup..." | tee -a "$LOG_FILE"

        

        BACKUP_LOCATION="$DEFAULT_LOCATION/$RUN_DATE/$DBNAME/wallet_backup"

        mkdir -p "$BACKUP_LOCATION"

        cp -r "$WALLET_LOCATION" "$BACKUP_LOCATION"

        WRL_BKUP="Y"

    else

        WRL_BKUP="N"

    fi


    # Check Wallet Passwords

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

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

        [[ -n "$WALLET_PWD_MATCH_CLOAK" ]] && PWD_MATCH="Y" && CLK_PWD="Y"

    fi


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

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

        [[ -n "$WALLET_PWD_MATCH_STD" ]] && PWD_MATCH="Y" && CLK_PWD="N"

    fi

fi


# Generate Report

cat <<EOF > "$REPORT_FILE"

DB Name: $DBNAME

DB Version: $DB_VERSION

WALLET TYPE: $WALLET_TYPE

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

WRL: $WRL_PRESENT

TBS ENCR: $TBS_ENCR

WRL BKUP: $WRL_BKUP

CLK: $CLK_PWD

PWD Match: $PWD_MATCH

Run Date: $(date '+%Y-%m-%d %H:%M:%S')

EOF


echo "Report saved at $REPORT_FILE" | tee -a "$LOG_FILE"

Comments

Popular posts from this blog

Database growth

DBA Day-2 ve

Asm