🐈

Windows11 にて SQLServer localdbインスタンス起動できない事象と解決法

2024/04/04に公開

Windows11 で SQL Server localdb のインスタンスが起動できないトラブルに遭遇し、解決策(暫定)が見つかりましたので、ここに記すのみ。

事象

Windows11 を一からクリーンインストールし、SQL Server localdb 2019 も導入し、いざ接続しようとしたら接続できなかった。コマンドで調べてみると、 localdb のインスタンスが起動してない。インスタンス起動のコマンドを発行してもエラーとなる。

SqllocalDB info
<# 結果
Name:               MSSQLLocalDB
Version:            15.0.4153.1
Shared name:
Owner:
Auto-create:        Yes
State:              Stopped
#>
sqllocaldb start MSSQLLocalDB
<# 結果
Start of LocalDB instance "MSSQLLocalDB" failed because of the following error:
LocalDB インスタンスを開始する際にエラーが発生しました: SQL Server プロセスを開始できませんでした。
#>

SqllocalDB delete MSSQLLocalDB
<# 結果
LocalDB instance "MSSQLLocalDB" deleted.
#>

SqllocalDB create MSSQLLocalDB
<# 結果
Creation of LocalDB instance "MSSQLLocalDB" failed because of the following error:
LocalDB インスタンスを開始する際にエラーが発生しました: SQL Server プロセスを開始できませんでした。
#>

原因

ネットで調べてみると、どうやら SQL Server は現在 512 バイトと 4 KB のセクターをサポートしているが、 Windows11 で 一部新しいストレージ デバイスとデバイスドライバーが 4KB セクターサイズより大きいため、SQL Server を開始できないようです。

確かに私は最近ハードディスクを SATA SSD から M.2 SSD に交換しました。。。

こりゃ役満ですね (;´∀`)

fsutil fsinfo sectorinfo c:
<# 結果
LogicalBytesPerSector :                                 512
PhysicalBytesPerSectorForAtomicity :                    32768
PhysicalBytesPerSectorForPerformance :                  32768
FileSystemEffectivePhysicalBytesPerSectorForAtomicity : 4096
Device Alignment :                                      Aligned (0x000)
Partition alignment on device :                         Aligned (0x000)
#>

解決策

Microsoft ではこの問題を解決するためにまだ調査中ですが、暫定の回避方法は以下4つあります。

  1. サポートされるドライブ(4KB以下)に SQL Server に移す
  2. 代わりに Windows10 をインストールする
  3. レジストリ キーを追加して Windows10 のようにセクターサイズを 4 KB に似せる
  4. トレース フラグ 1800 を追加して SQL Server セクターサイズを 4 KB に似せる

1 と 2 の解決方法は論外なので、一番簡単な 4 の方法にしました。

管理者権限で以下の Powershell コマンドを実行する

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

sqllocaldb stop MSSQLLocalDB
sqllocaldb start MSSQLLocalDB
<# 結果
LocalDB instance "MSSQLLocalDB" started.
#>

最後に

気分を一新のため、PC の OS を Windows10 から Windows11 にしました。こういう OS 更新は大抵トラブルが付き物なので、OS のアップグレードをせずにクリーンインストールの手法を取りました。これで万事解決かと思いきや、それでもトラブルに巻き込まれました。

Written-By-Human-Not-By-AI-Badge-white

Discussion