#!/bin/sh # Exit immediately if a command exits with a non-zero status. set -e # === SETUP === # Determine script's directory and source the configuration file. SCRIPT_DIR=$(dirname "$0") CONFIG_FILE="${SCRIPT_DIR}/aurora.conf" if [ ! -f "$CONFIG_FILE" ]; then echo "Error: Configuration file not found at ${CONFIG_FILE}" exit 1 fi # shellcheck source=aurora.conf . "$CONFIG_FILE" # === DERIVED VARIABLES === TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") AURORA="${SCHEMA}_AURORA" AURORA_TEMP_DIR="${BACKUP_DIR}/${AURORA}" LOGFILE="${SCRIPT_ROOT}/aurora.log" temp_compnyname=${SCHEMA#SBO_} # Remove SBO_ prefix COMPNYNAME=${temp_compnyname%_PROD} # Remove _PROD suffix if it exists # === FUNCTIONS === log() { echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" | tee -a "$LOGFILE"; } run_sql() { log "Executing: $1" "$HDBSQL" -U "${BACKOP_USER}" "$1" >/dev/null } show_info() { echo "Source Schema: ${SCHEMA}" echo "Target Schema: ${AURORA}" echo "Target Schema User: ${AURORA_SCHEMA_USER}" echo "Company Name: ${COMPNYNAME}" echo "Export Directory: ${AURORA_TEMP_DIR}" echo "Log File: ${LOGFILE}" } usage() { echo "Usage: $0 [new | complete | info]" echo " new : Export, import, and rename. (No privileges or post-scripts)" echo " complete : Drop, export, import, grant privileges, and run post-scripts." echo " info : Show configuration information." } export_schema() { log "Starting schema export for '${SCHEMA}'." mkdir -p "$AURORA_TEMP_DIR" run_sql "EXPORT \"${SCHEMA}\".\"*\" AS BINARY INTO '$AURORA_TEMP_DIR' WITH REPLACE;" log "Schema export completed." } import_and_rename() { log "Starting import and rename to '${AURORA}'." run_sql "IMPORT \"${SCHEMA}\".\"*\" FROM '$AURORA_TEMP_DIR' WITH RENAME SCHEMA \"${SCHEMA}\" TO \"${AURORA}\";" log "Updating company name fields." local update_sql=" UPDATE \"${AURORA}\".CINF SET \"CompnyName\"='AURORA ${COMPNYNAME} ${TIMESTAMP}'; UPDATE \"${AURORA}\".OADM SET \"CompnyName\"='AURORA ${COMPNYNAME} ${TIMESTAMP}'; UPDATE \"${AURORA}\".OADM SET \"PrintHeadr\"='AURORA ${COMPNYNAME} ${TIMESTAMP}';" "$HDBSQL" -U "${BACKOP_USER}" -c ";" -I - </dev/null 2>&1 || log "Could not drop schema '${AURORA}'. It might not exist." log "Old schema dropped." } run_post_scripts() { log "Running post-import SQL scripts: ${POST_SQL}" for sql_file in $POST_SQL; do log "Running script: ${sql_file}" "$HDBSQL" -U "${BACKOP_USER}" -I "${SCRIPT_ROOT}/${sql_file}" done log "All post-import scripts completed." } # === SCRIPT EXECUTION === if [ $# -eq 0 ]; then usage exit 1 fi case "$1" in new) log "=== Starting 'new' operation ===" export_schema import_and_rename log "=== 'New' operation finished successfully ===" ;; complete) log "=== Starting 'complete' operation ===" drop_aurora_schema export_schema import_and_rename grant_privileges run_post_scripts log "=== 'Complete' operation finished successfully ===" ;; info) show_info ;; *) echo "Error: Invalid argument '$1'." usage exit 1 ;; esac