Para no tener que hacer esta tediosa tarea cada cierto periodo ( cosa que tenia que hacerlo yo :S ) , hice un pequeña aplicacion que en si es un Windows Service que genera un backup automaticamente cada dia.
1er paso: Crear un nuevo proyectollamado BackupServicio del tipo "Windows Service" con C#, esto creara 2 items por defecto el primero llamado Program.cs y Service1.cs lo renombramos BackupService.cs, ademas agregamos un item del tipo "InstallerClass" llamandolo InstallerService.cs. La clase BackupService.cs es donde ira la logica para generar el backup y en la clase InstallerService.cs ira la logica para la instalacion del servicio en el sistema.
2do paso: Agregamos 2 nuevas referencias a nuestro proyecto llamados Microsoft.SqlServer.Smo y Microsoft.SqlServer.ConnectionInfo, estos son importantes para poder hacer el backup de la base de datos y poder llamar a estas librerias.
using Microsoft.SqlServer.Management.Common;3er paso: Crearemos el metodo que realizara el trabajo de generar la base de datos, primero indicamos el nombre del archivo de backup para ello se toma como referencia la fecha actual. Segundo, indicamos el dispositivo donde se generara el backup por lo que indicamos "DeviceType.File" para crearlo como archivo, este se crea por defecto en la carpeta de backup del MSSQL. Por ultimo, indicamos la base de datos que queremos crearle su backup que esta representado por el valor de "this.database" y el nombre del servidor cuyo valor es representado por "this.server".
using Microsoft.SqlServer.Management.Smo
private void backupDB()Este metodo solo se llamara cuando la hora señalada sea identica a la hora del sistema, para ello el servicio verifica cada segundo dicha condición.
{
try
{
string fileBackup = "BACKUP_" + DateTime.Now.ToString("yyyyMMdd") + ".bak";
BackupDeviceItem bdi = new BackupDeviceItem(fileBackup, DeviceType.File);
Backup bu = new Backup();
bu.Database = this.database;
bu.Devices.Add(bdi);
bu.Initialize = true;
Server server = new Server(this.server);
bu.SqlBackup(server);
}
catch (Exception ex)
{
throw ex;
}
}
4to paso: Creamos un Timer para que cada segundo verifique si la hora para generar el backup.
using System.Timers;5to paso: Inicializamos el Timer con la configuraciones para que valide cada segundo la condicion de la hora. Para ello usamos el metodo "OnStart" que es el metodo que se ejecuta al momento de inicial el servicio. Ademas, vemos que usamos ElapsedEventHandler este metodo no sirve para decirle que en cada intervalo de tiempo ejecute el metodo OnElapsedTime que contiene la condicion para verificar la hora de sistema.
Timer timer = new Timer();
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
try
{
String tm1 = DateTime.Now.Hour.ToString() + ':' + DateTime.Now.Minute.ToString() + ':' + DateTime.Now.Second.ToString();
String tm2 = this.hour + ':' + this.minute + ':' + this.second;
if (tm1.Equals(tm2))
{
this.backupDB();
EventLog.WriteEntry(this.ServiceName, "Se genero el backup con fecha " + DateTime.Now.ToShortDateString(), System.Diagnostics.EventLogEntryType.Information);
}
}
catch (Exception ex)
{
EventLog.WriteEntry(this.ServiceName, "Error: " + ex.ToString(), System.Diagnostics.EventLogEntryType.Error);
}
}
protected override void OnStart(string[] args)Con esta breve descripcion puedo definir el funcionamiento del programa que aunque ya esta terminado no se puede probar hasta que se intale el servicio en el sistema.
{
try
{
this.loadConfiguration();
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Interval = 1000;
timer.Enabled = true;
}
catch (Exception ex)
{
EventLog.WriteEntry(this.ServiceName, "Error: " + ex.ToString(), System.Diagnostics.EventLogEntryType.Error);
this.Stop();
}
}
Para instalacion del servicio sigamos sigamo con la segunda parte Aqui
1 comentario:
Buena voz el Codigo ....
Publicar un comentario