RESTORE 语句 - HEADERONLY (Transact-SQL)
返回包含 SQL Server 中特定备份设备上所有备份集的所有备份标头信息的结果集。
注意
有关参数的说明,请参阅 RESTORE 参数 (Transact-SQL)。
语法
RESTORE HEADERONLY
FROM <backup_device>
[ WITH
{
-- Backup set options
FILE = { backup_set_file_number | @backup_set_file_number }
| PASSWORD = { password | @password_variable }
| [ METADATA_ONLY | SNAPSHOT ] [ DBNAME = { database_name | @database_name_variable } ]
-- Media set options
| MEDIANAME = { media_name | @media_name_variable }
| MEDIAPASSWORD = { mediapassword | @mediapassword_variable }
-- Error management options
| { CHECKSUM | NO_CHECKSUM }
| { STOP_ON_ERROR | CONTINUE_AFTER_ERROR }
-- Tape options
| { REWIND | NOREWIND }
| { UNLOAD | NOUNLOAD }
} [ , ...n ]
]
[ ; ]
<backup_device> ::=
{
{ logical_backup_device_name |
@logical_backup_device_name_var }
| { DISK | TAPE | URL } = { 'physical_backup_device_name' |
@physical_backup_device_name_var }
}
注意
URL
是用于为 Azure Blob 存储指定位置和文件名的格式,从 SQL Server 2012 (11.x) SP 1 CU 2 开始受支持。 虽然 Azure 存储是一种服务,不过实现与磁盘和磁带类似,从而可为所有三种设备提供一致且无缝的还原体验。
参数
有关 RESTORE HEADERONLY
参数的说明,请参阅 RESTORE 参数 (Transact-SQL)。
结果集
对于给定设备上的每个备份,服务器均发送一行包含以下各列的标头信息:
列名称 | 数据类型 | SQL Server 备份集说明 |
---|---|---|
BackupName 1 |
nvarchar(128) | 备份集名称。 |
BackupDescription |
nvarchar(255) | 备份集说明。 可以为 NULL。 |
BackupType |
smallint | 备份类型: 1 = 数据库 2 = 事务日志 4 = 文件 5 = 差异数据库 6 = 差异文件 7 = 部分 8 = 差异部分 |
ExpirationDate |
datetime | 备份集的过期时间。 |
Compressed |
bit | 是否使用基于软件的压缩对备份集进行压缩: 0 = 否 1 = 是 |
Position |
smallint | 备份集在卷中的位置(用于 FILE = 选项)。 |
DeviceType |
tinyint | 与用于备份操作的设备对应的编号: 磁盘: - 2 = 逻辑 - 102 = 物理 磁带: - 5 = 逻辑 - 105 = 物理 虚拟设备: - 7 = 逻辑 - 107 = 物理 URL: - 9 = 逻辑 - 109 = 物理 逻辑设备名称和设备号位于 sys.backup_devices 中。 有关详细信息,请参阅 sys.backup_devices。 |
UserName |
nvarchar(128) | 执行备份操作的用户名。 |
ServerName |
nvarchar(128) | 写入备份集的服务器名称。 |
DatabaseName |
nvarchar(128) | 已备份的数据库名称。 |
DatabaseVersion |
int | 从其中创建备份的数据库的版本。 |
DatabaseCreationDate |
datetime | 数据库的创建日期和时间。 |
BackupSize |
numeric(20,0) | 备份大小(以字节为单位)。 |
FirstLSN |
numeric(25,0) | 备份集中第一个日志记录的日志序列号。 |
LastLSN |
numeric(25,0) | 备份集之后的下一条日志记录的日志序列号。 |
CheckpointLSN |
numeric(25,0) | 创建备份时最后一个检查点的日志序号。 |
DatabaseBackupLSN |
numeric(25,0) | 最近的数据库完整备份的日志序列号。DatabaseBackupLSN 是“检查点的起点”,在备份开始时触发。 如果在数据库空闲且未配置复制时进行备份,此 LSN 将与 FirstLSN 一致。 |
BackupStartDate |
datetime | 备份操作的开始日期和时间。 |
BackupFinishDate |
datetime | 备份操作的完成日期和时间。 |
SortOrder |
smallint | 服务器排列次序。 该列仅对数据库备份有效。 提供该列是为了向后兼容。 |
CodePage |
smallint | 服务器使用的服务器代码页或字符集。 |
UnicodeLocaleId |
int | 用于 Unicode 字符数据排序的服务器 Unicode 区域设置 ID 配置选项。 提供该列是为了向后兼容。 |
UnicodeComparisonStyle |
int | 服务器 Unicode 比较风格配置选项,可提供对 Unicode 数据排序的额外控制。 提供该列是为了向后兼容。 |
CompatibilityLevel |
tinyint | 从其中创建备份的数据库兼容级别设置。 |
SoftwareVendorId |
int | 软件供应商标识号。 对于 SQL Server,该号码为 4608 (用十六进制表示为 0x1200 )。 |
SoftwareVersionMajor |
int | 创建备份集的服务器主要版本号。 |
SoftwareVersionMinor |
int | 创建备份集的服务器次要版本号。 |
SoftwareVersionBuild |
int | 创建备份集的服务器内部版本号。 |
MachineName |
nvarchar(128) | 执行备份操作的计算机名称。 |
Flags |
int | 单个标志位的含义: - 1 = 日志备份包含大容量日志操作。 - 2 = 快照备份。 - 4 = 备份时数据库为只读。 - 8 = 备份时数据库处于单用户模式。 - 16 = 备份包含备份校验和。 - 32 = 备份时数据库损坏,但要求备份操作忽略错误继续执行。 - 64 = 结尾日志备份。 - 128 = 包含不完整元数据的结尾日志备份。 - 256 = 包含 NORECOVERY 的结尾日志备份。 重要提示:建议使用单个布尔值列(下面列出了以 HasBulkLoggedData 开始且以 IsCopyOnly 结束的列)而非 Flags 。 |
BindingID |
uniqueidentifier | 数据库的绑定 ID。 此值对应于 sys.database_recovery_status 中的 database_guid 。 恢复数据库时,会分配一个新值。 另请参阅:FamilyGUID 。 |
RecoveryForkID |
uniqueidentifier | 结尾恢复分支的 ID。 此列与 backupset 表中的 last_recovery_fork_guid 相对应。对于数据备份, RecoveryForkID 等于 FirstRecoveryForkID 。 |
Collation |
nvarchar(128) | 数据库使用的排序规则。 |
FamilyGUID |
uniqueidentifier | 创建时的原始数据库 ID。 恢复数据库时,此值保持不变。 |
HasBulkLoggedData |
bit | 1 = 包含大容量日志记录操作的日志备份。 |
IsSnapshot |
bit | 1 = 快照备份。 |
IsReadOnly |
bit | 1 = 备份时数据库为只读。 |
IsSingleUser |
bit | 1 = 备份时数据库处于单用户模式。 |
HasBackupChecksums |
bit | 1 = 备份包含备份校验和。 |
IsDamaged |
bit | 1 = 备份时数据库损坏,但要求备份操作继续执行,不考虑发生的错误。 |
BeginsLogChain |
bit | 1 = 这是一个连续的日志备份链中的第一个环节。 日志链的开始处是创建数据库后所做的第一个日志备份,或者是数据库从简单模式切换到完整模式或大容量日志恢复模式时所做的第一个日志备份。 |
HasIncompleteMetaData |
bit | 1 = 带不完整元数据的结尾日志备份。 有关包含不完整元数据的结尾日志备份的信息,请参阅结尾日志备份 (SQL Server)。 |
IsForceOffline |
bit | 1 = 采用 NORECOVERY 的备份;数据库采用脱机备份。 |
IsCopyOnly |
bit | 1 = 仅复制备份。 仅复制备份不会影响数据库的总体备份和恢复进程。 有关详情,请参阅仅复制备份 (SQL Server)。 |
FirstRecoveryForkID |
uniqueidentifier | 起始恢复分支的 ID。 此列与 backupset 表中的 first_recovery_fork_guid 相对应。对于数据备份, FirstRecoveryForkID 等于 RecoveryForkID 。 |
ForkPointLSN |
numeric(25,0) | 如果 FirstRecoveryForkID 不等于 RecoveryForkID ,则此值为分支点的日志序列号。 否则,此值为 NULL。 |
RecoveryModel |
nvarchar(60) | 数据库的恢复模式,可以是下列值之一: - FULL - BULK-LOGGED - SIMPLE |
DifferentialBaseLSN |
numeric(25,0) | 对于单基准的差异备份,该值等于差异基准的 FirstLSN 。 差异备份中将包括大于或等于 DifferentialBaseLSN 的 LSN 的更改。对于多基准的差异备份,该值为 NULL,基准 LSN 必须在文件级别确定。 有关详细信息,请参阅 RESTORE FILELISTONLY。 对于非差异备份类型,该值始终为 NULL。 有关详细信息,请参阅差异备份 (SQL Server)。 |
DifferentialBaseGUID |
uniqueidentifier | 对于单基准的差异备份,该值为差异基准的唯一标识符。 对于多基准差异,此值为 NULL,且必须确定每个文件的差异基准。 对于非差异备份类型,此值为 NULL。 |
BackupTypeDescription |
nvarchar(60) | 字符串形式的备份类型有以下几种: - DATABASE - TRANSACTION LOG - FILE OR FILEGROUP - DATABASE DIFFERENTIAL - FILE DIFFERENTIAL PARTIAL - PARTIAL DIFFERENTIAL |
BackupSetGUID |
uniqueidentifier | 备份集的唯一标识号,可以根据此标识号在介质上标识备份集。 可以为 NULL。 |
CompressedBackupSize |
bigint | 备份集的字节计数。 对于未压缩的备份,该值与 BackupSize 相同。要计算压缩比,请使用 CompressedBackupSize 和 BackupSize 。在 msdb 升级期间,将此值设置为与 BackupSize 列的值相匹配。 |
containment |
tinyint | 适用于:SQL Server 2012 (11.x) 及更高版本。 指示数据库的包含状态。 0 = 数据库包含状态为 OFF 1 = 数据库处于部分包含状态 |
KeyAlgorithm |
nvarchar(32) | 适用于:SQL Server 2014 (12.x) CU 1 及更高版本。 用于加密备份的加密算法。 NO_Encryption 指示备份未加密。 当无法确定正确的值时,此值应为 NULL。 |
EncryptorThumbprint |
varbinary(20) | 适用于:SQL Server 2014 (12.x) CU 1 及更高版本。 可用于在数据库中查找证书或非对称密钥的加密程序的指纹。 当备份未加密时,此值为 NULL。 |
EncryptorType |
nvarchar(32) | 适用于:SQL Server 2014 (12.x) CU 1 及更高版本。 使用的加密程序的类型:证书或非对称密钥。 当备份未加密时,此值为 NULL。 |
LastValidRestoreTime |
datetime | 适用于:SQL Server 2022 (16.x) 及更高版本。 上次有效的还原时间。 |
TimeZone |
nvarchar(32) | 适用于:SQL Server 2022 (16.x) 及更高版本。 从中执行备份的服务器所在的时区。 |
CompressionAlgorithm |
nvarchar(32) | 适用于:SQL Server 2022 (16.x) 及更高版本。 标识用于压缩备份文件的压缩算法。 默认值为 MS_XPRESS。 有关详细信息,请参阅 BACKUP。 |
1 如果为备份集指定了密码,则 RESTORE HEADERONLY
只显示其密码与命令中指定的 PASSWORD
选项相匹配的备份集的完整信息。 RESTORE HEADERONLY
还显示没有密码保护的备份集的完整信息。 将介质上其他受密码保护的备份集的 BackupName
列设置为 'Password Protected'
,剩下的所有列为 NULL。
注解
客户端可以使用 RESTORE HEADERONLY
检索特殊备份设备上的所有备份的所有备份标头信息。 对于备份设备上的每个备份,服务器都会将标头信息作为一行发送。
RESTORE HEADERONLY
会查看介质上的所有备份集。 因此,使用高容量磁带机时,生成此结果集可能需要一些时间。 若要快速查看介质而不获取有关每个备份集的信息,请使用 RESTORE LABELONLY
或指定 FILE = <backup_set_file_number>
。
由于 Microsoft 磁带格式的固有特点,来自其他软件程序的备份集可以与 SQL Server 备份集在同一介质上占有空间。 在由 RESTORE HEADERONLY
返回的结果集中,每一个来自其他软件程序的备份集都占用一行。
安全性
在备份时,可以根据需要为介质集、备份集或这两者指定密码。 如果已经在介质集或备份集上定义了密码,则必须在 RESTORE 语句中指定正确的密码。 这些密码可防止未经授权而使用 SQL Server 工具执行还原操作以及向介质追加备份集。 但是,密码不会阻止使用 BACKUP 语句的 FORMAT 选项覆盖介质。
重要
此密码提供的安全性较低。 它旨在防止经过授权的用户或未经授权的用户使用 SQL Server 工具执行不正确的还原操作。 但是不能防止通过其他方式或通过替换密码来读取备份数据。 在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。保护备份的最佳做法是将备份磁带存储在安全的位置,或者备份到由适当的访问控制列表 (ACL) 保护的磁盘文件。 ACL 应设置在创建备份的根目录下。
权限
获取有关备份集或备份设备的信息需要具有 CREATE DATABASE 权限。 有关详细信息,请参阅 GRANT 数据库权限 (Transact-SQL)。
示例
以下示例返回磁盘文件 C:\AdventureWorks-FullBackup.bak
标头中的信息。
RESTORE HEADERONLY
FROM DISK = N'C:\AdventureWorks-FullBackup.bak';
GO