Página principal » cómo » Secuencias de comandos por lotes para respaldar todas sus bases de datos de SQL Server

    Secuencias de comandos por lotes para respaldar todas sus bases de datos de SQL Server

    Ya hemos cubierto cómo hacer una copia de seguridad de una base de datos de SQL Server desde la línea de comandos, entonces, ¿qué sucede si desea hacer una copia de seguridad de todas sus bases de datos a la vez? Podría crear un script por lotes que ejecute el comando de copia de seguridad para cada base de datos, pero este script debería actualizarse cada vez que se agregue o elimine una base de datos. Además, las copias de seguridad de la base de datos se agregarán a un archivo que aumentará con el tamaño de la nueva copia de seguridad cada vez que se ejecute. En lugar de eso, en verdad "configúrelo y olvídelo", crearemos un script por lotes que se adaptará a su SQL Server a medida que se agreguen y eliminen nuevas bases de datos..

    Para llegar al punto, este es el script de copia de seguridad:

    @ECHO OFF
    SETLOCAL

    REM Obtenga la fecha en el formato YYYY-MM-DD (asume que la configuración regional es Estados Unidos)
    FOR / F “tokens = 1,2,3,4 delimitantes = /” %% A IN ('Date / T') DO SET NowDate = %% D - %% B - %% C

    REM Construye una lista de bases de datos para respaldar
    SET DBList =% SystemDrive% SQLDBList.txt
    SqlCmd -E -S MyServer -h-1 -W -Q “SET NoCount ON; SELECCIONE Nombre DESDE master.dbo.sysDatabases DONDE [Nombre] NOT IN ('master', 'model', 'msdb', 'tempdb') ”>"% DBList% "

    REM Copia de seguridad de cada base de datos, antes de la fecha del nombre de archivo
    FOR / F “tokens = *” %% I IN (% DBList%) DO (
    ECHO Copia de seguridad de la base de datos: %% I
    SqlCmd -E -S MyServer -Q "BASE DE DATOS DE SEGURIDAD [%% I] TO Disk =" D: Backup% NowDate% _ %% I.bak "”
    ECO.
    )

    REM limpiar el archivo temporal
    SI EXISTE “% DBList%” DEL / F / Q “% DBList%”

    ENDLOCAL

    Suponiendo que la fecha es el 13/1/2009 y que tiene 3 bases de datos llamadas 'MyDB', 'AnotherDB' y 'DB Name with Spaces', el script producirá 3 archivos en la ubicación de copia de seguridad especificada:

    • 2009-01-13_AnotherDB.bak
    • 2009-01-13_DB Nombre con Spaces.bak
    • 2009-01-13_MyDB.bak

    Personalizar y ejecutar el script de lote

    Por supuesto, usted querrá personalizar el script a su entorno, así que esto es lo que debe hacer:

    • Si la configuración regional de su máquina no está establecida en los EE. UU., El comando 'Fecha / T' puede no devolver la fecha en el formato "Mar 01/13/2009". Si este es el caso, la variable NowDate no producirá el formato deseado y debe ajustarse. (1 lugar)
    • Cambie 'MyServer' para que sea el nombre de su SQL Server (agregue el nombre de la instancia si corresponde). (2 lugares)
    • Las bases de datos denominadas 'master', 'model', 'msdb' y 'tempdb' son bases de datos que se envían con SQL Server. Puede agregar nombres de bases de datos adicionales a esta lista si no desea que se realicen copias de seguridad. (1 lugar)
    • Cambie la ubicación de la copia de seguridad de 'D: Copia de seguridad' a la ubicación donde desea guardar los archivos de la base de datos.

    Una vez que haya personalizado el script por lotes, programelo para que se ejecute a través del Programador de tareas de Windows como un usuario con derechos de administrador y estará listo..