Asm
#!/bin/bash
# Set environment variables
ORACLE_SID=YOUR_SID
ORACLE_HOME=/path/to/oracle_home
export ORACLE_SID ORACLE_HOME
LOG_DIR=/path/to/logs
SQL_DIR=/path/to/sql
mkdir -p "$LOG_DIR"
mkdir -p "$SQL_DIR"
DB_USER="/ as sysdba"
# Function to generate SQL data for each target type
generate_sql() {
local TARGET_TYPE=$1
local SQL_FILE="$SQL_DIR/${TARGET_TYPE}_data.sql"
local OUTPUT_FILE="/tmp/${TARGET_TYPE}_data.txt"
case "$TARGET_TYPE" in
cluster)
echo "SET HEADING OFF; SET FEEDBACK OFF; SET PAGESIZE 0;" > "$SQL_FILE"
echo "SELECT TARGET_NAME || '|' || HOST_NAME || '|' || CREDENTIALS || '|' || CLUSTER_NAME || '|' || VIP_ADDRESS FROM CLUSTER_TARGETS;" >> "$SQL_FILE"
;;
# Additional target types can be added here
*)
echo "[ERROR] Unknown target type: $TARGET_TYPE"
return 1
;;
esac
# Execute the SQL
sqlplus -s "$DB_USER" <<EOF > "$OUTPUT_FILE"
@$SQL_FILE
EXIT;
EOF
if [ $? -ne 0 ]; then
echo "[ERROR] Failed to execute SQL for $TARGET_TYPE" | tee -a "$LOG_DIR/generate_sql_errors.log"
return 1
fi
}
# Function to process data and add targets using emcli
process_data() {
local TARGET_TYPE=$1
local INPUT_FILE="/tmp/${TARGET_TYPE}_data.txt"
local LOG_FILE="$LOG_DIR/${TARGET_TYPE}_add_target_$(date +%Y%m%d).log"
local ERROR_FILE="$LOG_DIR/${TARGET_TYPE}_add_target_errors_$(date +%Y%m%d).log"
if [ ! -f "$INPUT_FILE" ]; then
echo "[ERROR] Input file not found: $INPUT_FILE" | tee -a "$ERROR_FILE"
return 1
fi
while IFS='|' read -r TARGET_NAME HOST_NAME CREDENTIALS CLUSTER_NAME VIP_ADDRESS; do
if [ -z "$TARGET_NAME" ] || [ -z "$HOST_NAME" ] || [ -z "$CREDENTIALS" ]; then
echo "[SKIP] Missing mandatory data. TARGET_NAME: $TARGET_NAME, HOST_NAME: $HOST_NAME" | tee -a "$ERROR_FILE"
continue
fi
# Construct the emcli command with proper formatting
COMMAND="emcli add_target -name='$TARGET_NAME' -type='cluster' -host='$HOST_NAME' -credentials='Creds: $CREDENTIALS'"
# Append optional parameters if available
[ -n "$CLUSTER_NAME" ] && COMMAND+=" -property_value='CLUSTER_NAME=$CLUSTER_NAME'"
[ -n "$VIP_ADDRESS" ] && COMMAND+=" -property_value='VIP_ADDRESS=$VIP_ADDRESS'"
echo "[INFO] Executing: $COMMAND" | tee -a "$LOG_FILE"
$COMMAND >> "$LOG_FILE" 2>> "$ERROR_FILE"
if [ $? -eq 0 ]; then
echo "[SUCCESS] Target added: $TARGET_NAME" | tee -a "$LOG_FILE"
else
echo "[ERROR] Failed to add target: $TARGET_NAME" | tee -a "$ERROR_FILE"
fi
done < "$INPUT_FILE"
rm -f "$INPUT_FILE"
}
# Main execution
TARGET_TYPE="cluster" # Define target type here
echo "[INFO] Generating SQL data for $TARGET_TYPE"
generate_sql "$TARGET_TYPE"
if [ $? -ne 0 ]; then
echo "[ERROR] Failed to generate data for $TARGET_TYPE. Exiting..."
exit 1
fi
echo "[INFO] Processing data for $TARGET_TYPE"
process_data "$TARGET_TYPE"
if [ $? -ne 0 ]; then
echo "[ERROR] Failed to process data for $TARGET_TYPE. Exiting..."
exit 1
fi
exit 0
Comments
Post a Comment