Introducción
FactuposBackup es una app de Windows que vive en la bandeja del sistema (tray) y se encarga de respaldar todas las bases de datos del SQL Server todos los días automáticamente, comprimirlas a ZIP, y restaurarlas cuando lo necesités.
Qué incluye
- Respaldo automático diario a la hora que elijas (default 23:00).
- Compresión ZIP de cada `.bak` para ahorrar espacio (~70-80% menos).
- Retención configurable (default 7 días, después borra los viejos).
- Reintentos automáticos de conexión y por BD si algo falla.
- Botón para restaurar BDs en lote desde una carpeta con `.bak` o `.zip`.
- Reinicio diario del server opcional (default 03:00).
- Auto-logon de Windows (Server 2019/2022/2025).
- Mapeo automático de unidades de red al iniciar.
- Auto-update: la app se actualiza sola cuando publicamos versión nueva.
Instalación
Requisitos previos
- Windows Server 2019, 2022 o 2025 (también funciona en Windows 10/11).
- Microsoft ODBC Driver 17 o 18 for SQL Server. Descargar de:
https://learn.microsoft.com/sql/connect/odbc/download-odbc-driver-for-sql-server - SQL Server local con autenticación SQL habilitada (Mixed Mode), usuario `sa` o equivalente con permisos de BACKUP.
Pasos
- En el menú principal del sistema web, ir a Herramientas → Backup → FactuposBackup (Windows).
- Descargar FactuposBackup.exe.
- Copiarlo al server SQL en una carpeta como
C:\FactuposBackup\. - Doble click para abrir.
- Llenar la sección Configuración (ver siguiente sección).
Configuración inicial
La primera vez que abrís la app, llená estos campos en la sección Configuración:
- Servidor SQL — default
127.0.0.1(localhost). Si tenés instancia nombrada:localhost\SQLEXPRESS. - Usuario — default
sa. - Password — campo enmascarado. Click en "Mostrar" para verificar.
- Ruta backup — default
R:\BACKUPTEMP. Click en `...` para elegir otra carpeta. - Hora diaria — formato HH:MM 24h, default
23:00. - Retención (días) — borra ZIPs > N días.
0= no borra nada. - Comprimir a ZIP — checkbox. Si lo desmarcás, deja el `.bak` sin comprimir.
Después marcá:
- ✓ Iniciar con Windows — registra la app en el Run del registro para que arranque al login.
- ✓ Iniciar minimizado en la bandeja — al arrancar va directo al tray sin mostrar la ventana.
Click en Probar conexión → debe mostrar "Conexión exitosa, N BDs encontradas". Después Guardar configuración.
127.0.0.1, user sa, password Stms.2003@svr$ y ruta R:\BACKUPTEMP. Si esos son los correctos, solo confirmás y ya.
Respaldo diario automático
Una vez configurada y abierta (residente en bandeja), la app dispara el respaldo todos los días a la hora configurada. El proceso por BD:
- Conecta al SQL.
- Lista todas las BDs activas (excluye
master,tempdb,model,msdb). - Por cada BD:
BACKUP DATABASE [X] TO DISK WITH FORMAT, INIT, COMPRESSION. - Comprime el `.bak` a `.zip` y borra el `.bak` original.
- Aplica retención (borra ZIPs viejos según los días configurados).
Reintentos a prueba de errores
- Si la conexión SQL falla → 3 reintentos con espera creciente (10s, 20s, 30s).
- Si una BD falla → 2 reintentos con 15s entre cada uno.
- Si una BD agota los reintentos → se loguea como FALLA y continúa con las siguientes (no aborta el proceso).
- Verificación de conexión viva entre BDs (
SELECT 1); si se cayó, reabre antes de seguir.
Respaldo manual ahora
Hay dos formas de disparar un respaldo sin esperar la hora:
- El botón grande "▶ INICIAR RESPALDO AHORA" arriba de la ventana.
- Click derecho en el icono de bandeja → Ejecutar respaldo ahora.
Avance en vivo
Mientras el respaldo corre, la tabla central muestra cada BD con su estado:
- Pendiente (gris) — no empezó todavía.
- Respaldando… (azul) — ejecutando BACKUP.
- Comprimiendo… (azul) — armando el ZIP.
- OK (verde) — terminada con éxito, muestra tamaño .bak/.zip y tiempo.
- FALLA (rojo) — falló todos los reintentos.
Abajo hay un log oscuro con cada línea timestamp del proceso (también queda guardado en FactuposBackup.log al lado del .exe).
Restaurar BDs desde una carpeta
El botón "↺ RESTAURAR BDs…" arriba abre el modal de restauración en lote.
Cómo usar
- Click en
...de "Carpeta origen" para elegir la carpeta con los `.bak` o `.zip`. - La app lista todos los archivos detectados con un checkbox `☑/☐` para elegir cuáles restaurar.
- Cada fila muestra una columna "Destino BD" con el nombre que se va a usar al restaurar.
- Las carpetas "Datos (.mdf)" y "Logs (.ldf)" vienen con los defaults
D:\SqlDatayC:\SqlLog(configurables y persistidos). - Click en "↺ Restaurar seleccionadas" → confirmación → ejecuta.
Cómo se calcula el "Destino BD" automáticamente
La app toma lo que está antes del primer underscore del nombre del archivo. Ejemplos:
agrocentro_INVEFACON.bak→ BD destino: agrocentrofactupos_20260514_230003.bak→ BD destino: factuposmibd.bak→ BD destino: mibd
mi_base_datos (con underscore en el nombre legítimo).
Nombres de archivos físicos limpios
El restore reubica los `.mdf`/`.ldf` con nombres limpios basados en el destino:
- 1 datafile:
{destino}.mdf - 1 log:
{destino}_log.ldf - Varios datafiles:
{destino}.mdf,{destino}_2.ndf,{destino}_3.ndf, …
WITH REPLACE, RECOVERY — si ya existe una BD con el nombre destino, la pisa. Hay confirmación previa, pero usalo con cuidado.
Bandeja del sistema
La app vive en la bandeja del sistema con un icono "SQL". Características:
- El botón X de la ventana cierra a bandeja, no termina la app.
- Click derecho en el icono → menú: Mostrar ventana / Ejecutar respaldo ahora / Salir.
- Doble click en el icono = mostrar ventana.
- Si marcaste "Iniciar con Windows" + "Iniciar minimizado", la app arranca al login y queda directo en la bandeja sin mostrar ventana.
El status bar dentro de la ventana muestra cuándo es la próxima corrida programada.
Reinicio diario del server
En la sección Configuración hay un checkbox:
[ ] Reiniciar el servidor diariamente a las [03:00]
Si lo activás, la app dispara shutdown /r /f /t 1 a la hora indicada — útil para mantener el server limpio (cierra sesiones colgadas, libera memoria, aplica updates pendientes).
Auto-logon de Windows
En Server 2019 esto se hacía con netplwiz. En Server 2022 y 2025 esa opción ya no aparece directo. La app trae un botón que aplica los cambios necesarios al registro de Windows.
Cómo usar
- Sección Configuración → Auto-logon Windows: [Establecer auto-inicio].
- Se abre un dialog pidiendo:
- Usuario (precargado con el usuario actual)
- Password (campo oculto, checkbox "Mostrar password")
- Dominio / equipo (precargado con el nombre del equipo)
- Click Aplicar.
- Reiniciar el server para probar.
Para revertir: Quitar auto-inicio. La app borra la clave del password y vuelve al login manual.
El password queda en el registro en TEXTO PLANO (HKLM\…\Winlogon\DefaultPassword). Es como funciona el auto-logon de Windows, no es un bug de la app. Restringí permisos NTFS si es server crítico.
Unidades de red al iniciar
La app puede mapear automáticamente unidades de red al arrancar (equivalente a net use). Útil para que el server siempre tenga la Z: y X: disponibles sin tener que mapearlas a mano.
Defaults precargados
- Z: →
\\192.168.7.32\Datos(user:olman) - X: →
\\192.168.7.32\d(user:olman)
Editar la lista
Sección Configuración → Unidades de red: [Configurar…] abre un dialog con una tabla editable:
- Letra (ej. Z, X, W)
- UNC (ej.
\\servidor\share) - Usuario
- Password (oculto)
- Persistente (checkbox — agrega
/persistent:yes) - Botón ✕ por fila para quitar
Botón + Agregar para nuevas filas. Guardar y aplicar persiste en config y re-mapea inmediatamente.
Comportamiento al iniciar la app
- Si la unidad ya está mapeada al MISMO UNC → no hace nada.
- Si está mapeada a OTRO UNC → desmapea primero y vuelve a mapear.
- Errores (timeout, credenciales inválidas) se loguean pero no rompen la app.
Auto-update
La app se actualiza sola cuando publicamos una versión nueva. No hay que andar copiando .exe a cada server.
Cómo funciona
- 5 segundos después de iniciar, la app consulta el manifest del servidor:
https://invefacon.factupos.com/downloads/factupos_backup_version.json - Compara la versión del manifest contra la versión local.
- Si hay versión nueva, te muestra un diálogo: "Hay nueva versión vX.Y.Z disponible. ¿Descargar e instalar?".
- Si aceptás: descarga el .exe nuevo a
FactuposBackup.new.exe, escribe unupdater.batque espera a que la app actual cierre, reemplaza el .exe y relanza. - La app se reinicia sola con la versión nueva.
Disparo manual
Botón "Buscar ahora" en la sección Configuración fuerza el chequeo en cualquier momento.
Desactivar
Desmarcar el checkbox "Buscar actualizaciones automáticamente al iniciar" en Configuración.
=== FactuposBackup vX.Y.Z iniciada ===), y propiedades del .exe (botón derecho → Detalles).
Solución de problemas
"No hay ODBC Driver para SQL Server"
Falta instalar Microsoft ODBC Driver 17 o 18. Bajalo de:
https://learn.microsoft.com/sql/connect/odbc/download-odbc-driver-for-sql-server
Después reiniciá la app.
"Login failed for user 'sa'"
- Probá las credenciales en SSMS para descartar.
- Asegurate que SQL Server permite "SQL Server Authentication" (Mixed Mode), no solo Windows Authentication. Está en SSMS → botón derecho sobre el server → Properties → Security → "SQL Server and Windows Authentication mode".
"Cannot open backup device 'R:\BACKUPTEMP\...'. Operating system error 5 (Access is denied)"
La cuenta del servicio MSSQLSERVER no puede escribir en la carpeta de backup. Dale permisos de escritura sobre esa carpeta a la cuenta del servicio (típicamente NT SERVICE\MSSQLSERVER).
El respaldo no se dispara a las 23:00
- La app debe estar corriendo (en bandeja). Si la cerraste con "Salir", no se dispara.
- Verificá que el icono "SQL" esté en la bandeja a esa hora.
- Mirá
FactuposBackup.logal lado del .exe para ver qué pasó.
Auto-logon "Acceso denegado"
La app necesita correr como Administrador para escribir en HKLM. Cerrala, click derecho en FactuposBackup.exe → Ejecutar como administrador.
Mapeo de unidad falla
- Probá manualmente desde CMD:
net use Z: \\192.168.7.32\Datos /user:olman password - Si falla, revisá usuario, password y permisos del share.
- Si funciona manual pero la app no, mirá el log para el mensaje exacto.
config.json corrupto
Si el archivo de configuración se corrompe (arrancó vacío o con caracteres raros), la app lo respalda como config.json.corrupt y arranca con defaults. No se cae. Solo reconfigurá y guardá.