首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不知道如何使用批处理脚本备份SQL Server数据库?看这里!

为什么要使用批处理脚本来备份SQL Server数据库?

在 Windows 中,批处理脚本是保存在文本文件中的一系列命令,可以用于自动执行重复性任务。在 SQL Server 的备份过程中,尽管批处理脚本可能不是最容易学习的方法,但在需要批量或定期备份数据库时,它无疑是一个高效的解决方案。

在本文中,我将分享如何使用批处理脚本备份 SQL 数据库,甚至备份整个实例的所有数据库,并介绍如何自动化这些任务。

在开始之前,请确保您的计算机上已经安装了 SQLCMD 实用程序,因为它是输入 Transact-SQL 语句、系统过程和脚本文件的必要工具。通过这个实用程序,您可以编写批处理脚本来备份 SQL Server 数据库。基本的命令如下:

SqlCmd -E -S servername -Q "BACKUP DATABASE databasename TO DISK ='filepath\filename.bak'"

如果您只想备份一个或几个数据库而没有其他要求,只需在文本编辑器中输入此命令并填写您自己的信息即可。但是如果你想保留不同版本的备份,并且每个文件都包含了具体的备份时间,那么你可以使用下面的脚本:

ECHO OFF

:: 设置保存备份文件的路径 例如 D:\backup

set BACKUPPATH=

:: 设置服务器和实例的名称

set SERVERNAME=

:: 设置数据库名称

set DATABASENAME=

:: 文件名格式 Name-Date

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

SqlCmd -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 OFF

SETLOCAL

REM 以 YYYY-MM-DD 格式获取日期(假设语言环境是美国)

FOR /F "tokens=1,2,3,4 delims=/ " %%A IN ('Date /T' ) DO SET NowDate=%%D-%%B-%%C

REM 建立要备份的数据库列表

SET DBList=D:\SQLDBList.txt

SqlCmd -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 备份数据库:%%I

SqlCmd -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 OFF

SETLOCAL

REM 以 YYYY-MM-DD 格式获取日期(假设语言环境是美国)

FOR /F "tokens=1,2,3,4 delims=/ " %%A IN ('Date /T' ) DO SET NowDate=%%D-%%B-%%C

REM 建立要备份的数据库列表

SET DBList=D:\SQLDBList.txt

SqlCmd -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:\Backup

mkdir D: \Backup\%NowDate%

REM 备份每个数据库,在文件名前添加日期

FOR /F "tokens=*" %%I IN (%DBList%) DO (

ECHO 备份数据库:%%I

SqlCmd -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 数据库,满足您的需求。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OYaCMUj5-PO5kA8leP4ol-hw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券