#!/bin/sh # Version: 1.2.5 # 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}'" >&2 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}" COMPNYNAME="${SCHEMA#SBO_}" [[ "$COMPNYNAME" == *_PROD ]] && COMPNYNAME="${COMPNYNAME%_PROD}" # Remove _PROD suffix if it exists # === FUNCTIONS === run_sql() { echo "ℹ️ 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}" } usage() { echo "Usage: $0 [--info]" echo " --info : Show configuration information." echo " (No argument) : Drop, export, import, grant privileges, and run post-scripts." } export_schema() { echo "⬇️ Starting schema export for '${SCHEMA}'..." mkdir -p "$AURORA_TEMP_DIR" run_sql "EXPORT \"${SCHEMA}\".\"*\" AS BINARY INTO '$AURORA_TEMP_DIR' WITH REPLACE;" echo "✅ Schema export completed." } import_and_rename() { echo "⬆️ Starting import and rename to '${AURORA}'..." run_sql "IMPORT \"${SCHEMA}\".\"*\" FROM '$AURORA_TEMP_DIR' WITH REPLACE RENAME SCHEMA \"${SCHEMA}\" TO \"${AURORA}\";" echo "ℹ️ Updating company name fields..." "$HDBSQL" -U "${BACKOP_USER}" -c ";" -I - </dev/null || echo "⚠️ Could not drop schema '${AURORA}'. It might not exist." >&2 echo "✅ Old schema dropped." } run_post_scripts() { echo "⚙️ Running post-import SQL scripts: ${POST_SQL}..." for sql_file in $POST_SQL; do echo " - Running script: ${sql_file}" "$HDBSQL" -U "${BACKOP_USER}" -I "${SCRIPT_ROOT}/${sql_file}" done echo "✅ All post-import scripts completed." } cleanup_exported_files() { echo "🧹 Cleaning up exported files from '${AURORA_TEMP_DIR}'..." rm -rf "$AURORA_TEMP_DIR" echo "✅ Exported files cleaned up." } # === SCRIPT EXECUTION === if [ $# -eq 0 ]; then echo "🚀 Starting 'complete' operation (default)..." drop_aurora_schema export_schema import_and_rename grant_privileges run_post_scripts cleanup_exported_files echo "🎉 'Complete' operation finished successfully!" exit 0 fi case "$1" in --info) show_info ;; *) echo "❌ Error: Invalid argument '$1'." >&2 usage exit 1 ;; esac