RESTORE HEADERONLY将sp1应用于SQL Server 2014后出现错误3013

时间:2015-09-17 13:09:17

标签: sql-server sql-server-2014

我最近将SP1应用到SQL Server 2014,完成并且没有问题。 几周之后,当我尝试使用我的一个存储过程从网络中的bak文件恢复其中一个数据库时,抛出了以下错误消息:

  

错误RESTORE HEADERONLY异常终止。错误3013。

在存储过程中,我有以下两行代码从bak文件中获取数据库名称。

SET @strCheck = N'RESTORE HEADERONLY FROM DISK ='''+@backupFile+'''';

INSERT INTO #headerOnly EXEC(@strCheck);

经过漫长的一天时间,我已经意识到SQL Server 2014 sp1已经为Restore HeaderOnly的输出添加了3个新列。代码中的临时表是在以前版本的SQL Server,SQL Server 2014上创建的,因此没有最后三列,插入失败,错误为3013.

SQL Server 2014 sp1中的新列如下:

KeyAlgorithm nvarchar(32); 
EncryptorThumbprint varbinary(20); 
EncryptorType nvarchar(32);

1 个答案:

答案 0 :(得分:1)

我们有一个Windows C / S应用程序,可以导出,导入和复制数据库。为了测试SQL Server 2014,我们从SQL Server 2008导入了一些数据库,并在2014年完成了一些(成功的)测试。
现在我们已经安装了SP1,然后还遇到了其他错误消息的问题(例如"无法打开备份设备")。 然后我又失去了一整天,直到我找到了这个信息,SP1添加了三个新列(不幸的是在我发现这个帖子之前)。

所以......我必须将SP中的三个新字段添加到restoreheader的定义中:

CREATE TABLE #restoreheader(
BackupName nvarchar(128)
, BackupDescription nvarchar(255)
, BackupType smallint
, ExpirationDate datetime
, Compressed tinyint
, Position smallint
, DeviceType tinyint
, 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)
, BackupStartDate datetime
, BackupFinishDate datetime
, SortOrder smallint
, [CodePage] smallint
, UnicodeLocaleId int
, UnicodeComparisonStyle int
, CompatibilityLevel tinyint
, SoftwareVendorId int
, SoftwareVersionMajor int
, SoftwareVersionMinor int
, SoftwareVersionBuild int
, MachineName nvarchar(128)
, Flags int
, BindingID uniqueidentifier
, RecoveryForkID uniqueidentifier
, Collation nvarchar(128)
, FamilyGUID uniqueidentifier
, HasBulkLoggedData bit
, IsSnapshot bit
, IsReadOnly bit
, IsSingleUser bit
, HasBackupChecksums bit
, IsDamaged bit
, BeginsLogChain bit
, HasIncompleteMetaData bit
, IsForceOffline bit
, IsCopyOnly bit
, FirstRecoveryForkID uniqueidentifier
, ForkPointLSN numeric(25,0) NULL
, RecoveryModel nvarchar(60)
, DifferentialBaseLSN numeric(25,0) NULL
, DifferentialBaseGUID uniqueidentifier
, BackupTypeDescription nvarchar(60)
, BackupSetGUID uniqueidentifier NULL
, CompressedBackupSize bigint NULL
, containment tinyint not NULL
, KeyAlgorithm nvarchar(32)
, EncryptorThumbprint varbinary(20)
, EncryptorType nvarchar(32)
)

注意:
请参阅定义中的最后四个字段 在SQL-Server 2012 中添加了字段包含tinyint not NULL ,因此..您还必须添加此字段(如果尚未添加)。
我只是在定义的末尾添加了新字段..现在一切都像之前一样(没有进一步的更改)。

所以..这是对SQL-Server 2014 SP1 重大变更,因为您在SP中使用了restoreheader定义。 我没有在官方MS发行说明中找到任何相关信息(必须更改)。 只有我找到的信息,见下文......

MS文本到" SQL Server 2014 Service Pack 1版本信息":

  

1957464 RESTORE HEADERONLY用于加密的备份文件   数据库不显示备份是否加密。后   你应用SP1,RESTORE HEADONLY的输出将包括三个   附加列:KeyAlgorithm,EncryptorThumbprint和   EncryptorType可以提供有关加密的其他详细信息   备份