Windows Server 2022 + SQL Server 2022 RC1 + SSMS 19.0 Preview 3 の環境で、ローカルの SQL Server に対して ostress.exe を実行した場合に、次のエラーが発生し、負荷をかけることができませんでした。
10/27/22 09:20:01.124 [0x00000D2C] SQLState: 08001, Native Error: 18 [DBNETLIB]SSL セキュリティ エラー 10/27/22 09:20:01.125 [0x00000D2C] SQLState: 01S00, Native Error: 0 接続文字列の属性が正しくありません。
今まで見たことがないエラーだったので、なぜ発生しているのかを調べてみました。
ostress ですが「ODBC-Based Stress/Replay Utility」となっており、厳密には SQL Server 専用というわけではなく、ODBC を使用してアクセスが行われているため、ODBC ドライバーが提供されていれば、他の環境に対しても負荷をかけようと思えばかけることはできます。(基本的には SQL Server への実行を想定していると思うのでそれ以外に対して想定している負荷がかけられるかは別の話ですが)
上記の Windows Server 2022 + SQL Server 2022 RC1 + SSMS 19.0 Preview 3 の環境でも、SQL Server 向けの ODBC ドライバーはインストールされるのですが「ODBC Driver 17 for SQL Server」がインストールされた状態となっています。
ostress のプロセスの動きを見ていたところ、サーバー名を指定したストレステストの実行では、使用する ODBC ドライバーは次の場所の情報を使用しているようでした。
- HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
- ODBC Driver 11 for SQL Server
- SQL Server Native Client 11.0
- SQL Server Native Client 10.0
- SQL Server
今回使用している環境では、ODBC Driver 11 for SQL Server / SQL Server Native Client 11.0, 10.0 はインストールされていないのですが、「SQL Server」はインストールされている状態となっています。
ODBC ドライバーとしてこれが使われている場合は上記のエラーにつながるようですね。(SQL Server の ODBC ドライバー、バージョンとしては「10.00.20348.1006」なので、結構古いものが使われているかもしれませんね)
今回は、次のドライバーをインストールすることで、正常に動作するようになりました。
Windows Server 2022 + SQL Server 2019 + SSMS 18.0 の環境では、追加のドライバーをインストールしなくても動作するのですが、この組み合わせの場合は「SQL Server Native Client 11.0」がインストールされていることで、エラーとならないようでした。
SQL Server Native Client (SQLNCLI) の利用は、現在は非推奨となっているので最新の組み合わせではインストールされなくなっているのかもしれませんね。