有没有办法确定用于创建 MDF 或 BAK 文件的 SQL Server 版本?

有没有办法确定用于创建 MDF 或 BAK 文件的 SQL Server 版本?

我有一个 SQL Server DB 的本地副本,存储为 MDF 文件。有没有办法知道创建该文件的 SQL Server 版本是什么?

答案1

您可以通过查看偏移量 0x12064 处的两个字节来确定数据库主 MDF 文件的版本。请参阅如何确定 MDF 文件的数据库版本

.bak文件中,低字节是 0xEAC,高字节是 0xEAD。

您可以找到 MS SQL 的大多数内部数据库版本号这里

答案2

使用 RESTORE HEADERONLY,例如

RESTORE HEADERONLY FROM DISK = 'D:\whatever.bak'

您将获得很多列,但感兴趣的是 SoftwareVersionMajor、SoftwareVersionMinor 和 SoftwareVersionBuild,它们应该会为您提供 SQL Server 的版本号。例如,在我们的系统上,这些是 10、0 和 4000,意思是 10.0.4000 (2008 SP2)。

但是,不确定如果您尝试使用太旧的备份来执行此操作而无法在服务器正在运行的版本上恢复,会发生什么 - 您可能只会收到错误而没有任何信息(尽管这本身至少会提供一些关于它来自哪个版本的线索)。

答案3

对于 MDF 文件,请尝试以下命令:

dbcc checkprimaryfile ('c:\MyApp\AppData\foo.mdf', 2)

它将输出 3 个属性,其值为:Database nameDatabase versionCollation

语法如下(该命令未记录,因此更多信息这里):

DBCC CHECKPRIMARYFILE ({'文件名'} [, opt = {0|1|2|3}])

FileName 只不过是 SQL Server 数据库主数据文件 .mdf 文件的实际路径。

Opt = 0 - 验证该文件是否是 SQL Server 数据库主数据文件 (.mdf)。

Opt = 1 - 返回与数据库相关的所有文件的数据库名称、大小、最大大小、增长、状态和路径。

Opt = 2-返回数据库名称、版本和排序规则信息。

Opt = 3 - 返回与数据库相关的所有文件的名称、状态和路径。

答案4

您可以使用数据库启动页中的信息找到此信息。我曾在http://sankarreddy.com/2010/05/database-internal-version-create-version-and-current-version/

相关内容