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