我可以在SQL Server中创建具有唯一名称的每日备份吗?

 

我想每天使用唯一名称对服务器的所有数据库进行完整的数据库备份。为此,我有一个保留时间戳的想法,这将使数据库副本分开。我怎样才能做到这一点。我不太了解这些类型的 SQL 备份作业。

- stackoverflow.com

随着时间的推移,SQL Server 数据库的备份会累积并占用越来越多的磁盘空间,使得在恢复时很难区分它们。有一次,当我遇到这种情况时,我想知道我是否可以以及如何在 SQL Server 中创建一个具有唯一名称的每日数据库备份,以便于恢复?我发现有很多方法可以做到这一点。

这里我在本文中总结了4种常见的方式及其具体步骤。希望它能帮助你。

具有唯一名称的 SQL Server 每日备份的 4 种方法

安排每日备份和在文件名中添加特定日期, 可能是在SQL Server中创建具有唯一名称的每日备份的最常见方法。下面的方法都是基于这个原理。在这里,我制作了一张表格,展示了他们如何满足基本需求。您可以点击左侧目录索引跳转到具体步骤。

备份方式一次备份多个数据库需要脚本支持 SQL Server 版本
维护计划×非速成版
SQL 服务器代理非速成版
任务调度程序所有版本
备份软件×所有版本

1. 创建维护计划以安排每日数据库备份

1. 启动SQL Server Management Studio (SSMS)并连接到您的实例。右键单击SQL Server 代理并选择启动以启用此功能。

启动 SQL Server 代理

2.打开管理菜单,右键单击维护计划并选择新建维护计划…

新维护计划

3. 单击对象资源管理器旁边的工具箱或上方栏,选择备份数据库任务,将其拖入右侧空白处,创建一个备份任务。然后双击此任务。

备份数据库任务

4. 在弹出的设置窗口中,根据需要选择备份类型(Full/Differential/Transaction Log)。

在Database(s)中选择一个或多个要备份的数据库。

选择数据库

备份到部分,选择为每个数据库创建一个备份文件 ,并在文件夹中指定目标位置。

然后您可以单击确定以完成设置。

为每个数据库创建一个备份文件

5. 单击Subplan Schedule (日历图标),在弹出窗口中安排备份频率持续时间。单击“确定”完成设置。

子计划时间表

6.保存这个任务然后在SQL Server 代理 > 作业中找到它,右击这个任务并选择作业开始步骤

一步开始工作

7. 完成后,来到目标文件夹,您可以看到备份已创建,文件名包含日期。

注意:如果您认为上述操作很复杂,您还可以使用维护计划向导在SQL Server中创建具有唯一名称的每日备份。步骤基本相同。

2. 使用 SQL Server 代理创建具有唯一名称的每日备份

1. 启动SSMS并连接到您的实例。右键单击SQL Server 代理并选择启动以启用此功能。

2. 打开SQL Server 代理菜单,右键单击作业并选择新建作业

新工作

3. 在弹出的窗口中,选择左侧选项卡中的通用,填写名称描述

4. 转到左侧选项卡中的步骤页面,单击新建...打开新作业步骤窗口。

命名此步骤,并在类型中选择Transact-SQL 脚本 (T-SQL)

700

在Command中输入备份脚本。在这里,我为您提供了 2 个脚本,分别用于备份单个数据库和多个数据库。

备份单个数据库的脚本

-- 1. 变量声明
DECLARE @path VARCHAR(500)
DECLARE @name VARCHAR(500)
DECLARE @pathwithname VARCHAR(500)
DECLARE @time DATETIME
DECLARE @year VARCHAR(4)
DECLARE @month VARCHAR(2)
DECLARE @day VARCHAR( 2)
DECLARE @hour VARCHAR(2)
DECLARE @minute VARCHAR(2)
DECLARE @second VARCHAR(2)

-- 2.设置备份路径
>SET @path = 'filepath'

-- 3.获取时间值
SELECT @time = GETDATE()
SELECT @year = (SELECT CONVERT(VARCHAR(4), DATEPART(yy, @time)))
SELECT @month = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mm,@time),' 00')))
SELECT @day = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(dd,@time),'00'))) SELECT @hour = (SELECT CONVERT
(VARCHAR(2), FORMAT(DATEPART(hh,@time ),'00')))
SELECT @minute = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mi,@time),'00'))) SELECT
@second = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(ss,@time),'00')))

-- 4. 定义文件名格式
SELECT @name =' databasename ' + '_' + @year + @month + @day + @hour + @minute + @second
SET @pathwithname = @path + @name + '.bak'

--5.执行备份命令
BACKUP DATABASE [ databasename ]
TO DISK = @pathwithname WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10

注意事项
1.第一部分Variable declaration中列出了所有必要的变量,您可以根据要包含在文件名中的内容来删除它们。
2 . 在第二部分设置备份路径中,您需要指定一个目标位置。例如:D:\Backup\
3。在第三部分获取时间值中,GETDATE、CONVERT、FORMAT 和 DATEPART 函数用于为每个变量分配特定的值。
GETDATE:获取当前日期和时间,并将它们分配给@time 变量
CONVERT:为每个变量提取具体值(年、月、日、时、分、秒)。
格式:将 DATEPART 函数的值格式化为两位数的字符串。那么个位数的月、日、时、分、秒前面会多一个0。
DATEPART:将所有结果转换为 VARCHAR 字符串。
4 . 第四部分定义文件名格式,定义文件名的输出格式。您可以根据需要自定义变量及其顺序。
5 . 在第五部分执行备份命令中,
NOFORMAT: 指定备份操作不会覆盖媒体卷上现有的媒体头和备份集。这是默认行为。
初始化: 指示备份集附加到指定的媒体集,保留现有备份集。这是默认行为。
SKIP: 禁用 BACKUP 语句执行的备份集到期和名称检查,以防止覆盖备份集。
REWIND: 指定 SQL Server 释放并倒回磁带。这是默认行为。
NOUNLOAD: 指定在备份操作之后磁带仍然加载在磁带驱动器上。
STATS: 每次完成另一个百分比时显示备份执行进度消息。

备份所有非系统数据库的脚本

--1. 变量声明
DECLARE @path VARCHAR(500)
DECLARE @name VARCHAR(500)
DECLARE @filename VARCHAR(256)
DECLARE @time DATETIME
DECLARE @year VARCHAR(4)
DECLARE @month VARCHAR(2)
DECLARE @day VARCHAR(2)
DECLARE @ hour VARCHAR(2)
DECLARE @minute VARCHAR(2)
DECLARE @second VARCHAR(2)

-- 2.设置备份路径
SET @path = ' filepath

 -- 3.获取时间值
SELECT @time = GETDATE()
SELECT @year = (SELECT CONVERT(VARCHAR(4), DATEPART(yy, @time)))
SELECT @month = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mm,@time),'00')))
SELECT @day = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(dd,@time),'00'))) SELECT @hour = (SELECT CONVERT
(VARCHAR(2), FORMAT(DATEPART(hh,@time ),'00')))
SELECT @minute = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mi,@time),'00'))) SELECT
@second = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART( ss ,@ time ),'00')))

-- 4. 定义
游标 
操作','tempdb') -- 排除系统数据库
--5. 初始化游标操作 OPEN db_cursor   FETCH NEXT FROM db_cursor INTO @name   WHILE @@FETCH_STATUS = 0   BEGIN
-- 6. 定义文件名格式
SET @fileName = @path + @name + '_' + @year + @month + @day + @hour + @minute + @second + '.BAK' 
BACKUP DATABASE @name TO DISK = @fileName 
FETCH NEXT FROM db_cursor INTO @name  
END  
CLOSE db_cursor  
DEALLOCATE db_cursor

注意事项
1.前三部分与备份单个数据库基本相同。
2 . 在第四部分Defining cursor operations和第五部分Initializing cursor operations中,脚本会使用游标操作自动获取每个数据库的名称,并一一备份。
3 . 在第六部分定义文件名格式中,将定义备份文件名的输出格式。

5.转到Schedules页面,点击新建...在弹出的窗口中设置FrequencyDuration 。设置完成后,点击确定保存。

频率和持续时间

6.在Jobs中右击新建的job ,选择作业开始步骤完成后,来到目标位置,就可以看到具有唯一文件名的备份。

一步开始工作

3.通过任务计划程序安排每日备份批处理文件

1. 在记事本或其他文本编辑器中输入以下脚本。保存文件并将后缀 .txt 更改为.bat

声明 @strPath NVARCHAR(200)
set @strPath = convert(NVARCHAR(19),getdate(),120)
set @strPath = REPLACE(@strPath, ':' , '.')
set @strPath = ' filepath ' + @ strPath + '.bak'
BACKUP DATABASE [ databasename ] TO DISK = @strPath WITH NOINIT,NOUNLOAD,NOSKIP,STATS = 10,NOFORMAT

2. 打开任务计划(直接在搜索框搜索即可),在右侧目录点击创建基本任务

创建基本任务

3. 命名此任务,然后单击下一步转到触发器选项卡。

为这个任务命名

4. 选择您要备份数据库的频率,然后单击下一步

选择频率

5.安排具体时间开始这个任务。然后单击“下一步”

开始时间

6. 选择启动程序 in 操作选项卡,然后单击下一步

启动程序

7. 单击浏览…选择新创建的批处理文件。然后单击“下一步”

浏览

8.然后你会看到这个任务的执行。完成后,您可以单击“完成”来完成此任务。来到目标位置,您将看到具有唯一名称的备份。

4. 使用备份软件创建具有唯一名称的每日备份

如您所见,脚本可能很复杂且容易出错,并且维护计划在 Express 版本上不可用。所以,如果你不熟悉它们,或者你正在运行 SQL Server Express,我建议你使用专业的备份软件来创建具有唯一名称的每日备份。傲梅企业备份网络版可以是一个很好的选择。

傲梅企业备份网络版提供了一种简单且无错误的方式来安排每天、每周或每月的 SQL Server 备份。它允许您一次选择多个数据库甚至实例,因此您可以简单地设置一个可自定义名称的备份任务,让它自行运行。

此外,创建的任务可以集中管理和恢复。它使您能够选择要还原的任务中的所有或特定数据库,并选择要从哪个时间点还原的完整或差异备份。这无疑使您免于管理和查找大量名称复杂的 .bak 文件的麻烦。

此外,它专为企业设计,允许一名专家从一台计算机集中管理和操作 LAN 内所有笔记本电脑、工作站和服务器的备份。你甚至可以将 SQL 备份恢复到新数据库在另一台服务器上。总之,它可以大大提高效率和降低成本。

为您提供180天免费试用:

如何使用唯一名称备份和恢复每日备份

要正确使用傲梅企业备份网络版,特别是如果您想管理局域网内的多台计算机,您需要先进入“计算机”页面。单击上方栏的安装客户端程序可手动或远程下载客户端计算机上的Agent。

安装客户端程序

对于那些手动下载客户端程序的计算机,您需要请求对其进行控制才能进行进一步的操作。

单击计算机>不受控制的计算机,选择单个或多个客户端计算机的 IP,然后单击上方栏的请求控制。他们的计算机上会出现一个弹出窗口,一旦收到所有权限,您就可以随时管理他们。

请求控制

如何每天执行 SQL Server 自动备份

1. 点击“任务” > “新建任务”,选择“SQL Server备份 ”新建备份任务。将光标移动到弹出窗口中的任务名称,您可以随意更改。然后按照任务名称下方的 3 个步骤进行操作。

SQL 服务器备份

2. 第一步,点击添加计算机添加您要备份的受控客户端计算机。

添加计算机

3、 第2步,点击添加,可以选择单个或多个要备份的SQL实例和数据库。点击确定进入下一步。

选择数据库

4. 第3步选择一个位置作为目标路径。您可以单击“添加存储”来添加共享或NAS 路径作为存储端。

选择路径

此外,单击“设置”可以为备份启用加密、电子邮件通知和压缩,您可以选择 2 个压缩级别。级别越高,文件越小。它可以为您节省更多的磁盘空间,以及复制或移动它们的时间。

压缩

5. 单击设置旁边的计划,您可以选择一次、每天、每周或每月运行此任务。每个选项您可以选择特定的日期和开始时间。您也可以在之后更改它。

安排每日备份

点击高级可以选择执行完全和差异备份

高级设置

6. 完成这些设置后,您可以点击开始备份选择仅创建任务,或者创建并执行任务。创建后,任务将单独列在任务中,以供进一步编辑或恢复。

开始备份

如何将特定备份还原到原始位置或新位置

1. 进入任务页面,点击备份任务右上角的高级。选择恢复

恢复数据库

2. 选择要还原的客户端计算机,然后单击“下一步”。在下一个选项卡中,您可以选择具有要还原的唯一日期的特定数据库和备份(完整/差异) 。然后单击“下一步”

选择备份

3. 选择恢复到原始位置,或恢复到新位置。如果选择后者,则可以将备份恢复到局域网内受控计算机上的另一个实例。

此外,您还可以选择是否覆盖现有数据库

恢复到新位置

4. 设置完成后,您可以点击开始恢复

概括

在本文中,我提供了 4 种在SQL Server中创建具有唯一名称的每日数据库备份的方法。如果您认为这些步骤太繁琐并且您不熟悉 T-SQL 脚本,或者如果您正在运行 SQL Server Express,我建议您尝试使用 傲梅企业备份网络版作为替代方案来创建具有唯一名称的每日备份。

它也是一个集中式数据保护解决方案。除了 SQL Server 备份和恢复,它还提供文件备份功能,系统备份、磁盘备份、分区备份、基本同步、实时同步和镜像同步。您可以通过简单的点击快速完成这些任务。