
Con el fin de mantener un mecanismo de organización y a la vez automatización de las salvas del Sistema Versat, y teniendo en cuenta que si en el mismo servidor coexisten varias versiones de SQL Server, las tareas de mantenimiento no se ejecutan correctamente (mi caso que tengo SQL Server 2012 y SQL Server 2014 en el mismo host), traemos una solución sumamente integral para realizar las salvas y llevar una constancia de la misma. El sistema consta de 2 archivos, un script batch y un archivo SQL que se encarga de realizar las salvas. El script realiza las siguientes funcionalidades:
- Crear carpeta organizativa en caso de que no exista en formato año\mes (2020\09)
- Ejecuta el SQL para ejecutar la salva basado en un nombre de Base de Datos y con un nombre fijo (BASE_DATOSañomesdia) por ejemplo (VERSAT20200928) y la mueve a la carpeta organizativa
- Envia un correo al admin del versat o economico informando si la salva se realizó o no con exito
Empecemos creando un archivo. El nombre es irrelevante a la verdad, pero por cuestiones de comodidad le llamaremos “versat.bat” (la extension si es obligatoria). El contenido del archivo será el siguiente:
@echo off SET J=%date:~-10,2% SET A=%date:~-4% SET M=%date:~-7,2% SET H=%time:~0,2% SET MN=%time:~3,2% SET S=%time:~-5,2% MKDIR D:\Salvas_VERSAT\%A%\%M% SQLCMD -S\ -d -U -P -i BackupTheDatabase.sql if exist %A%%M%%J%.bak ( MOVE %A%%M%%J%.bak %A%\%M%\ powershell.exe -Command Send-MailMessage -From '[email protected]' -To '[email protected]' -Subject 'Salva Diaria' -Body 'Salva Realizada el %J% de %M% con exito' -SmtpServer ' ' -Port '25' ) else ( powershell.exe -Command Send-MailMessage -From '[email protected]' -To '[email protected]' -Subject 'Problema con la Salva Diaria' -Body 'La Salva Automatica del dia %J% de %M% no se ejecuto con exito. Debe revisar los detalles' -SmtpServer ' 3' -Port '25' )
El siguiente archivo será BackupTheDatabase.sql El nombre es el mismo que está en el script de batch asi que también puede ser otro, siempre y cuando recuerden cambiarlo allá. El contenido será este:
DECLARE @strDatabase nvarchar(50) DECLARE @strFolder nvarchar(500) SET @strDatabase = N'' SET @strFolder = N'D:\SALVAS_VERSAT' DECLARE @tToday datetime SET @tToday = GETDATE() DECLARE @strBackupName nvarchar(100) SET @strBackupName= @strDatabase +STR(DATEPART(year,@tToday),4,0) +REPLACE(STR(DATEPART(month,@tToday),2,0),N' ',N'0') +REPLACE(STR(DATEPART(day,@tToday),2,0),N' ',N'0') DECLARE @strBackupFile nvarchar(600) SET @strBackupFile = @strFolder+N'\'+@strBackupName+N'.bak' ALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATE BACKUP DATABASE @strDatabase TO DISK = @strBackupFile ALTER DATABASE SET MULTI_USER GO EXIT
Siempre recordando editar el nombre de la BD…
Ahora la segunda parte es agregar una tarea programada de Windows. Para ello, vamos a Inicio→Programador de Tareas
Ahora necesitamos hacer un par de austes, pues la tarea se configura para que solo se ejecute si el usuario ha iniciado sesion. O sea que si se va la corriente y viene, el servidor arranca, pero la tarea no se ejecutará. Para eso vamos a ir a las Tareas Activas como vemos en la imagen:
Y en la tarea del Versat pues damos doble Click para ir a la tarea. Una vez alli, le damos Click Derecho→ Propiedades y lo dejamos asi:
En este caso, el script va a almacenar la credencial (no es algo que me preocupe porque se lo que hace el script) y se va a ejecutar con los privilegios mas altos. Esto permite que la tarea no de problemas de permisos a la hora de ejecutarse. Una vez que damos en Aceptar, nos pedirá la contraseña del usuario. La ponemos y listo.
Ya terminamos en este lado del trabajo. Ahora nos queda permitir en el correo el envio desde el host del versat. Para ello, voy a explicar cómo lo hice (cada cual debe adaptarlo a sus necesidades y los permisos que tenga establecidos en su servidor).
Empecé creando un usuario en el Active Directory que se llama estrictamente igual que el host. En mi caso “virtualeco” para poder tener el correo [email protected]
Luego de esto, en mi servidor de correo postfix, se edita el fichero “/etc/postfix/rules/helo_access” y se agrega lo siguiente:
virtualeco.dominio.co.cu OK 192.168.1.100 OK
En ambos casos el separador para el OK es un tabulador
Y luego se escribe exactamente lo mismo en el archivo “/etc/postfix/rules/mynetworks”
virtualeco.dominio.co.cu OK 192.168.1.100 OK
Ambos son reglas que utilizo para permitir que se envien correos desde los servidores (Proxmox, PfSense, etc).
Ejecutas
postmap /etc/postfix/rules/helo_access && postmap /etc/postfix/rules/mynetworks
y listo, ejecutamos el script a mano para verificar el funcionamiento. En caso de que de error el envio del correo, deberán revisar la configuracion de su correo para estos parametros. Ya eso es tarea para la casa. Y el resultado es el siguiente:
Si lo quieren editar tanto el cuerpo como el asunto, ya es tema de cada cual. A mi con que me avise si se hizo o no se hizo me basta.
Agradecimientos: Eric E. Sedeño Estrada Telegram: @ericsedeno Por el script inicial de las salvas automaticas y a Danny Paula @danny920825.
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0
Es una buena alternativa a la Herramienta por defecto que existe desde antaño que es el Microsoft SQL Server Managment Studio de toda la vida. Con ese resolvi un Plan de Mantenimiento muy facilmente, como siempre se ha hecho.
Mozilla/5.0 (Linux; Android 8.0.0; FIG-LX2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36
Jeje el nombre de la base de datos donde se pone… Demás esta decir que es un super aporte