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

Popular posts from this blog

Database growth

DBA Day-2 ve