web-dev-qa-db-ja.com

SQL Serverのバージョンと更新レベルを適切に決定する

WMIクエリを使用して、特定のインスタンス名用にインストールされているSQL Serverの現在のバージョンを読み取ろうとする既存のコードがいくつかあります。 VERSIONの最初の点線部分(アップグレードインストールをトリガーするため)およびSPLEVEL(パッチインストールをトリガーするため)をチェックします。これは今までうまくいきました。 (バージョンをプログラムで取得し、インスタンスへのSQL接続を実際に開かなくてもよいようにする必要があります。)

ただし、2017および2019ではサービスパックが廃止され、SPLEVELは役に立たなくなったため、古いCUのみが存在する場合を判断するための代替策を探しています。

バージョン番号の表 によると、CU4を適用した最新の2019インストールで、バージョン15.0.4033.1とファイルバージョン2019.150.4033.1が表示されます(実際のページにはタイプミスがあります)後者)。

ただし、一致するFILEVERSIONが表示されている間、VERSIONに表示されるのはRTM値15.0.2000.5です。これは、SQL Server構成マネージャーで詳細プロパティを確認しても確認されます。 。(そしてFWIW私はSPLEVELがまだ0であることも確認しました。)

奇妙なことに、Management Studioを使用して接続すると、バージョンが15.0.4033.1と表示されます。

それが必要な場合はFILEVERSIONの比較に切り替えてもかまいませんが、心配なのは「GDRビルド」です。 2017年の同等のテーブル を見ると、特定の韻や理由は見られず、最新のGDRビルドは古いCUビルドよりも低いバージョン番号を持つことができます。

どうすればこれを理解できますか? GDRビルドとは何ですか?とにかくどこから来たのですか?既にいくつかのCUが適用されているインストールを「アップグレード」しないと想定しても安全ですか?

1
Miral

この興味深い問題の部分的な解決策として、私はpowershellを検討します。

まず、必要なすべてのサーバーに SQL Server PowerShellモジュールをインストール する必要があります。

Get-SqlAgent -ServerInstance "MY_SERVER"

enter image description here

上の画像では、探しているServerVersionを確認できます。

1

[GDRビルド番号に関する私の懸念には対応していないため、これは部分的な回答にすぎません。]

私は、WMIを使用する代わりにレジストリを読み取ることにより、既存のSQL Serverインスタンスとバージョンを読み取るために別のアプローチを取ることを決定しました。プロセスは次のとおりです。

  1. インスタンス名と関連するレジストリキー名のリストをHKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQLから読み取ります。
  2. 関心のあるそれぞれについて、HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\キー名\Setupからバージョン情報を読み取ります。特に:
    • PatchLevelには、CUを含む完全なバージョン番号があります。 15.0.4033.1
    • Versionには、CUを除く完全なバージョン番号があります。 15.0.2000.5
    • SPにはサービスパック番号があります(これはおそらく、今後は常に0になるでしょう)。
    • 奇妙なことに、製品名として「SQL Server 2019」、または単に「2019」と読むことができる場所はどこにもないようです。

これらを区別する必要があるケースの1つは、インストーラーラッパーです。 /ACTION=Install/ACTION=Upgrade、または/ACTION=Patchを渡すかどうかを事前に把握する必要があります(後者の場合は、ホットフィックスインストーラーに直接渡す必要があります。これは機能しません。混乱を招くエラーメッセージの内容に関係なく、完全なインストーラー)。

デフォルトのインストーラーがこれを理解できればいいのですが、そうではありません。間違ったものを渡すと、非常に奇妙なエラーが発生します。

0
Miral