From e410ee770be849bf0e66826a59362b3b5afbc63d Mon Sep 17 00:00:00 2001 From: TomiEckert Date: Thu, 16 Apr 2026 18:35:37 +0200 Subject: [PATCH] add hanamgr option to backup --- hanamgr.sh | 79 +++++++++++++++++++++++++++++++++++++++++++++++++-- packages.conf | 2 +- 2 files changed, 77 insertions(+), 4 deletions(-) diff --git a/hanamgr.sh b/hanamgr.sh index 20811a3..68649af 100755 --- a/hanamgr.sh +++ b/hanamgr.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Version: 1.4.0 +# Version: 1.5.0 # Author: Tomi Eckert # ============================================================================== # HANA Database Manager Menu (hanamgr.sh) @@ -349,6 +349,75 @@ do_copy() { rm -rf "$temp_export_dir" } +do_backup() { + echo -e "\n\033[1m=== Backup Tenant ===\033[0m" + read -p "Enter Target Directory Path: " target_path + + local max_threads=$(nproc --all 2>/dev/null || echo 1) + local half_threads=$((max_threads / 2)) + [[ $half_threads -lt 1 ]] && half_threads=1 + + read -p "Number of threads for compression (default: $half_threads, max: $max_threads): " threads + threads=${threads:-$half_threads} + + read -p "Compress output as tar.gz? (y/N): " compress + + if [[ -z "$GLOBAL_USER_KEY" || -z "$target_path" ]]; then + echo -e "\033[31m[❌] Error: Key and Path are required.\033[0m" + return + fi + + # Get tenant name + local tenant_query="SELECT DATABASE_NAME FROM SYS.M_DATABASES;" + local tenant_name + tenant_name=$("$HDBSQL_CMD" -U "$GLOBAL_USER_KEY" "$tenant_query" 2>/dev/null | tail -n +2 | head -n 1 | tr -d '[:space:]' | tr -d '"') + + if [[ -z "$tenant_name" ]]; then + echo -e "\033[31m[❌] Error: Could not retrieve HANA tenant name.\033[0m" + return + fi + + local timestamp=$(date +%Y%m%d_%H%M%S) + local backup_target_dir="$target_path" + local archive_file="" + + if [[ "$compress" =~ ^[Yy]$ ]]; then + backup_target_dir=$(mktemp -d "${target_path}/${tenant_name}_backup_${timestamp}_XXXXXXXX") + archive_file="${target_path}/${tenant_name}_backup_${timestamp}.tar.gz" + echo "[â„šī¸] Using temporary backup directory: ${backup_target_dir}" + fi + + mkdir -p "$backup_target_dir" + local backup_path_prefix="${backup_target_dir}/backup_${tenant_name}_${timestamp}" + + echo -e "\n[💾] Starting backup of tenant '${tenant_name}'..." + local query="BACKUP DATA USING FILE ('${backup_path_prefix}')" + + if execute_sql "$GLOBAL_USER_KEY" "$query"; then + echo -e "\033[32m[✅] Successfully initiated tenant backup.\033[0m" + + if [[ "$compress" =~ ^[Yy]$ ]]; then + echo "[đŸ“Ļ] Compressing backup to ${archive_file}..." + + if command -v pigz &> /dev/null; then + tar -I "pigz -p $threads" -cf "$archive_file" -C "$backup_target_dir" . + else + tar -czf "$archive_file" -C "$backup_target_dir" . + fi + + if [ $? -eq 0 ]; then + echo -e "\033[32m[✅] Compression successful.\033[0m" + rm -rf "$backup_target_dir" + else + echo -e "\033[31m[❌] Error: Compression failed.\033[0m" + fi + fi + else + echo -e "\033[31m[❌] Error: Backup failed.\033[0m" + if [[ "$compress" =~ ^[Yy]$ ]]; then rm -rf "$backup_target_dir"; fi + fi +} + do_rename_db() { echo -e "\n\033[1m=== Rename Database (Company Name) ===\033[0m" select_schema "$GLOBAL_USER_KEY" @@ -400,9 +469,10 @@ while true; do echo "4) Copy Schema" echo "5) Drop Schema" echo "6) Rename Database (Update Company Name)" - echo "7) Quit" + echo "7) Backup Tenant" + echo "8) Quit" echo - read -p "Please select an option (1-7): " choice + read -p "Please select an option (1-8): " choice case $choice in 1) @@ -424,6 +494,9 @@ while true; do do_rename_db ;; 7) + do_backup + ;; + 8) echo "[👋] Exiting." exit 0 ;; diff --git a/packages.conf b/packages.conf index cdc1b83..3d9a018 100644 --- a/packages.conf +++ b/packages.conf @@ -16,4 +16,4 @@ SCRIPT_PACKAGES["monitor"]="Monitor Suite|1.3.1|Scripts for monitoring system he SCRIPT_PACKAGES["keymanager"]="Key Manager|1.2.3|A utility for managing HDB user keys for SAP HANA.|https://git.technopunk.space/tomi/Scripts/raw/branch/main/keymanager.sh" SCRIPT_PACKAGES["cleaner"]="File Cleaner|1.1.0|A simple script to clean up temporary files and logs.|https://git.technopunk.space/tomi/Scripts/raw/branch/main/cleaner.sh" SCRIPT_PACKAGES["hanatool"]="HANA Tool|1.6.0|A command-line tool for various SAP HANA administration tasks.|https://git.technopunk.space/tomi/Scripts/raw/branch/main/hanatool.sh" -SCRIPT_PACKAGES["hanamgr"]="HANA Manager UI|1.4.0|An interactive command-line menu for managing SAP HANA schemas and databases.|https://git.technopunk.space/tomi/Scripts/raw/branch/main/hanamgr.sh" +SCRIPT_PACKAGES["hanamgr"]="HANA Manager UI|1.5.0|An interactive command-line menu for managing SAP HANA schemas and databases.|https://git.technopunk.space/tomi/Scripts/raw/branch/main/hanamgr.sh"