Windows批处理文件备份sql数据库

时间:2015-01-24 06:26:22

标签: windows batch-file

我正在使用这个批处理文件备份我的sql server中的所有数据库,除了sql server附带的数据库,

@ECHO OFF
SETLOCAL

REM Get date in format YYYY-MM-DD (assumes the locale is the United States)
FOR /F “tokens=1,2,3,4 delims=/ ” %%A IN (‘Date /T’) DO SET NowDate=%%D-%%B-%%C

REM Build a list of databases to backup
SET DBList=%SystemDrive%SQLDBList.txt
SqlCmd -E -S MY-PC\SQLEXPRESS -h-1 -W -Q “SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE [Name] NOT IN (‘master’,’model’,’msdb’,’tempdb’)” > “%DBList%”

REM Backup each database, prepending the date to the filename
FOR /F “tokens=*” %%I IN (%DBList%) DO (
ECHO Backing up database: %%I
SqlCmd -E -S MY-PC\SQLEXPRESS -Q “BACKUP DATABASE [%%I] TO Disk=’D:\SQLdata\Backup\%NowDate%_%%I.bak'”
ECHO.
)

REM Clean up the temp file
IF EXIST “%DBList%” DEL /F /Q “%DBList%”

ENDLOCAL

我使用查询得到服务器名称 - SELECT @@SERVERNAME以防万一,路径完全相同。

我已经手动操作并通过Windows任务调度程序以管理员权限运行,但我没有在指定的文件夹中获得任何备份。我不知道我在这里做错了什么。我对这些东西很新,如果有人知道那么请指导我,谢谢。

2 个答案:

答案 0 :(得分:2)

我会使用像Editplus这样的文本编辑器,或者,如果必须,我会使用记事本 - 而不是WP来生成批处理文件。

批处理不理解“..” - 它需要 - 同样适用于单引号。

此外,您没有指定the specified folder的意思。您的路径名为relative,因此您选择相对于当前目录的MY-PC\SQLEXPRESS。您可以使用cd "c:\desired\directory\name"语句设置当前目录,也可以使用绝对路径(来自drive-root)。但请使用propoer类型的引号。

答案 1 :(得分:2)

您可以从https://ola.hallengren.com/获取备份脚本来备份SQL Express数据库上的数据库。使用SQL Management Studio提到了mark_s,我同意这使我更容易管理SQL Express。

如果您选择使用Ola Hallengren的脚本,您基本上运行从主页面下载的安装脚本。然后查看“DatabaseBackup”页面(从主页链接)。大约一半的页面是一个应该清除如何使用查询的示例列表。