SAP HANA 数据库自动完整备份脚本:
#!/bin/bash
# SAP HANA 全量备份脚本(含日志动态命名与目录管理)
# 时间:2025.03.06
# 全局配置
HDB_USERSTORE_KEY="backup" #backup key 对应systemdb system 用户权限
BACKUP_BASE_DIR="/backup/hana"
RETENTION_DAYS=7
DB_LIST=("SYSTEMDB" "PRD" "POP")
# 生成带时间戳的日志文件名
LOG_TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_DIR="${BACKUP_BASE_DIR}/logs"
LOG_FILE="${LOG_DIR}/backup_${LOG_TIMESTAMP}.log"
# 创建目录
mkdir -p ${BACKUP_BASE_DIR}/{logs,${DB_LIST[@]}} || exit 1
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 主流程
log ">>>>>> 备份任务启动 <<<<<<"
for DB_NAME in "${DB_LIST[@]}"; do
# 生成备份文件名(含时间戳)
BACKUP_TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="${DB_NAME}_${BACKUP_TIMESTAMP}"
BACKUP_PATH="${BACKUP_BASE_DIR}/${DB_NAME}/${BACKUP_FILE}"
# 执行备份命令
log "开始备份数据库: ${DB_NAME}"
hdbsql -U $HDB_USERSTORE_KEY "BACKUP DATA FOR $DB_NAME USING FILE ('$BACKUP_PATH')" >> $LOG_FILE 2>&1
# 结果检查
if [ $? -eq 0 ]; then
log "备份成功 → ${BACKUP_PATH}"
else
log "错误:${DB_NAME} 备份失败!"
exit 1
fi
# 清理旧备份文件
log "清理 ${DB_NAME} 的过期备份..."
find ${BACKUP_BASE_DIR}/${DB_NAME} -name "*" -mtime +${RETENTION_DAYS} -delete >> $LOG_FILE 2>&1
done
# 清理旧日志文件(保留7天)
log "清理过期日志..."
find ${LOG_DIR} -name "*.log" -mtime +${RETENTION_DAYS} -delete >> $LOG_FILE 2>&1
log ">>>>>> 任务完成 <<<<<<\n"