Buscar palabras clave en la documentación    Buscar Ayuda

Doc. Ref. 8444
Título: Ejemplo de programación de copia de seguridad desde hexa
Autor: Philippe Calvó
Última actualización: 30/11/2009


Ejemplo de programación de copias de seguridad en Hexa

En este documento se describe un ejemplo de uso de las tareas programadas de Hexa para automatrizar el proceso de realización de copias de seguridad. Los objetivos son los siguientes:

  1. Exportar el conmtenido de la base de datos a un archivo que podamos copiar.
  2. Replicar un conjunto de carpetas que incluyen la base de datos exportada, a una unidad de respaldo
  3. Enviar un EMail informando del resultrado de los procesos
  4. Programar los tres procesos anteriroes en un script que se ejecute periódicamente cada día y en una ubicación diferente una vez a la semana

Exportación de la base de datos

Si la base de datos es SQL Server, necesitaremos lanzar una copia de seguridad de su contenido para después poder replicar esta información en otro soporte. Esto se puede hacer con el siguiente comando:

C:\Archivos de programa\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S NOMBRESERVIDOR -i "ruta\seguridad.sql" -o "rutalog\seguridadsql.log"

El archivo rutalog\seguridadsql.log almacenaría un log del proceso. El archivo ruta\seguridad.sq deberá contener un comando SQL que realice la copia:

BACKUP DATABASE [NombreBaseDeDatos] TO [carpeta seguridad en ruta\hexa] WITH NOFORMAT, INIT, NAME = N'HexaSoltec-Completa Base de datos Copia de seguridad', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

"NombreBaseDeDatos" sería el nombre de la base de datos y "carpeta seguridad en ruta\hexa" la ruta donde se debe hacer la copia (normalmente se recomienda crear una carpeta "seguridad" en la carpeta principal de Hexa)

Si se está utilizando una base de datos MDB en vez de SQL Server, es probable que el archivo esté abierto en el momento en el que se desea hacer la copia. La solución consiste en exportar todas las tablas a archivos "dat"

La función "ExpTbl" de Hexa permite exportar tablas a formato "dat" que contiene al mismo tiempo su estructura y su contenido. EL siguiente script realizará la exportación:

Intercambios.ExpTbl ("", "Nombre", "Datos=Si Sobreescribir=Si Referencia='CopSeg'")
ç

El primer parámetro permite indicar un filtro para las tablas (cadena vacía indica todas) y el segundo el orden por el que se exportarán. El tercer parámetro permite incluir opciones. La opción "Datos=Si" indica que se debe exportar el contenido de la tabla además de la estructura, la opción "Referencia='CopSeg'" añade al nombre de cada archivo generado, que por defecto es el de la tabla, la cadena "CopSeg"

La exportación se realiza, por defecto, en la carpeta "dat" que cuelga de la carpeta principal de Hexa

Réplica de carpetas

Para replicar un conjunto de carpetas en otra ubicación se puede usar una aplicación de sincronización de carpetas. Recomendamos la herramienta gratuita y áltamente eficiente "robociopy". En un archivo de proceso por lotes (bat) pondríamos:

c:\archivos de programa\robocopy\robocopy.exe" riutaorigen rutadestino /e /r:0 /np /w:0 /purge>rutalog\logcopia.txt

Enviar un EMail informando del proceso de copia

La función Hexa "Eml8" permite enviar mensajes de correo electrónico. La sintaxis para este ejemplo sería:

Comunicaciones.EMl8 "Codigo='codigoempleado1' Or Codigo='codigoempleado2'", "", "Destinatario='Empleado' Asunto='Proceso diario de copia de seguridad' Contenido='" & Resultado & "' Adjuntos='rutalog\logcopia.txt'"

La opcion Destinatario='Empleado' indica que el EMail se envía a los empleados que cumplen la condición Codigo='codigoempleado1' Or Codigo='codigoempleado2' (el email se envía a dos empleados). En el contenido incluimos la variable "Resultado" en la que hemos almacenado el resultado del proceso de exportación de tablas (más adelante veremos cómo). Además añadimos un adjunto con el log del proceso de réplica para su compriobación.

Programación de la tarea con todo el proceso

Mediante el programador de tareas de Hexa podemos configurar que todo el proceso se ejecute con la periodicidad que nos interese, por ejemplo, cada día a las 00:00 horas. En el siguiente ejemplo el script completo realiza los procesos descritos y además hace la copia en dos ubicaciones diferentes, una para todos los días de la semana excepto el sábado y otra para ese día. Así dispondremos de una copia diaria y una semanal.

Function Main (PS0, PS1, PS2)
Resultado = Intercambios.ExpTbl ("", "Nombre", "Datos=Si Sobreescribir=Si Referencia='CopSeg'")
Resultado=Resultado & VbCrLf & "Replicado rutaorigen -en-> rutadestino (ver documento log adjunto)"
'como el comando ejecutar solo es capaz de ejecutar programas, no instrucciones dos como redirigir el resultado a un fichero, tenemos que tener un bat con el contenido:
' "c:\archivos de programa\robocopy\robocopy.exe" riutaorigen rutadestino /e /r:0 /np /w:0 /purge>rutalog\logcopia.txt
'y guardado en rutabatcopia
If FH.DiaSemana (Now ())<>6 Then'Los sábados la copia es en otro sitio (semanal
fh.ejecutar "rutabatcopia\seguridaddiaria.bat"
Formularios.Espera (3600000) 'Esperar 1 h a que acabe robocopy
Comunicaciones.EMl8 "Codigo='codigoempleado1' Or Codigo='codigoempleado2'", "", "Destinatario='Empleado' Asunto='Proceso diario de copia de seguridad' Contenido='" & Resultado & "' Adjuntos='rutalog\logcopia.txt'"
Else 'El sábado se hace en CopiaKernaba2 en vez de 1
fh.ejecutar "E:\KERNABA\DATOS\TREBALL\SistemaGestion\temp\seguridadsemanal.bat"
Formularios.Espera (3600000) 'Esperar 1 h a que acabe robocopy
Comunicaciones.EMl8 "Codigo='codigoempleado1' Or Codigo='codigoempleado2'", "", "Destinatario='Empleado' Asunto='Proceso semanal de copia de seguridad' Contenido='" & Resultado & "' Adjuntos='rutalog\logcopia.txt'"
End If
End Function
Tags Relacionados:

Ejemplo Script Seguridad Tareas