Sql-Server

是否可以在沒有完全還原的情況下確定數據庫的預設排序規則和伺服器版本?

  • January 6, 2020

我為一家公司工作,該公司定期從客戶那裡接收大型 SQL 數據庫備份以用於支持目的。我們支持多個 SQL 版本和排序規則,但目前必須手動確認我們客戶端的 SQL 版本,然後才能恢復到正確的 SQL 實例。我想知道是否有辦法自動化這個過程。

我期待:

  1. 查找備份數據庫的 SQL Server 版本(我們得到 2008 R2 以及 2014 和 2017)
  2. 查找數據庫的預設排序規則

無需完全還原到可能不正確的 SQL 實例,由於它們的大小,這需要大量時間。(也許是零碎的恢復?)

您可以通過使用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'

這將返回一個結果集。如果您從應用程式碼中執行此操作,那麼獲取這些特定欄位應該相當容易。如果您從 T-SQL 執行此操作,並且需要以程式方式對其執行操作,那麼您將需要:

  1. 從該命令創建一個包含所有可能結果集欄位的本地臨時表
  2. 在構造

中執行RESTORE HEADERONLY命令:INSERT INTO ... EXEC(...)

INSERT INTO #TempBackupInfo
 EXEC(N'RESTORE HEADERONLY FROM DISK =
 N''C:\Program Files\Microsoft SQL Server\MSSQL15.SQL2019\MSSQL\Backup\master.bak'';');
  1. 從該本地臨時表中選擇有問題的欄位

引用自:https://dba.stackexchange.com/questions/256623