Files
Scripts/aurora/aurora.sh

116 lines
3.4 KiB
Bash

#!/bin/sh
# Version: 1.2.2
# 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 RENAME SCHEMA \\"${SCHEMA}\\" TO \\"${AURORA}\";"
echo "Updating company name fields."
"$HDBSQL" -U "${BACKOP_USER}" -c ";" -I - <<EOF
UPDATE \"${AURORA}\".CINF SET \"CompnyName\"='AURORA ${COMPNYNAME} ${TIMESTAMP}';
UPDATE \"${AURORA}\".OADM SET \"CompnyName\"='AURORA ${COMPNYNAME} ${TIMESTAMP}';
UPDATE \"${AURORA}\".OADM SET \"PrintHeadr\"='AURORA ${COMPNYNAME} ${TIMESTAMP}';
EOF
echo "Import and rename completed."
}
grant_privileges() {
echo "Granting privileges on '${AURORA}' to '${AURORA_SCHEMA_USER}'."
run_sql "GRANT ALL PRIVILEGES ON SCHEMA \\"${AURORA}\\" TO \\"${AURORA_SCHEMA_USER}\";"
echo "Privileges granted."
}
drop_aurora_schema() {
echo "Dropping existing '${AURORA}' schema."
run_sql "DROP SCHEMA \\"${AURORA}\\" CASCADE;" 2>/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