SQL Server command line backup statement

前端 未结 6 539
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-04 10:41

Does any one know if there is a way to script out SQL Server backup in to a batch file, so that it could be executed from a command line?

相关标签:
6条回答
  • 2020-12-04 11:11

    Combine Remove Old Backup files with above script then this can perform backup by a scheduler, keep last 10 backup files

    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"
    
    0 讨论(0)
  • 2020-12-04 11:12

    Here's an example you can run as a batch script (copy-paste into a .bat file), using the SQLCMD utility in Sql Server client tools:

    BACKUP:

    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
    

    RESTORE:

    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
    
    0 讨论(0)
  • 2020-12-04 11:17

    You can use sqlcmd to run a backup, or any other T-SQL script. You can find the detailed instructions and examples on various useful sqlcmd switches in this article: Working with the SQL Server command line (sqlcmd)

    0 讨论(0)
  • 2020-12-04 11:22

    if you need the batch file to schedule the backup, the SQL management tools have scheduled tasks built in...

    0 讨论(0)
  • 2020-12-04 11:25

    Seba Illingworth's code, In case you need time in your file name (it gives 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
    
    0 讨论(0)
  • 2020-12-04 11:30

    I am using SQL Server 2005 Express, and I had to enable Named Pipes connection to be able to backup from the Windows Command. My final script is this:

    @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.
    

    It's working just fine here!!

    0 讨论(0)
提交回复
热议问题