Sql-Server

在 Windows 11 上啟動 localDb 時出錯

  • February 19, 2022

我在全新的 NUC 上安裝了 Windows 11,然後安裝了所有更新。安裝Visual Studio 2022 CESSMS (v 18.10)

我嘗試啟動 localDB,假設它是作為 Visual Studio 2022/SSMS 的一部分安裝的,當進入 (localdb)\mssqllocaldbSSMS 時出現錯誤 

Cannot connect to (localdb)\mssqllocaldb.

SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. 

Error Number: -1983577846

然後我驗證/嘗試啟動實例如下

sqllocaldb stop mssqllocaldb
sqllocaldb delete mssqllocaldb
sqllocaldb start "MSSQLLocalDB"

輸入最後一個命令時,我收到錯誤 

由於以下錯誤,LocalDB 實例“MSSQLLocalDB”的啟動失敗:無法創建自動實例。有關錯誤詳細資訊,請參閱 Windows 應用程序事件日誌。

我查看了下找到的日誌文件

….\AppData\Local\Microsoft\Microsoft SQL Server 本地 DB\Instances\MSSQLLocalDB

並查看一些錯誤文件並按日期選擇最新的文件。

它包含資訊,最後一行是 

2021-12-11 10:48:42.67 spid10s     There have been 256 misaligned log IOs which required falling back to synchronous IO.  The current IO is on file C:\Users\....\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB\master.mdf.

該文件很短,但我在任何地方都看不到帶有錯誤的條目,並且大多數行都以“這是一條資訊性消息”結尾;無需使用者操作。

Windows 日誌狀態

Windows API 呼叫 WaitForMultipleObjects 返回錯誤程式碼:575。Windows 系統錯誤消息為:{Application Error} 應用程序無法正確啟動 (0x%lx)。點擊確定關閉應用程序。線上報告:3714。

打開服務,可以看到 SQL Services VSS Writer 處於執行狀態,沒有其他 SQL 服務。

有人有什麼建議讓我試試嗎?

Windows 11 和 Windows Server 2022 目前不報告某些 SSD 儲存設備的兼容 PhysicalBytesPerSectorForAtomicity 資訊。當報告的大小超過 4K 時,這會導致 SQL Server IO 出現問題。有關其他詳細資訊,請參閱與大於 4 KB 的系統磁碟扇區大小相關的故障排除錯誤

供您參考,以下是fsutil fsinfo sectorinfo c:工作(Samsung 980 PRO 2TB NVMe)和非工作(Samsung 980 1TB NVMe)系統的命令輸出範例:

工作驅動:

LogicalBytesPerSector :                                 512
PhysicalBytesPerSectorForAtomicity :                    4096
PhysicalBytesPerSectorForPerformance :                  4096
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096

問題驅動:

LogicalBytesPerSector :                                  512
PhysicalBytesPerSectorForAtomicity :                   16384
PhysicalBytesPerSectorForPerformance :                 16384
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096

有人有什麼建議讓我試試嗎?

我看到建議的解決方法包括:

  • 在報告正確扇區資訊(不超過 4K)的驅動器上安裝 SQL Server
  • 創建 VHD/VHDX 並在該驅動器上安裝 SQL Server
  • 使用跟踪標誌 1800 啟動 SQL Server

對於您現有的安裝,跟踪標誌的解決方法可能是最簡單的。但是,LocalDb 似乎沒有提供記錄在案的方法來指定跟踪標誌(可以將 SQL Server 配置管理器用於其他版本)。我在 SO 上找到了這個答案,它顯示了 LocalDb 啟動參數的系統資料庫位置,並針對 SQL 2019 LocalDb 和跟踪標誌 1800 對其進行了調整。

我在我的 PC 上測試了這些 Powershell 命令,它正確設置了 LocalDB 1800 跟踪標誌。

New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15E.LOCALDB\MSSQLServer\Parameters' -Force
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15E.LOCALDB\MSSQLServer\Parameters' -Name 'SQLArg0' -Value "-T1800" -PropertyType String -Force

之後您需要重新啟動 localDb:

sqllocaldb stop MSSQLLocalDB
sqllocaldb start MSSQLLocalDB

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