是否可以在没有完整还原的情况下确定数据库的默认排序规则和服务器版本?

Aus*_*tin 8 sql-server backup collation instance restore

我在一家公司工作,该公司定期从客户那里接收大型 SQL 数据库备份以用于支持目的。我们支持多个 SQL 版本和排序规则,但目前必须手动确认我们客户端的 SQL 版本,然后才能恢复到正确的 SQL 实例。我想知道是否有办法自动化这个过程。

我期待:

  1. 查找备份数据库的 SQL Server 版本(我们得到 2008 R2 以及 2014 和 2017)
  2. 查找数据库的默认排序规则

无需完全恢复到可能不正确的 SQL 实例,由于其大小,这需要大量时间。(也许是零碎的恢复?)

Sol*_*zky 18

您可以通过使用RESTORE HEADERONLY命令检查备份文件来获取一些信息。链接的文档解释了所有结果集字段的含义和含义,但您要查找的字段应该是:

  • [SoftwareVersionMajor]
    • 8 = SQL Server 2000
    • 9 = SQL Server 2005
    • 10 = SQL Server 2008 或 2008 R2(参见[SoftwareVersionMinor]区别)
    • 11 = SQL Server 2012
    • 12 = SQL Server 2014
    • 13 = SQL Server 2016
    • 14 = SQL Server 2017
    • 15 = SQL Server 2019
  • 如果您可能正在获取 SQL Server 2008 R2 备份,那么您还需要,[SoftwareVersionMinor]因为该版本的该值应为“50”,否则为所有其他版本的“00”(到目前为止)
  • [Collation]

例如:

RESTORE HEADERONLY FROM DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\Backup\master.bak'
Run Code Online (Sandbox Code Playgroud)

这将返回一个结果集。如果您从应用程序代码中执行此操作,那么获取这些特定字段应该相当容易。如果您从 T-SQL 执行此操作,并且需要以编程方式对其进行操作,则您需要:

  1. 创建一个本地临时表,其中包含来自该命令的所有可能的结果集字段
  2. RESTORE HEADERONLYINSERT INTO ... EXEC(...)构造中执行命令:
    INSERT INTO #TempBackupInfo
      EXEC(N'RESTORE HEADERONLY FROM DISK =
      N''C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\Backup\master.bak'';');
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从该本地临时表中选择有问题的字段