todas - Declaración de copia de seguridad de línea de comando de SQL Server
script para hacer backup sql server (6)
¿Alguien sabe si existe una forma de crear una copia de seguridad de la copia de seguridad de SQL Server en un archivo por lotes, para que se pueda ejecutar desde una línea de comandos?
Aquí hay un ejemplo que puede ejecutar como un script por lotes (copiar y pegar en un archivo .bat), usando la utilidad SQLCMD en las herramientas del cliente del servidor Sql:
APOYO:
echo off
cls
echo -- BACKUP DATABASE --
set /p DATABASENAME=Enter database name:
:: filename format Name-Date (eg MyDatabase-2009.5.19.bak)
set DATESTAMP=%DATE:~-4%.%DATE:~7,2%.%DATE:~4,2%
set BACKUPFILENAME=%CD%/%DATABASENAME%-%DATESTAMP%.bak
set SERVERNAME=your server name here
echo.
sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N''%BACKUPFILENAME%'' WITH INIT , NOUNLOAD , NAME = N''%DATABASENAME% backup'', NOSKIP , STATS = 10, NOFORMAT"
echo.
pause
RESTAURAR:
echo off
cls
echo -- RESTORE DATABASE --
set /p BACKUPFILENAME=Enter backup file name:%CD%/
set /p DATABASENAME=Enter database name:
set SERVERNAME=your server name here
sqlcmd -E -S %SERVERNAME% -d master -Q "ALTER DATABASE [%DATABASENAME%] SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
:: WARNING - delete the database, suits me
:: sqlcmd -E -S %SERVERNAME% -d master -Q "IF EXISTS (SELECT * FROM sysdatabases WHERE name=N''%DATABASENAME%'' ) DROP DATABASE [%DATABASENAME%]"
:: sqlcmd -E -S %SERVERNAME% -d master -Q "CREATE DATABASE [%DATABASENAME%]"
:: restore
sqlcmd -E -S %SERVERNAME% -d master -Q "RESTORE DATABASE [%DATABASENAME%] FROM DISK = N''%CD%/%BACKUPFILENAME%'' WITH REPLACE"
:: remap user/login (http://msdn.microsoft.com/en-us/library/ms174378.aspx)
sqlcmd -E -S %SERVERNAME% -d %DATABASENAME% -Q "sp_change_users_login ''Update_One'', ''login-name'', ''user-name''"
sqlcmd -E -S %SERVERNAME% -d master -Q "ALTER DATABASE [%DATABASENAME%] SET MULTI_USER"
echo.
pause
Código de , en caso de que necesite tiempo en su nombre de archivo (da 2014-02-21_1035)
echo off
cls
echo -- BACKUP DATABASE --
set /p DATABASENAME=Enter database name:
For /f "tokens=2-4 delims=/ " %%a in (''date /t'') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
:: filename format Name-Date (eg MyDatabase-2009.5.19.bak)
set DATESTAMP=%mydate%_%mytime%
set BACKUPFILENAME=%CD%/%DATABASENAME%-%DATESTAMP%.bak
set SERVERNAME=.
echo.
sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N''%BACKUPFILENAME%'' WITH INIT , NOUNLOAD , NAME = N''%DATABASENAME% backup'', NOSKIP , STATS = 10, NOFORMAT"
echo.
pause
Combine Remove Old Backup files con la secuencia de comandos anterior, luego puede realizar la copia de seguridad mediante un planificador, mantenga los últimos 10 archivos de copia de seguridad
echo off
:: set folder to save backup files ex. BACKUPPATH=c:/backup
set BACKUPPATH=<<back up folder here>>
:: set Sql Server location ex. set SERVERNAME=localhost/SQLEXPRESS
set SERVERNAME=<<sql host here>>
:: set Database name to backup
set DATABASENAME=<<db name here>>
:: filename format Name-Date (eg MyDatabase-2009-5-19_1700.bak)
For /f "tokens=2-4 delims=/ " %%a in (''date /t'') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
set DATESTAMP=%mydate%_%mytime%
set BACKUPFILENAME=%BACKUPPATH%/%DATABASENAME%-%DATESTAMP%.bak
echo.
sqlcmd -E -S %SERVERNAME% -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = N''%BACKUPFILENAME%'' WITH INIT , NOUNLOAD , NAME = N''%DATABASENAME% backup'', NOSKIP , STATS = 10, NOFORMAT"
echo.
:: In this case, we are choosing to keep the most recent 10 files
:: Also, the files we are looking for have a ''bak'' extension
for /f "skip=10 delims=" %%F in (''dir %BACKUPPATH%/*.bak /s/b/o-d/a-d'') do del "%%F"
Estoy usando SQL Server 2005 Express, y tuve que habilitar la conexión de Canalizaciones con nombre para poder hacer una copia de seguridad desde el Comando de Windows. Mi guión final es este:
@echo off
set DB_NAME=Your_DB_Name
set BK_FILE=D:/DB_Backups/%DB_NAME%.bak
set DB_HOSTNAME=Your_DB_Hostname
echo.
echo.
echo Backing up %DB_NAME% to %BK_FILE%...
echo.
echo.
sqlcmd -E -S np://%DB_HOSTNAME%/pipe/MSSQL$SQLEXPRESS/sql/query -d master -Q "BACKUP DATABASE [%DB_NAME%] TO DISK = N''%BK_FILE%'' WITH INIT , NOUNLOAD , NAME = N''%DB_NAME% backup'', NOSKIP , STATS = 10, NOFORMAT"
echo.
echo Done!
echo.
¡Está funcionando bien aquí!
Puede usar sqlcmd para ejecutar una copia de seguridad o cualquier otra secuencia de comandos de T-SQL. Puede encontrar las instrucciones detalladas y ejemplos en varios modificadores sqlcmd útiles en este artículo: Trabajar con la línea de comandos de SQL Server (sqlcmd)
si necesita el archivo de proceso por lotes para programar la copia de seguridad, las herramientas de administración de SQL tienen tareas programadas integradas ...