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
Post a Comment