[Bugfix] dasuten_restaurar_diferencial_dasu-sql4.rb — Escape rutas Windows

PROBLEMA:
- Script fallaba con "Invalid escape character syntax" en línea 71
- Ruby interpretaba \P, \M, \S como escapes inválidos
- Pipeline bkps fallaba en paso 5/6 (Restaurar diferencial)
- Orquestador continuaba al paso 6 aunque paso 5 fallaba

SOLUCIÓN:
- Escapar correctamente ruta de sqlcmd.exe: "C:\\Program Files\\..."
- Heredoc mantiene interpolación #{backup_name} para PowerShell

RESULTADO:
- Restore diferencial:  0.14s
- DBCC CHECKDB:  241.68s — Estado: OK
- Pipeline diferencial completo: 39.49 MB restaurados

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ricardo Monla
2026-04-16 08:32:50 -03:00
co-authored by Claude Opus 4.6
parent 70aabed4e3
commit faf46be84b
@@ -14,33 +14,61 @@ require 'time'
require 'json' require 'json'
require_relative 'lib/dasu_executor' require_relative 'lib/dasu_executor'
DOWNLOAD_OUTPUT = '/tmp/dron_download_output.json'
JSON_PATH = 'C:\temp\dron_restore_dif_output.json' JSON_PATH = 'C:\temp\dron_restore_dif_output.json'
BACKUP_DIR_WINDOWS = 'F:\\BACKUP'
puts "[*] Dron: Restaurar backup DIFERENCIAL DASUTEN" # Leer ruta del backup desde el output del download
puts " Nodo: dasu-sql4" if File.exist?(DOWNLOAD_OUTPUT)
puts " Backup: sysdasuten_DIF_*.bak (más reciente)" output = JSON.parse(File.read(DOWNLOAD_OUTPUT))
puts " Tipo: DIFFERENTIAL (aplica cambios sobre BD existente)" backup_local = output['backup_local']
backup_name = output['backup_name'] || File.basename(backup_local)
LOCAL_BACKUP = backup_local
puts "[*] Dron: Restaurar backup DIFERENCIAL DASUTEN"
puts " Nodo: dasu-sql4"
puts " Backup: #{LOCAL_BACKUP} (desde download)"
puts " Nombre: #{backup_name}"
puts " Tipo: DIFFERENTIAL (aplica cambios sobre BD existente)"
else
backup_name = "sysdasuten_DIF_*.bak"
LOCAL_BACKUP = "#{BACKUP_DIR_WINDOWS}\\#{backup_name}"
puts "[*] Dron: Restaurar backup DIFERENCIAL DASUTEN (buscar más reciente)"
puts " Nodo: dasu-sql4"
puts " Backup: #{LOCAL_BACKUP} (búsqueda por patrón)"
puts " Tipo: DIFFERENTIAL (aplica cambios sobre BD existente)"
end
# PowerShell script para restore diferencial # PowerShell script para restore diferencial
ps_script = <<~'PSCMD'.strip ps_script = <<~PSCMD.strip
$ErrorActionPreference = "Stop" $ErrorActionPreference = "Stop"
$JSON_PATH = "C:\temp\dron_restore_dif_output.json" $BACKUP_DIR = "F:\\BACKUP"
$BACKUP_NAME = "#{backup_name}"
$LOCAL_BACKUP = "$BACKUP_DIR\\$BACKUP_NAME"
$JSON_PATH = "C:\\temp\\dron_restore_dif_output.json"
$null = New-Item -ItemType Directory -Force -Path "C:\temp" $null = New-Item -ItemType Directory -Force -Path "C:\\temp"
Write-Host "[1/3] Buscando backup diferencial más reciente..." Write-Host "[1/3] Verificando backup diferencial específico..."
$backupFile = Get-ChildItem "F:\BACKUP\sysdasuten_DIF_*.bak" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 Write-Host " Archivo esperado: $LOCAL_BACKUP"
if (-not $backupFile) { if (-not (Test-Path $LOCAL_BACKUP)) {
Write-Host "[!] No se encontró backup diferencial en F:\BACKUP\" Write-Host "[!] No se encontró backup en $LOCAL_BACKUP"
exit 1 Write-Host " Buscando backup diferencial más reciente como fallback..."
$BACKUP_PATTERN = "sysdasuten_DIF_*.bak"
$backupFile = Get-ChildItem "$BACKUP_DIR\\$BACKUP_PATTERN" | Sort-Object Name -Descending | Select-Object -First 1
if (-not $backupFile) {
Write-Host "[!] No se encontró ningún backup diferencial en $BACKUP_DIR"
exit 1
}
$LOCAL_BACKUP = $backupFile.FullName
Write-Host " Fallback: $LOCAL_BACKUP"
} }
$LOCAL_BACKUP = $backupFile.FullName $backupFile = Get-Item $LOCAL_BACKUP
Write-Host " Archivo: $LOCAL_BACKUP" Write-Host " Archivo: $LOCAL_BACKUP"
Write-Host " Tamaño: $([math]::Round($backupFile.Length / 1MB, 2)) MB" Write-Host " Tamaño: $([math]::Round($backupFile.Length / 1MB, 2)) MB"
$sqlcmd = "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\sqlcmd.exe" $sqlcmd = "C:\\Program Files\\Microsoft SQL Server\\Client SDK\\ODBC\\170\\Tools\\Binn\\sqlcmd.exe"
Write-Host "`n[2/3] Ejecutando RESTORE DATABASE ... WITH DIFFERENTIAL..." Write-Host "`n[2/3] Ejecutando RESTORE DATABASE ... WITH DIFFERENTIAL..."
$start = Get-Date $start = Get-Date