Listing 1: SQL-Backups prüfen mit der PowerShell [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$BackupPath, [Parameter(Mandatory=$true)] [string]$LogPath, [Parameter(Mandatory=$true)] [string]$SQLServerInstance, [Parameter(Mandatory=$false)] [string]$SQLUsername, [Parameter(Mandatory=$false)] [string]$SQLPassword ) function Write-Log { param([string]$Message) $logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'): $Message" Write-Output $logMessage | Out-File -Append $LogPath -Encoding UTF8 Write-Host $logMessage } # Variable zur Verfolgung des Skriptstatus $success = $true try { # Überprüfen und Erstellen des Log-Verzeichnisses $logDir = Split-Path -Parent $LogPath if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } # Überprüfen der Backupdatei if (-not (Test-Path $BackupPath)) { throw "Backupdatei nicht gefunden: $BackupPath" } Write-Log "Backupdatei gefunden: $BackupPath" # Erstellen des SQL-Befehls $restoreCommand = "RESTORE VERIFYONLY FROM DISK='$BackupPath'" # Vorbereiten der SQL-Authentifizierung $sqlParams = @{ Query = $restoreCommand ServerInstance = $SQLServerInstance ErrorAction = 'Stop' } if ($SQLUsername -and $SQLPassword) { $sqlParams['Username'] = $SQLUsername $sqlParams['Password'] = $SQLPassword } else { Write-Log "Verwende WindowsAuthentifizierung." } # Ausführen des RESTORE VERIFYONLY-Befehls Write-Log "Starte Backupvalidierung..." try { Invoke-Sqlcmd @sqlParams Write-Log "Backupvalidierung erfolgreich abgeschlossen." } catch { $errorMessage = "Backupvalidierung fehlgeschlagen: $($_.Exception.Message)" Write-Log "Fehler: $errorMessage" $success = $false } } catch { $errorMessage = "Fehler: $($_.Exception.Message)" Write-Log $errorMessage $success = $false } finally { Write-Log "Backup-Validierungsprozess beendet." } # Beenden des Skripts mit entsprechendem Exit-Code if ($success) { exit 0 } else { exit 1 } Listing 2: Bash-Skript für die Backupprüfung #!/bin/bash BACKUP_PATH="/mnt/backups/ daily_backup.tar.gz" LOG_FILE="/mnt/backups/backup_validation.log" LOG_DIR=$(dirname "$LOG_FILE") # Funktion zum Loggen log_message() { echo "$(date '+%Y-%m-%d %H:%M:%S'): $1" | tee -a "$LOG_FILE" } # Überprüfe und erstelle Log-Verzeichnis if [ ! -d "$LOG_DIR" ]; then mkdir -p "$LOG_DIR" || { echo "Fehler: Kann Log-Verzeichnis nicht erstellen."; exit 1; } fi # Überprüfe ob Backupdatei existiert if [ -f "$BACKUP_PATH" ]; then log_message "Backupdatei existiert." else log_message "Fehler: Backupdatei fehlt!" exit 1 fi # Verifiziere Backupintegrität mit tar if tar -tzf "$BACKUP_PATH" > /dev/null 2>&1; then log_message "Backupintegrität verifiziert." else log_message "Fehler: Backup-Integritätsprüfung fehlgeschlagen!" exit 1 fi # Protokolliere Abschluss log_message "Backupvalidierung abgeschlossen."