none
Backup de BD Ruta Compartida y realizar ZIP RRS feed

  • Pregunta

  • DECLARE @BD NVARCHAR(250)  -- Nombre de la BD
     
    DECLARE ITEM_CURSOR CURSOR  -- Declarando el Cursor y generando la lista de las BD
    FOR
    SELECT name
    FROM sys.databases ;  
     
    OPEN ITEM_CURSOR -- Abrir el cursos y sacar
     
    FETCH NEXT FROM ITEM_CURSOR INTO @BD -- Asigna el resultado a la variable
     
    WHILE @@FETCH_STATUS = 0 --Comienza el recorrido de la Lista
    BEGIN
    
    DECLARE @ruta nvarchar(500) -- Variable de la ruta de salida
    DECLARE @Nombre as nvarchar(500) -- Nombre de la salida con mensaje
    
    SET @ruta = 'D:\BackupBD\'+ @BD + '-' +   CONVERT(nvarchar(8), getdate(), 112)  + '.bak' --Ruta de salida mas BD las Fecha
    SET @Nombre = 'Full Backup of '+ @BD --Nombre de salida concatenado con la BD
    
    --Procedimiento de Backup
    BACKUP DATABASE @BD  
    TO DISK = @ruta
       WITH FORMAT,  
          MEDIANAME = 'BD',  
          NAME = @Nombre;  
     
    FETCH NEXT FROM ITEM_CURSOR INTO @BD -- Recorre el siguiente registro
     
    END
    -- Termina y cierra el Cursor
    CLOSE ITEM_CURSOR  
    DEALLOCATE ITEM_CURSOR 

    Hola Amigos,

    1- A este mismo Script quisiera que cada bak lo comprima es decir ZIP cual seria el comando.

    2- El siguiente Script funciona muy bien pero tengo mis dudas respecto al enviarlo a una ruta compartida he creado las ruta y si ingresar por windows también tengo las credenciales de windows pero desde el SQL no ingresa me sale el siguiente mensaje: 

    Cannot open backup device '\\192.168.1.17\BackupBD\BD\Master-20180926.bak'. Operating system error 5(Acceso denegado.).

    Alguna Idea. 

    Garcias.


    Conocuica

    miércoles, 26 de septiembre de 2018 12:47

Respuestas

  • Primera opción: si tienes una edición Enterprise de SQL, puedes añadir en el commando de backup la coletilla "... WITH COMPRESSION" y eso genera un backup comprimido.

    Si necesitas hacerlo con una versión más "pequeña" entonces me temo que tendrás que habilitar el xp_cmdshell (cosa que no se suele recomendar por razones de seguridad) y usar un EXEC del xp_cmdshell pasándole como argumento una línea de comandos que llame a tu compresor de archivos favorito igual que si lo estuvieses llamando desde una ventana de comandos.

    Si quieres evitarte el xp_cmdshell, otra opción es usar un Job del Agente para ejecutar los backups. Puedes meter un paso del job que genere el .bak, y un segundo paso que ejecute el comando de compresión. Esto no requiere xp_cmdshell, pero tiene la limitación de que no lo puedes hacer en la edición Express, que no trae el Agente.

    En cuanto a lo del "acceso denegado" al hacer el backup en la ruta compartida: Recuerda que el backup no se ejecuta con los permisos del usuario que ejecuta la sentencia SQL (o el procedimiento que la contiene). No, el archivo de Backup lo genera el servicio SQL, que rueda bajo las credenciales de la cuenta de servicio (que se configura durante la instalación y puedes examinar desde el SQL Server Configuration Manager). Es esta cuenta de servicio la que tiene que tener permisos sobre la carpeta compartida. No sirve de nada que tenga permisos el usuario que lanza el backup.

    miércoles, 26 de septiembre de 2018 14:40