sql-server - SQL Server命令行备份语句

标签 sql-server command-line backup

有谁知道是否有一种方法可以将 SQL Server 备份编写到批处理文件中,以便可以从命令行执行?

最佳答案

下面是一个示例,您可以使用 SQLCMD 作为批处理脚本运行(复制粘贴到 .bat 文件中)。 Sql Server 客户端工具中的实用程序:

备份:

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

恢复:

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

关于sql-server - SQL Server命令行备份语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/880487/

相关文章:

sql - 如何从备份更新数据表的单列

linux - Bash 中的 MySQL 备份脚本

php - 使用 Drupal 恢复备份站点

sql - SQL中,去除相邻的重复行并进行时间计算

c# - 将大量数据从 txt、csv 文件插入到具有少量无效行的 SQL Server 表中

sql - 仅当源数据不为空且不同时才更新目标表

sql-server - SQL Azure - 登录后阶段超时时间已过

shell - 使用 ls 列出所有与模式不匹配的文件

java - 用于获取 Windows 上当前正在运行的应用程序列表的命令

command-line - 如何通过 Clap 将所有命令行参数传递给另一个程序?