none
Backup Base de Datos SQL en C# RRS feed

  • Pregunta

  • Buenas gente. Tengo un problema al crear un backup de una BD SQL en C#

    Tengo esta función para crear en un timer

                String Hora;
    
                Hora = DateTime.Now.ToString("HH") + ":" + DateTime.Now.ToString("mm") + ":" + DateTime.Now.ToString("ss");
    
                if (Hora == "10:44:50")
                {
    
                    Task taskBackup = new Task(EjecutarBackup);
                    taskBackup.Start();
                    await taskBackup;
    
                }

    Dentro del Task

      String Ruta;
    
    Ruta = "rutadeguardado+nombredb.bak";
    
    String mensaje = NRestauracion.GenerarBackUpAutomatico(Ruta); //Se ejecuta la función que utiliza un Procedimiento Almacenado para crear el backup
    
    tmBackup.Stop();//Detengo el timer una vez que se ejecuta el backup

    Y este es el SP

    USE [BDEmpresa]
    GO
    /****** Object:  StoredProcedure [dbo].[GenerarBackUp]    Script Date: 28/2/2020 10:29:33 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    ALTER PROCEDURE [dbo].[GenerarBackUpAutomatico]
    
    @NombreArchivo VARCHAR(1000) = NULL
    
    AS
    
    BACKUP DATABASE [BDEmpresa]
    TO DISK = @NombreArchivo
    WITH DESCRIPTION = N'Copia de Seguridad para restaurar la base de datos BDEmpresa',
    NOFORMAT,
    INIT,
    NAME = N'BDEmpresa',
    SKIP,
    NOREWIND,
    NOUNLOAD,
    STATS = 10,
    CHECKSUM;

    El problema es que me genera 3 archivos de backup, uno cada segundo, por ejemplo, a las 10:50:01, 10:50:02 y 10:50:03.

    Probé usando el modo de depuración y funciona sin problemas, me genera un solo archivo

    Gracias y espero sus respuestas :D

    viernes, 28 de febrero de 2020 13:57

Respuestas

  • Fíjate que solo detienes el timer cuando el backup termina. Esto quiere decir que si el timer se dispara rápido (por ejemplo, cada medio segundo), le da tiempo de lanzar varias veces el task de backup antes de que el primer backup termine y detenga el timer.

    Solución: Llama al Stop del timer antes de lanzar el backup, no cuando el backup termine.

    • Marcado como respuesta Xx_BySkull_xX viernes, 28 de febrero de 2020 15:44
    viernes, 28 de febrero de 2020 14:07
    Moderador

Todas las respuestas

  • Fíjate que solo detienes el timer cuando el backup termina. Esto quiere decir que si el timer se dispara rápido (por ejemplo, cada medio segundo), le da tiempo de lanzar varias veces el task de backup antes de que el primer backup termine y detenga el timer.

    Solución: Llama al Stop del timer antes de lanzar el backup, no cuando el backup termine.

    • Marcado como respuesta Xx_BySkull_xX viernes, 28 de febrero de 2020 15:44
    viernes, 28 de febrero de 2020 14:07
    Moderador
  • Gracias :D
    viernes, 28 de febrero de 2020 15:44