SQL Server:構成ファイルを使用したインストールとデモスクリプト(Azure, Powershell)(2)

Microsoft

2023.03.16

前回はMicrosoft SQL ServerをCUIでインストールする方法について、特に構成ファイル作成手順を中心にご説明しました。「1. 構成ファイル作成手順」はこちらをご覧ください。今回は構成ファイルの編集とコマンドの準備以降についてご説明します。

2. 構成ファイルの編集とコマンドの準備

構成ファイル作成手順

出来上がった構成ファイルはテキストファイル(ini ファイル)です。メモ帳などで開いて編集します。またパラメータは基本的に構成ファイルとコマンドラインの両方で指定ができます。一部注意が必要なパラメータは後述します。

コマンドパラメータで指定した方が優先される傾向があるので、構成ファイルにはよく使う共通のパラメータを入れておき、カスタマイズしたいところや平文だとセキュリティ上好ましくないもののみコマンドラインパラメータにするといったことができます。

構成ファイルのエンコードについての公式の資料は見当たりませんが、実際に作られた構成ファイルはBOMつきのUTF-16でした。

パラメータの確認法

Setup.exe /help
のように実行することで確認できます。

コマンドラインパラメータ
コマンドラインパラメータ

以下のページにもパラメータの一覧があります。ユースケース別に必須かどうかといった記述もあるので参考にしてください。

コマンド プロンプトからの SQL Server のインストール
https://docs.microsoft.com/ja-jp/sql/database-engine/install-windows/install-sql-server-from-the-command-prompt?view=sql-server-ver16

注意が必要なパラメータ

コマンドラインインストール時に注意が必要なパラメータがいくつかあります。以下にそのまま構成ファイルを入力にした際に引っかかりそうなパラメータをいくつか紹介します。

設定 概要
/CONFIGURATIONFILE 構成ファイルを指定する。これはコマンドラインに指定が必要。
QUIET 完全サイレントモードでのインストールを行う。QuietSimpleと排他で、どちらか一方が必要。
QUIETSIMPLE 進捗のみ表示する。Quietと排他でどちらか必要。
ACTION="Install" も同時に指定したときのみ有効。
ACTION Install を指定すること。
IACCEPTSQLSERVERLICENSETERMS ライセンス条項に同意する。指定しないと失敗する。
UIMODE ユーザー インターフェイスの動作を制御するパラメーター。
ウィザードで作成した場合これが構成ファイルに残っているので、QUIET/QUIETSIMPLE指定する場合は削除またはコメントアウトすること
PID プロダクトキー。
指定されていない場合はEvaluation/Expressが使用される。
(~ACCOUNTなどアカウント系) インストール先で使用できるアカウントが指定されていること。
ローカルアカウントであれば、生成した構成ファイルの「コンピュータ名\」の部分を削除しておくと汎用化できる。

QUIETとQUIETSIMPLEはコマンドラインでは /Q と /QS になります。
両方指定するとエラーになるのですが、例えば構成ファイルでQUIET、コマンドラインで/QSと指定した場合もエラーになってしまいます。
セットアップに使用する実行ファイルによっては構成ファイルの QUIET/QUIETSIMPLE が無視されることもあるので、いっそコメントアウトしてコマンドラインで明示するといったことも検討します。

また構成ファイルのコメントに使用する "; " は、行頭以外では使用しないのが無難です。
例えば「ACTION="INSTALL" ; コメント」のように末尾に置いた場合、行全体が無視されるようです。

アカウント関連のパラメータ

構成ファイルを作成する端末にないアカウントを指定したり、既定のシステムアカウント以外を指定する場合はこれらの設定が必要です。

機能がそもそもない、または使用しない場合は指定不要です。以下によく使うパラメータを紹介します。

サービスアカウント
パラメータ 概要
SQLSVCACCOUNT SQL Server サービスのアカウント。GUIでは「SQL Server データベース エンジン」に相当。
ドメイン\ユーザーまたはシステム アカウント。
例:
NT Service\MSSQLSERVER
MyDomain\MyAccount
SQLSVCPASSWORD SQL Server サービスのアカウントのパスワード。システムアカウント以外を指定したなら必要。
AGTSVCACCOUNT SQL Server エージェント サービスのアカウント。
AGTSVCPASSWORD SQL Server エージェント サービスのアカウントのパスワード。
ASSVCACCOUNT Analysis Services サービスが使用するアカウント。
ASSVCPASSWORD Analysis Services サービスが使用するアカウントのパスワード。
ISSVCACCOUNT Integration Servicesサービスが使用するアカウント。
ISSVCPASSWORD Integration Servicesサービスが使用するアカウントのパスワード。
認証モード
パラメータ 概要
SECURITYMODE Windows認証または混合認証を選択します。省略した場合の既定値は "Windows" 。混合認証なら "SQL"を指定します。
SAPWD 混合認証を指定した場合に使用する、SAアカウントのパスワード。Windows認証なら指定不要。
SQLSYSADMINACCOUNTS SQL Server のシステム管理者として準備する Windows アカウント。ユーザー名や、ドメイン名\ユーザー名。
パスワード不要。

更新プログラム関連

インストール時に任意のSPやCUを当てることができます。
UpdatePathには、ダウンロードした SQLServer2019-KB….exe のあるフォルダを指定します。

Microsoft SQL Server の最新の更新プログラム
https://docs.microsoft.com/ja-jp/sql/database-engine/install-windows/latest-updates-for-microsoft-sql-server?view=sql-server-ver16

パラメータ 概要
UpdateEnabled 更新するなら指定する。
UpdateSource

SQL Server セットアップが更新プログラムを取得する場所を指定する。
"MU"
→Microsoft Update/ Window Server Update Servicesを検索。既定。

更新プログラムを入れたフォルダ パス
→ 絶対パス、相対パス、UNC共有パスタ使用可能。

UpdateEnabledと合わせて使う。

インストールで実際に使用された構成について

構成ファイルのパラメータは、インストール時に指定したコマンドラインやほかの優先されるパラメータによって上書きされることがあります。

実際にどのようなパラメータが使用されたのかは、インストール後のログのSummary.txtや yyyyMMdd_HHmmss のフォルダの中にあるConfigurationFile.iniを参照します。

ログは、SQLServer2019の既定あれば以下のパスにあります:
C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log

3. 導入

構成ファイル作成手順

以下のいずれかの資材を適用先のサーバーに配置し、実行ファイルにオプションを指定して実行することで導入が開始されます。

実行ファイルにコマンドライン「/CONFIGURATIONFILE="構成ファイルのパス"」を追加し、必要に応じて不足/上書きするパラメータを追加します。

エディション メディア作成時に選んだ選択肢 資材
Express Express Advanced SQLEXPRADV_x64_JPN.exe
Express Express Core SQLEXPR_x64_JPN.exe
Evaluation ISO SQLServer2019-x64-JPN.iso の中身
Evaluation CAB SQLServer2019-x64-JPN.exe
SQLServer2019-x64-JPN.box
の二つ
その他 上記Exeを実行した際に出る「展開されたファイルのディレクトリの選択」画面で指定したフォルダの中身。
実行ファイルは setup.exe。

インストールが成功または失敗したときはログを参照します。Summary.txtに実際に認識されたパラメータと成否の情報が記録されています。

以上が構成ファイルを使用したSQLServerのインストールの流れとなります。

4. サンプルスクリプトについて

構成ファイルを作っても結構注意点が多く、コマンドライン・インストーラー・構成ファイルの3つを矛盾なく設定する必要があります。

しかし、構成ファイルとパラメータを適切に設定することで、現場での作業を最小限にすることができます。作業ミスも防止するとともに、画面キャプチャを多用した面倒な手順書の作成やメンテナンスも最小限に抑えることができます。

ということで、実際に構成ファイルを編集していて躓いたり不便だったりしたポイントを補助するようなツールを作成してみました。

今回作成したサンプルスクリプトは、構成ファイルを共通で使用しやすいようにしました。主な機能は以下の通りです。

メディアのダウンロード

Express Edition の実行ファイル「SQL2019-SSEI-Expr.exe」のコマンドラインを使用して、ExpressCoreのメディアをダウンロードするサンプルバッチを用意しました。

@REM メディアのダウンロードをコマンドで実行するサンプルです。
@REM Microsoft(R) SQL Server(R) 2019 Express を以下のサイトから入手してバッチと同階層に配置してください。
@REM https://www.microsoft.com/ja-jp/download/details.aspx?id=101064
@REM オプションについては SQL2019-SSEI-Expr.exe /HELP を参照してください。

cd %~dp0
SQL2019-SSEI-Expr.exe /ACTION=Download MEDIAPATH=%~dp0 LANGUAGE=ja-JP MEDIATYPE=Core /QUIET

構成ファイルを作成できるウィザードを開くバッチ

@REM Express Edition の構成ファイルを作成するためのウィザードを起動するコマンドサンプルです。
@REM オプションについては SQLEXPR_x64_JPN.ex /HELP を参照してください。
cd %~dp0
SQLEXPR_x64_JPN.exe /UIMODE=Normal /ACTION=INSTALL

ダブルクリックでインストール実行できる

PowershellはExecutionPolicyの設定が必要です。事前に設定されていない場合はその分だけ手順が増えます。ミスをした時のフローなども考えないといけないので、バッチ化しました。

中身はほぼPowershellのスクリプトです。『Install_With_ConfigurationFile.ps1.bat』の拡張子をps1にすることでPowershellスクリプトとして実行/デバッグが可能です。

インストーラーを自動で選択

Setup.exe以外にもインストーラーがいくつかあるため、これらのいずれかで動作するようにしています。
対応する実行ファイル名を変えたい場合は『Install_With_ConfigurationFile.ps1.bat』の$SetupFileNames パラメータを編集してください。

現在はSQLServer2019の以下の実行ファイルに対応しています。Installerフォルダにこれらを含む資材を入れておけば、自動で選択して適切なパラメータで実行します。
Setup.exe
SQLEXPR_x64_JPN.exe
SQLEXPRADV_x64_JPN.exe
SQLServer2019-x64-JPN.exe

更新プログラムの自動オフラインインストール

SP_AND_CU というフォルダに更新プログラムを入れるだけで、自動的にこの更新を適用します。

構成ファイルと追加パラメーターの編集

既定で作成される構成ファイルには一部必要なパラメータが無かったり、排他となるようなパラメータがあります。今回はサイレントインストールに関係する部分限定ですが、それを解消する仕組みを実装しています。
パラメータの分解や新しい構成ファイルの作成など基本はできているので、今後不足する組み合わせが必要な場合は Configuration.ps1 のCreateCmdLinePram 関数を編集してください。

忘れがちなライセンス同意のパラメータ追加

ウィザードで同意しても構成ファイルに出力されない、IAcceptSQLServerLicenseTermsをインストールパラメータに追加します。

よくある構成ファイルとパラメータの矛盾解消

QUIET/QUIETSIMPLE使用時に構成ファイルからUIMODEを削除します。

構成ファイルとパラメータを合わせたときQUIET/QUIETSIMPLE両方がTRUEにならないよう調整します。

一部のインストーラーが構成ファイルのQUIET/QUIETSIMPLEを無視する問題に対応し、コマンドラインに対応するパラメータを追加します。

更新プログラムを提供した際に適切なパラメータを設定

インストーラーとともにSPやCUを配置すると、それに合わせて UPDATESOURCE パラメータを追加します。

構成ファイルに環境変数があった場合に変数を展開する

ドメイン名やコンピュータ名などの環境変数を構成ファイルから使用できるようにしました。

コマンドラインで指定しにくいような文字を使うときや、コンピューター名/ドメイン名を使用する、あらかじめインストール先に用意しておきたいといったケースを想定しています。

パスワードなど追加のパラメータを指定する機能(平文/暗号文)

パラメータを、テキストファイル(平文・暗号文)を入力として使用します。
暗号文がある場合、インストール時に共通のパスワードを入力することで展開して使用します。

SQLServerはインストール時に構成ファイルとパラメータ双方を検証し、同じパラメータがあった場合はパラメータを優先します。そのため、ライセンスキーやサービスアカウントのパスワードなどはパラメータで与えるケースがあります。

以下のようなシーンで利用を検討してください:

  • インストールはできるだけ自動化したいが、パラメータの手打ちやコピペが必要
  • セットアップ中、どれか一つでも誤ったパスワードを入れると失敗する
  • 設計書に平文でパスワードやライセンスキーを載せるのに抵抗がある
  • データセンターに持ち込む可搬媒体に平文のパスワードを入れたくない
  • 証跡に、再現可能なインストーラーを残したい
  • パスワード圧縮などのフリーソフトを極力入れたくない

サンプルスクリプトを使用した導入

インストールまでの流れは以下のようになります。

# やること 概要
1. メディアの準備

ボリュームライセンスサイトやメディアをダウンロードする『SQL2019-SSEI-Expr.exe』などを入手し、実行します。

メディアがあれば、その中身を使用します。
Express EditionやEvaluate Edition を使用する場合はメディアのダウンロードを行います。

サンプル:『ExpressCoreメディアのダウンロード.bat』

2. インストーラーを指定のフォルダに格納

インストーラーを一式は、サンプルの「Installer」フォルダに配置します。

サンプルは以下に対応しています。これら以外のExeを使用する場合は、バッチ内の「$SetupFileNames」を編集してください。

メディア ファイル
Express Advanced SQLEXPRADV_x64_JPN.exe
Express Core SQLEXPR_x64_JPN.exe
ISO(Evaluation) SQLServer2019-x64-JPN.iso の中身
(Setup.exe)
CAB(Evaluation) SQLServer2019-x64-JPN.exe
SQLServer2019-x64-JPN.box
の二つ
その他 上記Exeを実行した際に出る「展開されたファイルのディレクトリの選択」画面で指定したフォルダの中身や、ボリュームライセンスサイト等で入手したメディアの中身
3. 更新プログラムを指定のフォルダに格納 必要に応じて、更新プログラムをサンプルの「SP_AND_CU」フォルダに配置します。
4. ConfigurationFile.ini を作成

GUIを使用して構成ファイルを作成する場合、インストーラーをしかるべきパラメータで実行して作成します。

サンプル:『ExpressCoreの構成ファイル作成ウィザード.bat』

5. ConfigurationFile.ini を修正

適用先の環境に合わせて、構成ファイルを修正します。
サンプルスクリプトは環境変数をサポートします。例えば「%COMPUTERNAME%」あるいは「%USERDOMAIN%」のように指定することで、各サーバー固有の値でも共通の構成ファイルを使用できます。

サンプル:『ConfigurationFile.ini』

6. パラメータの用意

必要に応じて、インストーラーに追加で与えるパラメータを、テキストファイルに保存します。
パラメータ Arguments.txt を用意します。このパラメータは、プロダクトキーやアカウントのパスワードを含めることを想定しています。
ConfigurationFile.iniと違い、「%環境変数%」を展開しません。%記号で囲まれたパラメータを使う場合はこちらに含めます。

サンプル:『Arguments.txt』

7. パラメータの暗号化

必要に応じて 「Encrypt_Arguments.ps1.bat」 を使用して Arguments.txt を暗号化します。

『Decrypt_Arguments.ps1.bat』で指定したパスワードで展開できることを確認します。キーボード配列が適用先と違う場合があるので、可能であれば確認は適用先端末で行います。うまくいけば エラーにならず、Original と Decrypt に同じ文字列が表示されます。

確認したら、Arguments.txt は削除してください。

サンプル:
『Encrypt_Arguments.ps1.bat』
『Decrypt_Arguments.ps1.bat』

8. 資材をサーバーに配置

適用先端末に資材をコピーします。

サンプルのTools配下と、作成したインストーラー、更新プログラム、Arguuments.txt/enc 、ConfigurationFile.iniをコピーします。

資材をサーバーに配置

9. インストール 『Install_With_ConfigurationFile.ps1.bat』を実行します。暗号化したパラメータがあればパスワードを入力します。
必要に応じてこの画面をキャプチャ等で証跡とします。
10. 結果確認 実行結果のテキストのパスが開きます。
結果を確認し、証跡として保存します。

補足情報

メディアのダウンロードもCUIで行いたい

ダウンローダーにあるコマンドラインでサポートしていることがあります。
例えばExpressEditionであれば SQL2019-SSEI-Expr.exe /HELP とすることで確認できます。

例として、以下の内容を含むバッチファイルをダウンローダーと同じパスに置いて実行するとExpress Coreのメディアを同フォルダにダウンロードしてくれます。

cd %~dp0
SQL2019-SSEI-Expr.exe /ACTION=Download MEDIAPATH=%~dp0 LANGUAGE=ja-JP MEDIATYPE=Core /QUIET

メディアのダウンロード

ExprssEditionで作った構成ファイルはその他のエディションで使える?

エディション固有のパラメータが無ければ、使用できます。
例えばEnableRNUやAddCurrentUserAsSQLAdmin はExpress でしか使用できません。

どのオプションがどのバージョンで使えるのか全部精査するのは大変なので、インストールに使用するものと同じエディションのメディアを使用するのが無難です。

試しにExpressで作った構成ファイルから上記2オプションをコメントアウトしてEvaluationのメディアを使用して導入してみたところ、Evaluation がインストールされました。

インストール結果、ログはどこ?

既定では以下のパスにあります。
C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log

SQL Server セットアップでは、既定では、 % programfiles% \ Microsoft SQL Server \nnn\Setup Bootstrap\Log内の日付と時刻のスタンプが付いたフォルダにログファイルが作成されます。 nnnは、インストールされている SQL のバージョンに対応する数字です。 タイムスタンプ付きのログ フォルダの名前形式は YYYYMMDD_hhmmss です。 セットアップを自動モードで実行した場合は、%temp%\sqlsetup*.log 内にログが作成されます。 Log フォルダ内のすべてのファイルは、それぞれのログフォルダー内の Log * .cab ファイルにアーカイブされます。

SQL Server セットアップ ログ ファイルの表示と読み取り
https://docs.microsoft.com/ja-jp/sql/database-engine/install-windows/view-and-read-sql-server-setup-log-files?view=sql-server-ver16

既に構築した環境がある。この環境の構成ファイルは作れる?

ログフォルダの yyyyMMdd_hhmmss に、使用されたConfigurationFile.ini が保存されているためこれを使用します。

なおこれは/ConfigurationFile パラメータで指定されたオリジナルと一致するものではなく、同時指定されたパラメータなどによって変化していることがあります。

「製品の更新プログラム」に更新プログラムがあった場合、この更新プログラムも自動で入る?

EXEがあるならあらかじめDLして起きインストール時に指定します。
/UpdateEnabled=1 /UpdateSource="サービスパック等のパス"

ネットからDLするなら /IACCEPTSQLSERVERLICENSETERMS らしい。チェックを入れたらiniにTRUEが入る?

ReportingServicesが役割にないけど、どこ?

Webからダウンロードするようになりました。
Download Microsoft SQL Server 2017 Reporting Services from Official Microsoft Download Center

文字コードについて

構成ファイルや証跡の文字コードについて。
公式情報が見当たらないので実際に確認できた限りの情報です。

ファイル 文字コード
ConfigurationFile.ini Unicode(UTF16)
Summary.txt UTF8(BOMなし)
バッチファイル SJIS,Default

0x858C001Cエラーで失敗する

構成ファイルから「UIMode」をコメントアウトせずにサイレントインストールを実行している可能性があります。

0x851A0006 エラーで失敗する

指定したユーザーがインストール先に存在しない場合、このエラーになります。
ユーザー名やドメイン名、コンピュータ名が間違っている場合は修正します。
WORKGROUP環境で構成ファイルを作成した場合、ローカルユーザを指定する際に既定ではコンピュータ名が入ります。その場合はコンピュータ名を削除することで、インストールした環境のローカルアカウントを暗黙的に指定することができます。

参考資料

※文章中の商品名、会社名、団体名は、各社の商標または登録商標です。

SQL Server:構成ファイルを使用したインストールとデモスクリプト(Azure, Powershell)(2)