116 lines
3.5 KiB
Bash
116 lines
3.5 KiB
Bash
#!/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 IGNORE EXISTING 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
|