如何在文件名中保存带有日期的 SQL 备份?

 

我正在创建一个 SQL 查询脚本来备份数据库,我做得很好。但现在我被要求在 .bak 文件的末尾添加日期和时间戳。关于如何完成的任何想法?

通常您可以在使用 SSMS GUI 或 T-SQL 备份数据库时自己指定文件名。但是如果有大量的数据库,或者你想定期执行备份任务并保留不同版本的bak文件(例如,在SQL Server中创建具有唯一名称的每日数据库备份。),您可能需要一种更自动化和更智能的方式来将日期添加到 SQL 备份的文件名。

为此,最常用的方法是使用有效的 T-SQL 脚本。或者,您可以使用集中管理工具来安排 SQL数据库备份并直观地恢复到以前的日期。

继续阅读并选择您喜欢的方式:

文件名中带有日期的 SQL 备份命令(一个数据库)

要备份一个带有日期的特定 SQL数据库,您可以使用文件名中带有日期的 SQL 备份命令,例如:

DECLARE @FileName varchar(1000)
SELECT @FileName = (SELECT 'filepath\databasename' + convert(varchar(500), GetDate(),112) + '.bak')
BACKUP DATABASE databasename TO DISK=@FileName

填写您自己的备份路径和数据库名称,并将脚本复制到新的查询窗口。执行后,您将获得一个名称由数据库和备份日期组成的 bak 文件。

带日期的备份数据库

用于备份所有 SQL数据库并将日期添加到文件名的脚本

在很多情况下,您可能希望备份的不仅仅是一两个数据库,而是一个实例的所有数据库,那么以下脚本可以为您节省大量时间:

DECLARE @name VARCHAR(50) -- database name 
DECLARE @path VARCHAR(256) -- path for backup files 
DECLARE @fileName VARCHAR(256) -- filename for backup 
DECLARE @fileDate VARCHAR(20) -- used for file name
 
-- specify database backup directory e.g. 'D:\backup\'
SET @path = 'backuppath'
 
-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + '_' + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','')
 
DECLARE db_cursor CURSOR READ_ONLY FOR 
SELECT name
FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases
AND state = 0 -- database is online
AND is_in_standby = 0 -- database is not read only for log shipping
 
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
 
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
   BACKUP DATABASE @name TO DISK = @fileName
 
   FETCH NEXT FROM db_cursor INTO @name
END
 
CLOSE db_cursor
DEALLOCATE db_cursor

执行该命令,它将备份所有非系统数据库的日期,甚至文件名中的特定时间点。您还可以排除您不想备份的其他数据库。

用日期备份所有数据库

如何使用文件名中的日期安排 SQL 备份?

现在您已经知道如何执行 SQL 备份并将日期添加到文件名。这是另一种可能的情况:您希望自动化操作,例如在SQL Server中创建具有唯一名称的每日数据库备份,但仅使用脚本很难实现这一点。因此,您可以使用SQL Server代理。

使用此工具,您可以为某些 T-SQL 命令添加计划,但请注意,它仅在SQL Server的非 Express 版本中可用。

1. 确保启用了SQL Server代理,否则,您需要右键单击它并“启动”它。然后选择New > 作业...开始。

sql server 代理

3. 在“步骤”选项卡中,单击新建...并输入“步骤名称”。然后您可以将您想要自动化的脚本复制到“命令”部分,然后单击“确定”进行确认。

4. 现在移动到“定时任务”s选项卡,单击“新建”为您刚刚输入的备份脚本设置新的计划。

添加时间表

5. 单击“确定”创建作业。然后您可以在SQL Server 代理 > “作业”下找到新作业,然后选择“作业开始步骤”立即对其进行测试。

如前所述,SQL Server 代理不适用于 Express 版本。如果这是你的情况,也许你可以尝试批处理文件和 Windows 任务计划程序的组合。

打开您的文本编辑器,将备份命令复制到其中。注意用于备份 SQL数据库的批处理脚本这里与 SSMS 中使用的 T-SQL 脚本不同,你可以试试这个:

@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:\DBList.txt
SqlCmd -E -S DESKTOP-AC51C0M\MSSQLSERVER_01 -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\MSSQLSERVER_01 -Q "BACKUP DATABASE [%%I] TO Disk='D:\备份\%%I-%NowDate%.bak'"
ECHO。)
 
REM 清理临时文件
IF EXIST "%DBList%" DEL /F /Q "%DBList%"
 
ENDLOCAL

将文本另存为批处理文件(扩展名为 .bat)。因此,每次双击它时,该脚本都会备份所有带有文件名日期的 SQL数据库。

要自动执行任务,您需要通过 Windows 搜索栏或通过以下路径访问任务计划程序:控制窗格(小图标/大图标)> 管理员工具 > 任务计划程序。

通过使用此工具,您可以创建基本任务,设置触发器(计划),并将操作设置为启动程序(即您创建的批处理文件)。之后,任务将按计划自动执行。

更轻松地安排 SQL 备份和还原到任何精确日期的方法

在文件名中包含日期的主要好处是“保留和识别不同版本的备份”,以便 SQL数据库可以在需要时恢复到准确的日期。为此,您还可以使用更简单的 SQL 备份管理工具,例如傲梅企业备份网络版.

它允许您按计划自动备份 SQL Server,并准确地将数据库恢复到任何日期的先前版本(完整或差异)。有了它,您无需使用复杂的 T-SQL 命令或费心区分备份文件。所有的操作都可以通过简单的点击来完成。

作为一个集中备份工具,它不仅适用于您的计算机,还支持局域网内的所有 Windows PC 和服务器。下载180天免费试用版进行尝试:

正确安装软件后,您可以在您要管理的所有客户端计算机上安装代理程序包。在创建集中备份任务之前“请求控制它们”。

请求控制

步骤 1。在傲梅企业备份网络版中,导航到"任务" > "新任务""SQL Server备份"

sql服务器备份

步骤 2.单击+ 添加计算机以检测具有SQL Server数据库的计算机,然后从列表中选择一台计算机进行备份。

添加计算机

步骤 3。单击+ 添加以检测所选计算机上的实例。您可以选择任何您想要的数据库,甚至可以一次选择所有数据库。

选择数据库

第 4 步。单击“添加存储”以指定目标路径。添加的网络共享或 NAS 将被保存以供您将来直接使用。然后单击“开始备份”以执行任务。

选择存储

◉ 您还可以设置“计划以自动执行任务,并在”“高级”选项卡中选择完整备份或差异备份。创建的备份文件将保存在具有相应日期的文件夹中。

日程设置

◉ 当您想从备份中恢复时,只需在““任务””选项卡中找到任务,然后从右上角的菜单中选择“恢复”即可。

恢复sql备份

◉ 您可以选择要还原的备份日期,或者具体要还原备份中的哪些数据库。

为便于管理和准确恢复,您可能希望在文件名中保存带有日期的 SQL 备份,这通常可以通过 T-SQL 命令来完成。

但是,如果您不想使用脚本,或者发现自动化任务很复杂,傲梅企业备份网络版版是一个值得尝试的替代方案。它使备份多个数据库、计划备份、将数据库恢复到某个日期变得更容易,甚至允许您将 SQL数据库恢复到另一台服务器直接地。