根据 MDF 文件查询数据库版本

在 SQL Server 中,MDF(主数据库文件)包含了数据库的版本信息。如果需要查询 MDF 文件对应的 SQL Server 版本,可以使用 PowerShell 读取文件中的特定字节数据。

1. 使用 PowerShell 查询 MDF 版本

PS > get-content -Encoding Byte "C:\path\to\database.mdf" | select-object -skip 0x12064 -first 2
PS > [int]($_[0] + $_[1] * 256)

注意,复制命令不要复制前面的PS >

2. 解析数据库版本

上述 PowerShell 命令的逻辑如下:

  1. get-content -Encoding Byte "C:\path\to\database.mdf" 以字节形式读取 MDF 文件。
  2. select-object -skip 0x12064 -first 2 跳过前 0x12064 个字节,并获取接下来的 2 个字节(这两个字节存储了 SQL Server 版本信息)。
  3. $_[0] + $_[1] * 256 计算版本号。

例如,我们执行下面的命令:

get-content -Encoding Byte "d:/B2B.mdf" | select-object -skip 0x12064 -first 2

命令返回:

149
2

那么,我们用149+2*256来计算版本号,得到结果是661,然后到下表里面去查找即可。

如果不想手动计算,也可以使用下面的三行命令,让程序自动计算版本号:

PS > $bytes = Get-Content -Encoding Byte "d:/B2B.mdf" | Select-Object -Skip 0x12064 -First 2
PS > $version = $bytes[0] + ($bytes[1] * 256)
PS > $version

3. 版本号对照表

计算出的整数版本号可以对照以下 SQL Server 版本表:

版本号SQL Server 版本
515SQL Server 7.0
539SQL Server 2000
611SQL Server 2005
655SQL Server 2008
661SQL Server 2008 R2
706SQL Server 2012
782SQL Server 2014
852SQL Server 2016
869SQL Server 2017
904SQL Server 2019
921SQL Server 2022

4. 结论

通过 PowerShell 读取 MDF 文件的特定字节,我们可以快速确定数据库版本,无需启动 SQL Server 实例。此方法适用于数据库管理员或运维人员排查数据库兼容性问题。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注