适用范围:SQL Server
本文介绍 SQL Server 备份和还原的基本备份媒体术语,适合刚刚接触 SQL Server 的读者。
本文介绍 SQL Server 用于备份媒体的格式、备份媒体和备份设备之间的对应关系、备份媒体上备份的组织结构,以及媒体集和媒体簇的若干注意事项。 本文还介绍在第一次使用备份媒体或在使用新媒体集替代旧媒体集之前对备份媒体进行初始化和格式化的步骤,如何覆盖媒体集中的旧备份集,以及如何将新备份集追加到媒体集。
注意
有关将 SQL Server 备份到 Azure Blob 存储的详细信息,请参阅 使用 Azure Blob 存储进行 SQL Server 备份和还原。
术语
媒体集
备份介质(磁带或磁盘文件)的有序集合,使用固定类型和数量的备份设备向其写入了一个或多个备份操作。
媒体家族
在介质集中的单个非镜像设备或一组镜像设备上创建的备份。
备份集
通过成功的备份操作添加到介质组的备份内容。
媒体集、媒体簇和备份集概述
包含一个或多个备份介质的集合的备份构成一个介质集。 媒体集 是 备份媒体(磁带或磁盘文件,或者是 Azure Blob)的有序集合,一个或多个备份操作使用固定类型和数量的备份设备向其写入。 给定媒体集使用磁带驱动器,或者使用磁盘驱动器或 Azure Blob,但不能结合使用两者或以上。
例如: 与媒体集相关联的备份设备可能是三个名为 \\.\TAPE0
、 \\.\TAPE1
和 \\.\TAPE2
的磁带驱动器。 该介质集仅包含磁带,最少需要三个磁带(每个磁带机一个磁带)。 备份设备的类型和数量在创建媒体集时确定,无法更改。 但是,如有必要,可以在备份和还原操作之间将给定设备替换为同一类型的设备。
介质集是在备份操作过程中通过格式化备份介质从而在备份介质上创建的。 有关详细信息,请参阅本文后面的 “创建新媒体集”。 设置格式后,每个文件或磁带都包含介质集的介质标头,可以开始接收备份内容。 有了标头后,备份操作会将指定数据备份到为该操作指定的所有备份设备中的备份介质。
注意
可以镜像介质集,以防介质卷(磁带或磁盘文件)被破坏。 有关详细信息,请参阅镜像备份媒体集 (SQL Server)。
压缩和未压缩的备份不能在一个媒体集中共存。 任何 SQL Server 2008 (10.0.x) 版本或更高版本都可以读取压缩的备份。 有关详细信息,请参阅备份压缩(SQL Server)。
媒体家庭
“介质簇” 由在介质集中的单个非镜像设备或一组镜像设备上创建的备份构成。 介质集所使用的备份设备的数量决定了介质集中的介质簇的数量。 例如,如果介质集使用两个非镜像备份设备,则该介质集包含两个介质簇。
在镜像介质集中,所有介质簇也是镜像的。 例如,如果使用六个备份设备来设置介质集的格式,其中使用了两个镜像,则有三个介质簇,每个介质簇包含两个相同的备份数据副本。 有关镜像媒体集的详细信息,请参阅镜像备份媒体集 (SQL Server)。
介质簇中的每个磁带或磁盘都分配了“介质序列号” 。 磁盘的介质序列号通常为 1。 在磁带介质簇中,起始磁带的序列号为 1,第二盘磁带的序列号为 2,依此类推。
介质标头
备份介质(磁盘文件或磁带)的每个卷都包含介质标头,介质标头是在第一次使用磁带(或磁盘)执行备份操作时创建的。 标头在重新设置介质格式之前保持不变。
介质标头包含标识介质(磁盘文件或磁带)及其在所属介质簇中的位置所需的所有信息。 此信息包括:
介质的名称。
介质名称是可选的,但建议始终使用能够明确标识介质的名称。 介质名称由设置介质格式的用户指定。
介质集的唯一标识号。
介质集中的介质簇数。
包含此介质的介质簇的序列号。
介质簇的唯一标识号。
介质簇中此介质的序列号。 对于磁盘文件,此值始终为 1。
介质说明中是包含 MTF 介质标签还是包含介质说明。
用于备份或还原操作的所有媒体都使用称为 Microsoft 磁带格式 (MTF) 的标准备份格式。 MTF 使得用户可以指定磁带标签,标签中包含特定于 MTF 的说明。 SQL Server 保留由另一个应用程序写入的任何 MTF 媒体标签,但不写入 MTF 媒体标签。
Microsoft 磁带格式媒体标签或媒体说明(自由格式文本)。
用于创建标签的备份软件的名称。
格式化介质的软件供应商的唯一供应商标识号。
创建标签的日期和时间。
介质集中的镜像数 (1-4),1 表示设备未镜像。
SQL Server 2019 (15.x) 可以处理由早期版本的 SQL Server 格式化的媒体。
备份集
成功的备份操作将向介质集中添加一个“备份集” 。 从备份所属的介质集方面对备份集进行说明。 如果备份介质只包含一个介质簇,则该簇包含整个备份集。 如果备份介质包含多个介质簇,则备份集分布在各个介质簇之间。 在每个介质上,备份集都包含说明备份集的标头。
下例显示一个 Transact-SQL 语句,该语句使用三个磁带驱动器作为备份设备,为 MyAdvWorks_MediaSet_1
数据库创建一个名为 AdventureWorks2022
的媒体集:
BACKUP DATABASE AdventureWorks2022
TO TAPE = '\\.\tape0',
TAPE = '\\.\tape1',
TAPE = '\\.\tape2'
WITH FORMAT,
MEDIANAME = 'MyAdvWorks_MediaSet_1';
如果成功,此备份操作将生成一个新的介质集,该介质集包含一个新介质标头和一个分布在三个磁带上的备份集。 下图说明了这些结果:
通常,创建介质集后,后续备份操作将依次向介质集追加其备份集。 备份集使用的所有介质构成了介质集,而与所涉及到的介质或备份设备的数量无关。 备份集按照其在介质集中的位置依次编号,从而使您能够指定还原哪个备份集。
介质集的每个备份操作都必须写入相同数量和类型的备份设备。 如果使用多个设备,则与第一个备份集相同,每个后续备份集的内容都分布在所有设备的备份介质中。 若要继续前面的示例,第二个备份作(差异备份)会将信息追加到同一介质集:
BACKUP DATABASE AdventureWorks2022
TO TAPE = '\\.\tape0',
TAPE = '\\.\tape1',
TAPE = '\\.\tape2'
WITH NOINIT,
MEDIANAME = 'AdventureWorksMediaSet1',
DIFFERENTIAL;
注意
此选项 NOINIT
为默认值,但为了清楚起见,包括此选项。
如果第二个备份操作成功,将向介质集写入第二个备份集,并按以下方式分布备份内容:
还原备份时,可以使用 FILE
此选项来指定要使用的备份。 以下示例演示在还原 FILE = <backup_set_file_number>
的完整数据库备份和同一介质集上的差异数据库备份时,如何使用 AdventureWorks2022
子句。 介质集使用了三个备份磁带,它们位于磁带机 \\.\tape0
、 tape1
和 tape2
上。
RESTORE DATABASE AdventureWorks2022
FROM TAPE = '\\.\tape0',
TAPE = '\\.\tape1',
TAPE = '\\.\tape2'
WITH MEDIANAME = 'AdventureWorksMediaSet1',
FILE = 1,
NORECOVERY;
RESTORE DATABASE AdventureWorks2022
FROM TAPE = '\\.\tape0',
TAPE = '\\.\tape1',
TAPE = '\\.\tape2'
WITH MEDIANAME = 'AdventureWorksMediaSet1',
FILE = 2,
RECOVERY;
GO
历史记录表存储了媒体集及其媒体簇和备份集的相关信息,有关历史记录表的信息,请参阅备份历史记录和标头信息 (SQL Server)。
介质集中备份介质的数量取决于下列几个因素:
- 备份设备的数量
- 备份设备的类型
- 备份集的数量
创建新的媒体集
若要创建新介质集,必须格式化备份介质(一个或多个磁带或磁盘文件)。 格式化进程会对备份介质进行以下更改:
删除旧标头(如果存在),从而有效地删除备份介质中以前的内容。
格式化磁带设备会删除当前装入的磁带中以前所有内容。 格式化磁盘只影响您为备份操作指定的文件。
向每个备份设备中的备份介质(磁带或磁盘文件)写入新的介质标头。
备份到现有媒体集
当您备份到现有媒体集时,您有以下两个选择:
追加到现有备份集。
为了尽可能利用可用空间,通常将新的备份集追加到现有介质集。 追加到备份时会保留所有以前的备份。 有关详细信息,请参阅本节后面的 “追加到现有备份集”。
可以使用
NOINIT
选项显式指定追加,这是BACKUP
的默认行为。使用当前备份覆盖所有现有备份集,保持当前介质标头位置不变。
SQL Server 备份提供防止意外覆盖媒体的安全措施。 但是,备份集到达预定义的到期日期时,备份会自动覆盖备份集。
对于磁带标头,适当地保留标头还是很有帮助的。 有关详细信息,请参阅本节后面的 “覆盖备份集”。
通过使用
INIT
选项来指定BACKUP
语句,以覆盖现有备份集。
追加到现有备份集
可以将来自相同或不同数据库的、在不同时间执行的备份存储在同一个介质上。 通过将其他备份集追加到现有介质上,介质上以前的内容保持不变,新的备份在介质上最后一个备份的结尾处写入。
默认情况下,SQL Server 始终在媒体上追加新的备份。 只能在介质的结尾处追加备份。 例如,如果媒体卷包含五个备份集,则不能跳过前三个备份集而用新的备份集覆盖第四个备份集。
如果您使用 BACKUP WITH NOREWIND
进行磁带备份,操作结束后磁带将保持打开状态。 这使您得以在磁带中追加其他备份,而不用倒带然后再次往前扫描以查找最后一个备份集。 可以在动态管理视图中找到打开的磁带驱动器 sys.dm_io_backup_tapes
的列表;有关详细信息,请参阅 sys.dm_io_backup_tapes。
Microsoft Windows 备份和 SQL Server 备份可以共享同一媒体,但它们之间不能相互操作。 SQL Server 备份无法备份 Windows 数据。
重要
压缩和未压缩的备份不能在一个媒体集中共存。 任何版本的 SQL Server 2008(10.0.x)和更高版本都可以读取压缩备份。 有关详细信息,请参阅备份压缩(SQL Server)。
覆写备份集
通过使用 BACKUP
选项来指定 INIT
语句,以覆盖现有的备份集。 此选项将覆盖媒体上的所有备份集并保留介质标头(如果有)。 如果没有介质标头,则创建一个标头。
对于磁带标头,适当地保留标头还是很有帮助的。 对于磁盘备份介质,只覆盖备份操作中指定的备份设备所使用的文件;磁盘上的其他文件不受影响。 覆盖备份时,保留现有的所有介质标头,同时将新的备份创建为备份设备中的第一个备份。 如果没有现有的媒体标头,则会自动编写具有关联媒体名称和媒体说明的有效媒体标头。 如果现有的介质标头无效,备份操作将终止。 如果媒体为空,并且存在MEDIANAME
、MEDIAPASSWORD
和MEDIADESCRIPTION
,则生成新的媒体标头。
如果满足下列任一条件,则不会覆盖备份媒体:
媒体上的现有备份尚未过期。 (如果
SKIP
已指定,则不检查到期时间。过期日期将指定备份过期的日期,并可以由另一个备份覆盖。 创建备份时可以指定过期日期。 默认情况下,到期日期由设置为
sp_configure
的media retention
选项确定,有关详细信息,请参阅 sp_configure。媒体名称(如果有)与备份媒体上的名称不匹配。
介质名称是一个描述性名称,用于方便地识别介质。
如果确定要覆盖现有媒体(例如,如果知道不再需要磁带上的备份),可以显式跳过这些检查。
如果备份媒体受 Microsoft Windows 密码保护,则 Microsoft SQL Server 不会写入媒体。 若要覆盖有密码保护的介质,必须重新初始化该介质。
序列号
对于介质集中的多个介质簇或介质簇中的多个备份介质,正确的顺序很重要。 因此,备份按以下方式分配序列号:
介质集中的有序介质簇
在介质集中,根据介质簇在介质集中的位置,按顺序给介质簇进行编号。 媒体系列编号记录在
family_sequence_number
表的backupmediafamily
列中。介质簇中的物理介质
介质序列号指示介质簇中的物理介质的顺序。 对于第一个备份介质,序列号是 1。 第一个备份介质的标记为 1,第二个介质(第一个延续磁带)的标记为 2,依此类推。 在还原备份集时,介质序列号可以确保负责还原备份的操作员按正确的顺序装入介质。
多个设备
当您使用多个磁带机或磁盘文件时,请注意以下事项:
备份时的注意事项:
由备份操作创建的整个介质集必须用于所有后续备份操作。 例如,如果介质集是使用两台磁带备份设备创建的,则涉及相同介质集的所有后续备份操作都必须使用两台备份设备。
还原时的注意事项:
对于从磁盘备份进行的任何还原以及任何联机还原,必须同时装载所有媒体系列。 对于从磁带备份进行的脱机还原,可以在数量少于介质簇的备份设备中处理介质簇。 必须在每一介质簇已完全处理之后才能开始处理另一个介质簇。 媒体系列始终并行处理,除非使用单个设备进行还原。
相关任务
创建新的媒体集
- 创建完整数据库备份 (备份到新介质集,并清除所有现有备份集 选项)
-
BACKUP (
FORMAT
选项) - FormatMedia
将新备份追加到现有介质
覆盖现有备份集
设置到期日期
查看媒体序列和家族序列号
- 查看逻辑备份设备的属性和内容 (SQL Server)
-
backupmediafamily (
family_sequence_number
列)