在本文中,我将分享如何利用批处理脚本备份 SQL 数据库,乃至备份全体实例的所有数据库,并先容如何自动化这些任务。
在开始之前,请确保您的打算机上已经安装了 SQLCMD 实用程序,由于它是输入 Transact-SQL 语句、系统过程和脚本文件的必要工具。通过这个实用程序,您可以编写批处理脚本来备份 SQL Server 数据库。基本的命令如下:
SqlCmd -E -S servername -Q "BACKUP DATABASE databasename TO DISK ='filepath\filename.bak'"

如果您只想备份一个或几个数据库而没有其他哀求,只需在文本编辑器中输入此命令并填写您自己的信息即可。但是如果你想保留不同版本的备份,并且每个文件都包含了详细的备份韶光,那么你可以利用下面的脚本:
ECHO OFF:: 设置保存备份文件的路径 例如 D:\backupset BACKUPPATH=:: 设置做事器和实例的名称set SERVERNAME=:: 设置数据库名称set DATABASENAME=:: 文件名格式 Name-DateFor /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%.bakSqlCmd -E -S %SERVERNAME% -d master -Q "备份数据库 [%DATABASENAME%] 到磁盘 = N'%BACKUPFILENAME%' WITH INIT, NOUNLOAD, NAME = N'%DATABASENAME% backup', NOSKIP, STATS = 10, NOFORMAT”ECHO.
填写您的备份路径、做事器名称和数据库名称,然后利用 .bat 扩展名保存此备份脚本。因此,您可以随时双击批处理文件备份 SQL数据库。
在某些情形下,您可能不仅要备份一两个数据库,还要备份SQL Server实例中的所有数据库。什么样的备份脚本可以帮助您做到这一点?
实际上,您只须要构建一个数据库列表并指定要从中打消的那些。例如,我想将我所有的 SQL数据库(系统数据库除外)备份到 D:\Backup,那么下面的批处理脚本将起浸染:
@ECHO OFFSETLOCALREM 以 YYYY-MM-DD 格式获取日期(假设措辞环境是美国)FOR /F "tokens=1,2,3,4 delims=/ " %%A IN ('Date /T' ) DO SET NowDate=%%D-%%B-%%CREM 建立要备份的数据库列表SET DBList=D:\SQLDBList.txtSqlCmd -E -S DESKTOP-AC51C0M -h-1 -W -Q " SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE [Name] NOT IN ('master','model','msdb','tempdb')" > "%DBList%"REM 备份每个数据库,添加日期到文件名FOR /F "tokens=" %%I IN (%DBList%) DO (ECHO 备份数据库:%%ISqlCmd -E -S DESKTOP-AC51C0M -Q "BACKUP DATABASE [%%I] TO Disk ='D:\Backup\%%I-%NowDate%.bak'"ECHO.)REM 清理临时文件IF EXIST "%DBList%" DEL /F /Q "%DBList%"ENDLOCAL
您可以修正构建 DBlist 的路径(之后会自动删除)和保存备份的文件夹。此外,此脚本不会备份系统数据库('master'、'model'、'msdb'、'tempdb'),您可以添加要打消的其他数据库。
为了便于管理,一些用户可能希望创建一个带有韶光标签的文件夹,以单独保存每个备份创建的所有 bak 文件。 因此,我还将供应一个替代脚本供您参考。
@ECHO OFFSETLOCALREM 以 YYYY-MM-DD 格式获取日期(假设措辞环境是美国)FOR /F "tokens=1,2,3,4 delims=/ " %%A IN ('Date /T' ) DO SET NowDate=%%D-%%B-%%CREM 建立要备份的数据库列表SET DBList=D:\SQLDBList.txtSqlCmd -E -S DESKTOP-AC51C0M -h-1 -W -Q " SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE [Name] NOT IN ('master','model','msdb','tempdb')" > "%DBList%"mkdir D:\Backupmkdir D: \Backup\%NowDate%REM 备份每个数据库,在文件名前添加日期FOR /F "tokens=" %%I IN (%DBList%) DO (ECHO 备份数据库:%%ISqlCmd -E -S DESKTOP -AC51C0M -Q"将数据库 [%%I] 备份到磁盘 ='D:\Backup\%NowDate%\%%I.bak'"ECHO。)REM 清理临时文件IF EXIST "%DBList%" DEL /F /Q "%DBList%"ENDLOCAL
它与前一个脚本的不同之处仅在于创建和命名备份文件。 您可以根据须要进行选择。
通过以上步骤,您就有了一个备份 SQL数据库的批处理文件。要自动实行它,您可以利用 Windows 任务操持程序。
1. 直接搜索“任务操持程序”,或导航到“掌握面板”>“管理工具”>“任务操持程序”。
2. 单击 “创建基本任务” 并按照引导选择 “触发器”。选项包括逐日、每周、每月等。
3. 将 触发器设置 为“启动程序”,然后浏览您确当地驱动器以选择批处理脚本。
完成设置后,任务操持程序将根据您设置的操持实行选定的批处理脚本。
备选方案:自动备份多个SQL Server数据库或实例利用批处理脚本备份SQL Server数据库的紧张好处是能够一次备份大量数据库、实行和自动备份的大略性。只要可以知足这些点,利用 GUI 的有效替代方案就不是一个坏主张。
例如,傲梅企业备份网络版包含支持 SQL 2005-2019 的SQL Server备份功能。有了它,您可以保护 LAN 内作为客户端署名的任何 Windows PC 或做事器。您可以自由选择数据库或全体实例进行备份和规复。
至于自动化,您可以设置操持以每天/每周/每月运行备份。支持完备备份和差异备份。除了SQL数据库,它还支持“文件、分区、磁盘和操作系统备份”。
在中心打算机上安装傲梅企业备份网络版后,您可以在所有客户端上安装代理程序包,并“要求掌握”您要管理的打算机。之后,您可以考试测验以下步骤来创建SQL Server备份任务。
1. 导航到“主页”选项卡并选择SQL Server 备份 开始。
2. 在步骤 1中,单击+ 添加打算机以检测所有具有SQL Server数据库的受控打算机,然后选择要备份的打算机。
3. 点击“第二步”,然后点击+ Add在弹出窗口中指定源数据。您可以选择多个数据库乃至多个实例进行备份。
4. 单击 步骤 3选择目的地。在弹出的窗口中点击 添加存储,在这里您可以输入路径和身份验证来指定网络共享 NAS。添加的路径将被保存以供您往后利用。
5. 现在您可以单击“操持”自动备份,并在“高等”选项卡中选择备份类型(完全/差异)。之后,单击“开始备份”。
一旦任务实行完毕,您无需担心后续问题。所有选定的数据库将根据您设置的操持自动备份。
总结虽然利用批处理脚本备份 SQL Server 数据库可能不是最大略的方法,但在自动化备份和批量备份方面确实有许多上风。比如,您可以一次备份一个实例中的所有数据库,并利用 Windows 任务调度程序灵巧田主动实行任务。
如果您以为编写批处理脚本过于繁琐,可以考虑利用像傲梅企业备份网络版这样的 SQL 备份软件。这类软件能够直不雅观地勾引您完成备份过程,并许可您在一台机器上选择任意数量的数据库。此外,您还可以设置韶光表选项来自动备份 SQL 数据库,知足您的需求。