Azure の Marketplace で公開されている SQL Server on Azure VM のイメージは、英語版の環境で構築されているため、日本語環境相当で利用するためには、いくつかの設定が必要となります。
MS ブログでも次の情報として公開が行われています。
- Azure 仮想マシン上に作成した SQL Server の日本語化手順(SQL Server 2012 , 2014 対応手順)
- Azure 仮想マシン上に作成した SQL Server の日本語化手順(SQL Server 2016 対応手順 )
- Azure 仮想マシン上に作成した SQL Server の日本語化手順(Windows OS 版 SQL Server 2017 対応手順)
- Change Locale/language of SQL Server on Azure VM
基本的な作業については、上記の内容となるのですが、SQL Server on Azure VM も上記の情報の公開後から、いくつかの機能が追加されていますので「Marketplace のインストール済みイメージの展開相当の状態」にするには、上記のドキュメントの他に、いくつかのポイントがあります。
必要となる作業とポイントについては、本投稿でまとめていますが、そもそもとして「本当に日本語版の SQL Server を使用する必要があるのか?」は意識しておいた方がよいかと思います。
インスタンスレベルの照合順序を日本語版の SQL Server の照合順序 (Japanese_CI_AS や Japanese_xxxxx 系) にする必要があり、英語版の SQL Server を使用しても問題ないのであれば、VM 展開直後に サーバーの照合順序の設定または変更 でインスタンスレベルの照合順序を変更したほうが楽です。
本投稿では「SQL Server 2019 on Windows Server 2019」の「SQL Server 2019 Enterprise on Windows Server 2019 Databas Engine Only」の Marketplace のイメージを日本語化するシナリオで記載しています。
Contents
SQL Server on Azure VM の展開
Marketplace の SQL Server on Azure VM の展開については、通常の展開通り実施します。
展開時の設定のポイントとしては、「SQL Server on Azure VM の Marketplace のイメージ」は「SQL Server IaaS Agent 拡張機能がインストール済み」であり、「SQL VM リソースプロバイダーに自動的に登録が行われる」ということです。
現在の Marketplace の SQL Server インストール済みイメージを展開する際には「SQL Server の設定」という項目があります。
これらの設定は、SQL VM リソースプロバイダーに登録を行うとインストールされる SQL Server IaaS Agent 拡張機能によって設定が行われているものとなります。
日本語版として、SQL Server を再インストールする際には、これらの設定も初期化されるため、一部の設定については、SQL Server のインストール時または、インストール後に再設定を行う必要があります。
ポイントとなるのは、「ストレージの構成 (Storage)」です。
ここで設定が可能な内容については、SQL Server のインストール時 / インストール後に再設定を行う必要があります。
そのため、SQL Server を日本語化する差には、ストレージの構成の設定内容については、どのような設定を行ったかは控えておいた方がよいかと思います。
- ストレージの最適化はトランザクション処理 (OLTP)
- データディスクは 2 本で「F:\data」を設定
- ログディスクは 1 本で「G:\log」を設定
- tempdb は、ローカル SSD を使用し「D:\tempDb」を設定
ポイントとなるのはストレージの構成の部分のみとなりますので、後は標準設定のまま VM を展開します。
OS の日本語化
VM の展開が終わったら OS の日本語化を行います。
SQL Server のローカル言語版 に記載されていますが、英語版の SQL Server はどの言語の OS にもインストールすることが可能ですが、ローカライズされた SQL Server については、同一の言語の言語パックをインストールした環境に対してのみインストールすることができますので、日本語版の SQL Server をインストールする場合に、OS の日本語化が必要です。
冒頭の技術情報で解説されていますが、OS の日本語化にはいくつかのステップが必要です。
言語パックの追加
「Settings」→「Time & Language」→「Language」から、日本語の言語パックの追加を行います。
言語パックのインストールが終わったら再ログインすると、日本語の UI で Windows を使用することができます。
以降の設定は日本語化された UI を基準に記載していきます。
日付と時刻の変更
「設定」→「時刻と言語」→「日付と時刻」から、タイムゾーンの設定を「(UTC+09:00) 大阪、札幌、東京」に変更します。
地域の設定の変更
「設定」→「時刻と言語」→「地域」から、地域の設定を「日本」に変更します。
システムロケールの変更
「コントロールパネル」→「時計と地域」→「日付、時刻、数値形式の変更」→「管理」の「システムロケールの変更」から、システムロケールを「日本語 (日本)」に設定し、再起動します。
言語設定のコピー
「コントロールパネル」→「時計と地域」→「日付、時刻、数値形式の変更」→「管理」の「設定のコピー」から「ようこそ画面とシステムアカウント」「新しいユーザーアカウント」を有効にし、全ユーザーが日本語環境となるように設定を反映させます。
設定をコピーしたら再起動します。
ここまでの作業で、日本語の設定が行われていないものがあった場合は、設定が日本になっていないものがありますので、この画面でチェックできるはずです。
ここまでの作業が完了すると、日本語環境として OS を使用することができます。
次に日本語環境の SQL Server のインストールを行います。
SQL Server の日本語化の作業
Marketplace の SQL Server インストール済み VM では、英語版の SQL Server がインストールされていますので、次の作業が必要となります。
- 英語版 SQL Server のアンインストール
- 日本語版 SQL Server のインストール
- SQL Server 2019 のインストール
- SQL Server 2019 累積更新プログラムのインストール
- SQL Server Management Studio のインストール
- SQL Server IaaS Agent 拡張機能の再インストールと初期設定
- SQL Server IaaS Agent 拡張機能の再インストール
- SQL Server IaaS Agent 拡張機能の初期設定
英語版 SQL Server のアンインストール
「コントロールパネル」→「プログラム」→「プログラムのアンインストール」から SQL Server のアンインストールを行います。
2020/1 時点で展開した SQL Server では、次のようなプログラムがインストールされた状態になっています。
どのプログラムをアンインストールすればよいか?の基準ですが、私は「インストール日」で判断を行っています。
今回の環境であれば、インストール日は「2020/12/17」「2021/01/13」の 2 種類が存在しています。
インストール日が「2021/1/13」となっているものは、「VM を展開したタイミングでインストールされたプログラム」となっています。
インストール日が「2020/12/17」となっているものは、「Marketplace に登録されているイメージで SQL Server がインストールされたタイミングで追加されたプログラム」となります。
今回の環境であれば「2020/12/17」がインストール日となっているものを一通りアンインストールします。
アンインストールの順番は最終的に一通り削除できれば、どのプログラムから実施しても問題ありません。
SQL Server の本体である、SQL Server 2019 (64-bit) からアンインストールしても、上から順にアンインストールしても、一通りアンインストールできるはずです。
アンインストールが完了すると、プログラムの一覧はここまで削除できるはずです。
アンインストールが完了したら再起動を行っておきます。
日本語版 SQL Server のインストール
インストーラーの入手
英語版 SQL Server のアンインストールが完了したら日本語版の SQL Server のインストールを行います。
インストールに必要なインストーラーは次のようなものです。
SQL Server 2019 評価版
Marketplace の SQL Server インストール済みイメージの場合、C ドライブから、展開したイメージに対応したエディションのプロダクトキーが確認できるようになっています。
評価版のインストーラーでは、プロダクトキーを設定できるようになっており、設定したプロダクトキーに応じたエディションがインストールされますので、日本語版の SQL Server のインストールには、評価版のインストーラーを使用します。
評価版のインストーラーでは、メディアのダウンロードで ISO ファイルをダウンロードする際に、言語を選択できますので、ここで日本語の ISO をダウンロードします。
SQL Server 2019 累積更新プログラム
Marketplace の SQL Server インストール済みイメージですが、定期的にイメージが更新されており、2021/1/13 時点では、「15.0.4083.2」というバージョンでインストールが行われるようになっています。これは、KB4583459 の修正プログラムが適用された状態です。
VM で使用されていた SQL Server のバージョンについては、「C:\SQLServerFull\CU\MEDIAINFO.XML」の内容や、「C:\SQLServerFull\CU\SETUP.EXE」のプロパティのバージョンから確認することができます。
基本的には最新の累積更新プログラムが適用された状態にするのが望ましいですが、イメージのバージョンと合わせたいというような場合には、上記のファイルからバージョンを確認して、バージョンに対応した累積更新プログラムを適用すると良いかと。
SQL Servre Management Studio (SSMS)
日本語版の SQL Server を使用する場合は、SSMS も日本語版を使用することになるかと思います。
SSMS のドキュメントから、SSMS をダウンロードすることができますが、ダウンロードリンクをクリックすると、英語版の SSMS がダウンロードされることがありますので「使用できる言語」のセクションから、「日本語」をクリックして、日本語版の SQL Server をダウンロードしておきます。
最終的に次のファイルがダウンロードされていれば、インストーラーの準備は完了です。
SQL Server のインストール
評価版でダウンロードした ISO をマウントして、SQL Server 2019 のインストールを実施します。
インストールについては通常の SQL Server のインストールと同様に進めていきます。
インストールを進めると「プロダクトキーの入力」画面が表示されます。
ここで「プロダクトキーを入力する」を選択します。
使用するプロダクトキーですが、VM の「C:\SQLServerFull\x64\DefaultSetup.ini」の「PID」の内容となります。
このファイルのプロダクトキーを指定すると、展開した SQL Server インストール済みイメージで使用されていたエディションと同一のエディションでインストールすることができます。(今回は Enterprise Edition のイメージを使用していますので、インストールされるのも、このエディションとなります)
あとは、適切なインストールパラメーターでインストールを行っていきます。
インストール済み SQL Server がどのようなパラメーターでインストールされていたかを確認したい場合は「C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log」内の「ConfigurationFile.ini」から確認することができます。
日本語環境の SQL Server であれば、インスタンスレベルの照合順序を日本語対応のものに設定されているかと思います。(Japanese_CI_AS は古くからの照合順序ですので、個人的にはそのまま使いたくはないのですが、往々にしてデフォルト設定でインストールするケースが多いです (変更すると何が起きるのかを説明するのが面倒 & たまに最新の照合順序をサポートしていない機能がある))
「ユーザーデータベースディレクトリ」と「ユーザーデータベースログディレクトリ」については、VM 展開時の「ストレージの構成」で設定されていた「F:\data」「G:\log」をこのタイミングで設定することもできますが、今回は後で変更するため、デフォルトの設定のままインストールしています。
SQL Server のインストールが完了したら、累積更新プログラムを適用し、
SSMS をインストールします。
ここまでの作業で、日本語版 SQL Server のインストールは完了するので、一度再起動を行っておきます。(SSMS をインストールした際に再起動要求が出ると思いますが)
最後の設定として SQL Server IaaS Aget 拡張機能の再インストールと初期設定を行います。
SQL Server IaaS Agent 拡張機能の再インストールと初期設定
ここまでの作業で、SQL Server のインストールは完了しているのですが、最後にもう一つ作業を行う必要があります。
それが SQL Server IaaS Agent 拡張機能の再インストールと初期設定です。
Marketplace の SQL Server インストール済みイメージは、標準で SQL Server IaaS Agent 拡張機能が導入されており、Azure VM で動作している SQL Server の管理性を向上させることができるようになっています。
この拡張機能ですが、SQL Server の再インストールを実施したことで、拡張機能が SQL Server に接続することができない状態となっており、管理性を向上させる機能が使用できない状態となっています。
そのため、SQL Server IaaS Agent 拡張機能の再設定を行う必要があります。
SQL Server IaaS Agent 拡張機能の再インストール
SQL Server IaaS Agent 拡張機能は SQL VM リソースプロバイダーの一部となっていますので、最初に SQL VM リソースプロバイダーから削除を行います。
削除方法については 拡張機能から登録を解除する に記載されています。
ポータルから削除する場合には「SQL 仮想マシン」のブレードを開き、該当の仮想マシンを選択して、「削除」をクリックします。
削除を行おうとすると次のような UI が表示されますが「仮想マシンの削除のチェックボックスは、絶対に有効にしない (チェックを外した状態にする)」でください。
仮想マシンのチェックを有効にすると、SQL VM リソースプロバイダーの登録解除と合わせて、VM 自体も削除されてしまいます。
誤って削除を行っても、OS ディスク / データディスクは残っていますので、復旧は可能ですが、追加の作業が発生しますので、チェックはつけないようにしてください。
コマンドラインで削除する方法も 拡張機能から登録を解除する に記載されていますので、オペミスを考慮するのであれば、コマンドから削除したほうが良いかもしれませんね。
SQL VM リソースプロバイダーから削除を行う (完了までに 5 分ぐらいかかる可能性があります) と、VM にインストールされていた「Microsoft SQL Server IaaS Agent」のプログラムも自動的にアンインストールされます。
もし、プログラムと機能から、手動で IaaS Agent をアンインストールしていた場合も、IaaS Agent を再度インストールするためには、リソースプロバイダーに登録されていない状態にする必要がありますので、プロバイダーからの削除作業は実施してください。
リソースプロバイダーの削除が終了したら、フル管理モード で IaaS Agent 拡張機能をインストールします。
今回、私が使用している環境の場合は、Cloud Shell で次のようなコマンドで SQL VM リソースプロバイダーへの再登録並びに、SQL Server IaaS Agent 拡張機能の再インストールを実施しています。(Name / ResourceGroupName は適宜変更してください)
$vm = Get-AzVM -Name SQLVM -ResourceGroupName SQLVMBackup New-AzSqlVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -SqlManagementType Full -LicenseType PAYG -Location $vm.location
SSMS で SQL Server に接続して、「ログイン」に「NT Service\SQLIaaSExtensionQuery」が追加されていれば、IaaS Agent 拡張機能が正常に動作し、SQL Server と連携できるようになっています。
SQL VM リソースプロバイダーへの登録は SQL IaaS Agent 拡張機能への自動登録 を使用すると、自動登録することも可能となっていますので、再登録については、自動登録の仕組みを使うということも、今はできるかと思います。
(自動登録されるまでは数日のタイムラグがありますが)
SQL Server IaaS Agent 拡張機能の初期設定
最後に、SQL Server IaaS Agent 拡張機能の初期設定を再投入します。
これは、以前投稿した、Azure VM にセルフインストールした SQL Server で tempdb を D ドライブに配置するための機能を利用する と関連する内容となります。
Marketplace の SQL Server インストール済みイメージを起動した状態では次のような設定が行われています。
- ユーザーデータベースのデータディレクトリ / ログディレクトリの設定
- ワークロードに応じたストレージの最適化 (トレースフラグの設定)
- D ドライブを利用した tempdb の配置
これらの設定は、SQL Server の再インストール、ならびに SQL Server IaaS Agent 拡張機能を再インストールしたことで初期化されてしまっています。
これらの設定を再度 SQL Server に投入します。
ユーザーデータベースのデータディレクトリ / ログディレクトリの設定
これについては、SQL Server インストール時に「ユーザー データベース ディレクトリ」「ユーザー データベース ログ ディレクトリ」を設定することもできますが、今回はインストール後に設定してみたいと思います。
最初に「F:\data」「G:\log」のディレクトを作成しておきます。
SSMS で、サーバーのプロパティを開くと、「データベースの設定」の データ / ログ から設定を変更することができます。
データに「F:\data」、ログに「G:\log」を設定することで、ユーザーデータベースの既定のディレクトリを変更することができます。
変更を行ったら 「SQL Server のサービスを再起動」してください。(再起動しないと、設定が反映されません)
これでディレクトリの設定は完了です。
VM の展開時にはこのような保存場所の設定変更のほかに、記憶域スペースを使用したディスクの構成も行われているのですが、今回は、ディスクの構成は既に完了している状態ですので、ディレクトリの変更のみを実施しています。
ワークロードに応じたストレージの最適化 (トレースフラグの設定) / D ドライブを利用した tempdb の配置
この二つの設定も手動で行うことはできるのですが、少し手間がかかりますので、REST API 経由で設定を行います。
Cloud Shell 等で、次のようなスクリプトを実行すると設定ができるかと。(resourceGroup / vmName は適宜変更してください)
$subscriptionID = (Get-AzContext).Subscription.id $resourceGroup = "SQLVMBackup" $vmName = "SQLVM" $token = "Bearer " + (Get-AzAccessToken).Token $uri = "https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.SqlVirtualMachine/sqlVirtualMachines/{2}?api-version=2017-03-01-preview" -f $subscriptionID, $resourceGroup, $vmName $header = @{ "Authorization" = $token "Content-type" = "application/json" } $body = @{ "location" = "japaneast" "properties" = @{ "virtualMachineResourceId" = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines/{2}" -f $subscriptionID, $resourceGroup, $vmName "storageConfigurationSettings" = @{ "diskConfigurationType"= "NEW" "storageWorkloadType" = "OLTP" "sqlTempDbSettings" = @{ "defaultFilePath" = "D:\tempDb" } } } } | ConvertTo-Json -Depth 4 -Compress Invoke-WebRequest -Method "PUT" -Uri $uri -Headers $header -Body $body $uri = "https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines/{2}?api-version=2017-03-30" -f $subscriptionID, $resourceGroup, $vmName $ret = Invoke-WebRequest -Method "GET" -Uri $uri -Headers $header $json = $ret.Content | Convertfrom-Json ($json.resources | Where-Object Name -eq SqlIaasExtension).properties.Settings.ServerConfigurationsManagementSettings.SQLStorageUpdateSettingsV2
Marketplace の SQL Server インストール済みイメージを日本語の SQL Server に変更しようとした場合、思いつくだけでもこのような作業が必要となってきます。
環境によって作業の増減はあるかもしれませんが、Azure VM の各種機能を使うという観点ですとこれらの内容を考慮しておく必要があるのではないでしょうか。