Oracle DR: Fix backup retention and monitoring for new naming convention

Problem: Backups accumulated on DR (73 files, 4 days) instead of keeping only 2 days
- transfer_incremental.ps1 had no cleanup function (ran 2x/day without cleanup)
- transfer_to_dr.ps1 cleanup had poor logging
- oracle-backup-monitor-proxmox.sh couldn't detect new L0/L1 backup format

Changes:
- Add cleanup to transfer_incremental.ps1 (delete backups older than 2 days)
- Improve cleanup logging in transfer_to_dr.ps1 (shows count before/after)
- Update oracle-backup-monitor-proxmox.sh to detect both naming conventions:
  * Old: *FULL*.BKP, *INCR*.BKP
  * New: L0_*.BKP (Level 0), L1_*.BKP (Level 1)
- Remove temporary files from /input/ directory

Result: Monitor now correctly reports backup age, cleanup runs after each transfer

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Marius
2025-10-14 18:05:11 +03:00
parent 249bf4d98a
commit b50cc2b8c4
8 changed files with 57 additions and 507 deletions

View File

@@ -294,7 +294,9 @@ check_backups() {
[ -z "$total_size" ] && total_size="0G"
total_size_label="$total_size"
local latest_full=$(find "$BACKUP_PATH" -maxdepth 1 -type f -name '*FULL*.BKP' -printf '%T@ %p\n' | sort -nr | head -1 | cut -d' ' -f2-)
# Search for FULL backups (both old and new naming conventions)
# Old format: *FULL*.BKP, New format: L0_*.BKP
local latest_full=$(find "$BACKUP_PATH" -maxdepth 1 -type f \( -name '*FULL*.BKP' -o -name 'L0_*.BKP' \) -printf '%T@ %p\n' | sort -nr | head -1 | cut -d' ' -f2-)
if [ -n "$latest_full" ]; then
local full_timestamp=$(stat -c %Y "$latest_full")
local current_timestamp=$(date +%s)
@@ -310,7 +312,10 @@ check_backups() {
errors+=("No FULL backup found")
fi
local latest_cumulative=$(find "$BACKUP_PATH" -maxdepth 1 -type f \( -name '*INCR*.BKP' -o -name '*INCREMENTAL*.BKP' -o -name '*CUMULATIVE*.BKP' \) -printf '%T@ %p\n' | sort -nr | head -1 | cut -d' ' -f2-)
# Search for INCREMENTAL backups (both old and new naming conventions)
# Old format: *INCR*.BKP, *INCREMENTAL*.BKP, *CUMULATIVE*.BKP
# New format: L1_*.BKP
local latest_cumulative=$(find "$BACKUP_PATH" -maxdepth 1 -type f \( -name '*INCR*.BKP' -o -name '*INCREMENTAL*.BKP' -o -name '*CUMULATIVE*.BKP' -o -name 'L1_*.BKP' \) -printf '%T@ %p\n' | sort -nr | head -1 | cut -d' ' -f2-)
if [ -n "$latest_cumulative" ]; then
local cumulative_timestamp=$(stat -c %Y "$latest_cumulative")
local current_timestamp=$(date +%s)
@@ -323,10 +328,10 @@ check_backups() {
fi
fi
# Collect ALL FULL backups
# Collect ALL FULL backups (both old and new naming conventions)
local -a full_backups=()
local -a full_backup_entries=()
if readarray -t full_backups < <(find "$BACKUP_PATH" -maxdepth 1 -type f -name '*FULL*.BKP' -printf '%T@ %p\n' | sort -nr | cut -d' ' -f2-); then
if readarray -t full_backups < <(find "$BACKUP_PATH" -maxdepth 1 -type f \( -name '*FULL*.BKP' -o -name 'L0_*.BKP' \) -printf '%T@ %p\n' | sort -nr | cut -d' ' -f2-); then
for backup_file in "${full_backups[@]}"; do
[ -z "$backup_file" ] && continue
local backup_name=$(basename "$backup_file")
@@ -337,10 +342,10 @@ check_backups() {
done
fi
# Collect ALL INCREMENTAL backups
# Collect ALL INCREMENTAL backups (both old and new naming conventions)
local -a incr_backups=()
local -a incr_backup_entries=()
if readarray -t incr_backups < <(find "$BACKUP_PATH" -maxdepth 1 -type f \( -name '*INCR*.BKP' -o -name '*INCREMENTAL*.BKP' -o -name '*CUMULATIVE*.BKP' \) -printf '%T@ %p\n' | sort -nr | cut -d' ' -f2-); then
if readarray -t incr_backups < <(find "$BACKUP_PATH" -maxdepth 1 -type f \( -name '*INCR*.BKP' -o -name '*INCREMENTAL*.BKP' -o -name '*CUMULATIVE*.BKP' -o -name 'L1_*.BKP' \) -printf '%T@ %p\n' | sort -nr | cut -d' ' -f2-); then
for backup_file in "${incr_backups[@]}"; do
[ -z "$backup_file" ] && continue
local backup_name=$(basename "$backup_file")

View File

@@ -48,6 +48,34 @@ function Get-IncrementalBackups {
return $backupFiles
}
function Cleanup-OldBackupsOnDR {
param([int]$RetentionDays = 2)
Write-Log "Cleaning up old backups on DR (keeping last $RetentionDays days)..."
try {
# Count fișiere înainte de cleanup
$countBefore = & ssh -n -p $DRPort -i $SSHKeyPath "${DRUser}@${DRHost}" "find '$DRPath' -name '*.BKP' -type f | wc -l" 2>&1
Write-Log "Backups before cleanup: $countBefore"
# Cleanup: șterge fișiere mai vechi de $RetentionDays zile
$cleanupCmd = "find '$DRPath' -name '*.BKP' -type f -mtime +$RetentionDays -delete 2>&1"
$result = & ssh -n -p $DRPort -i $SSHKeyPath "${DRUser}@${DRHost}" $cleanupCmd 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Log "Cleanup warning: $result" "WARNING"
}
# Count fișiere după cleanup
$countAfter = & ssh -n -p $DRPort -i $SSHKeyPath "${DRUser}@${DRHost}" "find '$DRPath' -name '*.BKP' -type f | wc -l" 2>&1
$deleted = [int]$countBefore - [int]$countAfter
Write-Log "Cleanup completed: Deleted $deleted old backup files, $countAfter remaining"
} catch {
Write-Log "Cleanup error: $_" "WARNING"
}
}
try {
Write-Log "========================================="
Write-Log "Oracle INCREMENTAL Backup Transfer Started"
@@ -117,6 +145,9 @@ try {
exit 1
}
# Cleanup old backups pe DR (keep last 2 days)
Cleanup-OldBackupsOnDR -RetentionDays 2
Write-Log "========================================="
Write-Log "INCREMENTAL Backup Transfer Completed Successfully"
Write-Log "========================================="

View File

@@ -119,13 +119,25 @@ function Cleanup-OldBackupsOnDR {
Write-Log "Cleaning up old backups on DR (keeping last $RetentionDays days)..."
try {
# Count fișiere înainte de cleanup
$countBefore = & ssh -n -p $DRPort -i $SSHKeyPath "${DRUser}@${DRHost}" "find '$DRPath' -name '*.BKP' -type f | wc -l" 2>&1
Write-Log "Backups before cleanup: $countBefore"
# Cleanup: șterge fișiere mai vechi de $RetentionDays zile - Linux find command
$cleanupCmd = "find '$DRPath' -type f -mtime +$RetentionDays -delete 2>/dev/null || true"
$cleanupCmd = "find '$DRPath' -name '*.BKP' -type f -mtime +$RetentionDays -delete 2>&1"
$result = & ssh -n -p $DRPort -i $SSHKeyPath "${DRUser}@${DRHost}" $cleanupCmd 2>&1
Write-Log "Cleanup completed on DR (removed files older than $RetentionDays days)"
if ($LASTEXITCODE -ne 0) {
Write-Log "Cleanup warning: $result" "WARNING"
}
# Count fișiere după cleanup
$countAfter = & ssh -n -p $DRPort -i $SSHKeyPath "${DRUser}@${DRHost}" "find '$DRPath' -name '*.BKP' -type f | wc -l" 2>&1
$deleted = [int]$countBefore - [int]$countAfter
Write-Log "Cleanup completed: Deleted $deleted old backup files, $countAfter remaining"
} catch {
Write-Log "Cleanup warning: $_" "WARNING"
Write-Log "Cleanup error: $_" "WARNING"
}
}