SQL Server 2016 Express のインストール

2016 Express では、SQL Server Management Studio(SSMS)が独立したため、以下の3つのエディションになりました。LocalDB と Express 又は Express with Advanced Services とは共存してインストールでき、Express と Express with Advanced Services は共通のインストーラーになって、オプションの選択の違いだけなので、以前のようにエディションを意識する必要は殆ど無くなりました。

  • LocalDB : 開発者向けで、ユーザーモードで動作するので必要な時のみ起動します。軽量ですが、T-SQL言語等は上位のものと互換です。2005 Express で導入されたユーザーインスタンスの機能をサポートするので、Access の MDBファイルを扱うのと同じような感覚でデータベースを手軽に扱えます。
  • Express : SQL Server のデーターベースエンジンのみをインストールします。
  • Express with Advanced Services : Express に、フルテキスト検索、Reporting Services の機能が追加されます。

2016 Express では、Windows 7 及び Windows Server 2008 以降がサポートされます。

SSMS をインストールしたい場合は、SSMS のページからダウンロードしてインストールします。日本語版のSSMS のページもありますが、情報が古い場合が多いので英語版のページを見た方がいいです。

2016 Express SP1 では、Enterprise エディションでしか使えなかった、In-memory OLTP、In-memory ColumnStore、Operational Analytics、Always Encrypted 等の機能が使えるようになりました。また、2016 Express で以下の新機能が使えるようになっていたので、2008 R2 以降あまり変化がなかった Express 版ですが、やっと改善がなされたようです。

  • Stretch Database: SQL Server のテーブルを、Azure の SQL Database に拡張することができる機能です。容量が大きく参照頻度の低いデータをクラウドサービスに移行することが簡単にでき、管理コストや運用コストの削減が期待できます。Express では、データベースのサイズが 10 GB という制限がありますが、この制限が実質的になくなるように思いますが、マイクロソフトとしては、Azure を有料で使ってもらえるようになるのでそれでいいのかもしれないです。
  • Json サポート: Json サポートが追加されました。例えば SQLクエリの最後に FOR JSON AUTO を追加すると JSON 形式の文字列で結果を取得できます。また、JSON_VALUE というビルトイン関数が追加されているので、Jsonをパースし、JSONパスで指定した値を取得できます。

次期バージョンの注目は、SQL Server on Linux です。2017年の半ばに正式版が公開される予定で、SQL Server 2017 のページからプレビュー版がダウンロードできます。

以下は、Express エディションをインストールする場合のメモです。

1.Express のダウンロード

SQL Server 2016 Express の Webインストーラーは SQL Server ダウンロードのページからダウンロードできます。2016では、Express のダウンロードファイルが一本化されています。
バイナリーファイルからインストールしたい場合は、ダウンロードセンターのMicrosoft SQL Server 2016 Service Pack 1 Expressのページからダウンロードできます。こちらも、LocalDB、Express、Express with Advanced Services 共通になっています。

2. インストールの種類の選択

ダウンロードしたファイル(SQLServer2016-SSEI-Expr.exe)を起動すると、以下のようにインストールの種類の選択画面が表示されます。インストールの種類は以下の3種類です
(1) 基本: 既定の構成の Express がインストールされます。
(2) カスタム: 2014 までのインストーラとほぼ同じで、サーバーの構成の変更等ができます。
(3) メディアのダウンロード: セットアップファイルがダウンロードできます。

基本をクリックすると、インストールの場所が指定できるだけで、一気に完了(下の図)まで進みます。SSMS やスクリプトを使えば「カスタム」と同じように後から設定は可能(リモート接続を参照)ですが、初心者の場合は「カスタム」で設定した方が楽です。しかし、慣れてくると「基本」でインストールして、スクリプトで設定してしまうというのも一つの手段だと思います。なお、下部にあるボタンは次のとおりで特に機能がある訳ではないです。
「カスタマイズ」ボタン: インストールセンターが立ち上がる。
「ツールのインストール」ボタン: SSMS のページへのリンク。

以下は、「カスタム」を選択した場合のインストールです。

3.インストールセンターの起動

「カスタム」を選択すると、ファイルのダウンロード後に以下の図のように「インストールセンター」が起動します。「新規インストールを実行するか、既存のインストールに機能を追加します。」を選択します。


4.ライセンス条項

ライセンス条項が表示されるので、「ライセンス条項に同意する」にチェックして「次へ」をクリックします。

5.次に、セットアップサポートルールの画面が表示されます。エラーがなければ、「次へ」をクリックします。
6.「機能の選択」
「機能の選択」では、必要な機能を選択します。LocalDB、Express with Advanced Services の機能もここで選択できます。選択が終わると「次へ」をクリックします。
7.インスタンスの構成
次に、「インスタンスの構成」の画面が表示されます。インスタンスのデフォルトでは「名前付きインスタンス」で、インスタンス名が「SQLExpress」となっています。「名前付きインスタンス」を使うか、「既定のインスタンス」を使うかは悩ましいところです。違いは、SQL サーバーに接続する場合のサーバー名が、「既定のインスタンス」に設定した場合はサーバー名のみですが、「名前付きインスタンス」に設定した場合は、サーバー名\インスタンス名となるので、「既定のインスタンス」を使った方が短い記述で接続することができます。2012から開発用にはLocalDBエディションができて Express のユーザーインスタンスの機能がなくなったので「既定のインスタンス」を使っても問題がないと思います。なお、1台のマシンでExpress の場合は16個のインスタンスをインストールすることができます。
8.サーバーの構成
SQL Server サービスのアカウントは、デフォルトでは NT SERVICE\MSSQL$(インスタンスID) が選択されており、インスタンス毎に別のアカウントになります。Microsoft はセキュリティを強化するためアカウントを区分する方向に変更しているようで、2008 まではデフォルトでは NETWORK SERVICE でした。特に変更する必要がなければそのままにします。「照合順序」は、デフォルトでは、Japanese_CI_AS となっており、そのままで普通は支障はないしデータベースを作成するときに変更することもできます。。気になる場合は、照合順序のメモを参考にしてください。
 

9.データベース エンジンの構成
リモートマシンからの接続にはSQL Server 認証を使用する必要(サーバー OS ではドメイン内であれば Windows 認証が可能ですが、10/8/7 のデスクトップPCだけでは Windows 認証できるのはローカルマシンからのみ)があるので、認証モードは混合モードにします。リモートから管理する場合は、ユーザ名が sa で、ここで設定したパスワードで接続しますのでパスワードは忘れないようにしてください。「SQL Server 管理者の指定」は、「現在のユーザー」がデフォルトで入力されているのでそのままにしておきます。ローカルのマシンからアクセスする場合は、「現在のユーザー」であれば管理者権限を持つようになります。「次へ」をクリックします。なお、FILESTREAMは、varbinary(max) のデータをデータベース内ではなく、ファイルシステム上のファイルとして保存する機能です。画像等容量の大きいファイルを保存する場合には、データベースのサイズの制約の対象外になりパフォーマンスもいいようなので使用してもいい機能です。

10. 「次へ」をクリックすると、インストールが始まります。

11.インストールの完了

インストールが完了すると以下のような画面が表示されます。この時点で、SQL Server のデータベースは動作しており、ローカルで使うだけであればこれでインストールは終了です。以下はリモート接続が必要な場合の設定で、SQL Server 構成マネージャを使ってTCP/IP接続を有効にする必要があります。

12.TCP/IPの有効化
リモート接続を有効にするためには、SQL Server 構成マネージャを使用します。SQL Server 構成マネージャの起動は、[スタート]->[すべてのアプリ]->[Microsoft SQL Server 2016]->[Sql Server 構成マネージャ]の順にクリックします。構成マネージャが起動すると、「SQL Server ネットワークの構成」の「MSSQLSERVERのプロトコル」(「基本」でインストールした場合と名前付きインスタンスでインストールした場合は「SQLEXPRESSのプロトコル」)を選択し、TCP/IPを選択して右クリックして「有効化」をクリックします。「MSSQLSERVERのプロトコル」の場合は、以上で SQL Server を再起動すれば、固定ポート(ポート番号1433)で接続できます。
2014Express11
13.インスタンスの構成で「名前付きインスタンス」を選択した場合やWeb PI でインストールした場合とは、動的ポートがデフォルトになっているので、上の図で、プロパティをクリックします。「TCP/IPのプロパティ」ダイアログが表示されるので、「IPアドレス」タブを選択します。一番下の IPAllで、「TCP ポート」をSQL Server標準の1433に、「TCP 動的ポート」を空白にしてOKボタンをクリックします。SQL-Server を再起動すると設定が有効になり、固定ポートで接続できるようになります。
2014Express12
14. ファイアウォールの設定
Windows では、デフォルトでファイアウォールがオンになっているので使用するポートを開く必要があります。固定ポートの場合は、TCP 1433 を開放します。ファイアウォールの設定についての具体的な手順は、SQL Server をリモート接続-ファイアウォールの設定にメモをしました。動的ポートを使用する場合等は他のポートも開く必要があります。どのポートが必要になるかは、msdn の SQL Server のアクセスを許可するための Windows ファイアウォールの構成を参照してください。

15. ホスト名・接続文字列
SQL Server Management Studio で接続する時のサーバー名は、接続方法によって異なってきます。ローカルでメモリー接続をする場合は、「既定のインスタンス」の場合は、(local) 又は . になります。また、「名前付きインスタンス」の場合は、(local)\インスタンス名 又は .\インスタンス名となります。例えば、インスタンス名がデフォルトのインスタンス名である SQLExpress の場合 (local)\SQLExpress 又は .\SQLExpress です。
接続文字列は以下のようになります。
.NET の場合

<connectionStrings>
  <add name="{接続文字列名}" connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog={データベース名};Integrated Security=True;"providerName="System.Data.SqlClient" />
</connectionStrings>
.NET Core の場合
"ConnectionStrings": {
  "DefaultConnection": "Server=(local)\\SQLEXPRESS;Database={データベース名};Trusted_Connection=True;MultipleActiveResultSets=true"
}
固定ポートの場合は、サーバー名,ポート番号 で、インスタンス名は不要です。また、既定のポート番号 1433 の場合は、ポート番号を省略できます。インスタンス名 SQLExpress でインストールした場合でも、ポート番号1433の場合は、192.168.0.3 のように IPアドレスだけで接続できます。ポート番号を14330 でインストールした場合は、 192.168.0.3,14330 というようにします。接続文字列は以下のようになります。
.NET の場合
<connectionStrings>
  <add name="{接続文字列名}" connectionString="Data Source=192.168.0.3,1433;Initial Catalog={データベース名};Integrated Security=True;"providerName="System.Data.SqlClient" />
</connectionStrings>
.NET Core の場合
"ConnectionStrings": {
  "DefaultConnection": "Server=192.168.0.3,1433;Database={データベース名};Trusted_Connection=True;MultipleActiveResultSets=true"
}
動的ポートの場合は、インスタンス名でサーバーがポート番号を識別するので、サーバー名\インスタンス名となります。例えば、192.168.0.3\SQLExpress のようにします。接続文字列は以下のようになります。
.NET の場合
<connectionStrings>
  <add name="{接続文字列名}" connectionString="Data Source=192.168.0.3\SQLEXPRESS;Initial Catalog={データベース名};Integrated Security=True;"providerName="System.Data.SqlClient" />
</connectionStrings>
.NET Core の場合
"ConnectionStrings": {
  "DefaultConnection": "Server=192.168.0.3\\SQLEXPRESS;Database={データベース名};Trusted_Connection=True;MultipleActiveResultSets=true"
}

16.接続テスト
クライアントのSSMSを使って接続のテストをします。もし、接続がタイムアウトする場合は、以下の図のようにサーバーのコマンドプロンプトを立ち上げて、netstat -a を実行すれば、ある程度原因がわかります。プロトコルがTCP ローカルアドレス 0.0.0.0:1433 状態 LISTENING の接続が表示されるのであれば、SQL Server 2012 Express のTCP/IP は有効になっていますが、表示されない場合は、TCP/IP が有効になっていないということがわかります。
2014Express13

また、SQLCMD を利用して接続テストができます。下の図のように TCP/IP 接続が有効になっている場合は、以下のコマンドで SQL Server Express に接続することができます。
sqlcmd -S アドレス -U sa -P パスワード
2014Express14

接続は一旦はできるけど拒否される場合は、ログを確認してください。ログは、SSMS をインストールしている場合は、下の図のようにオブジェクト エクスプローラーの一番下にあるので簡単に確認できます。SSMSE をインストールしていない場合には、接続できるまでは、SSMS を使って確認できないので、直接 Log ファイルを確認します。Log ファイルは、SQL Server の Log フォルダーにあり、テキストエディタで開くことができます。既定のインストールでは、「既定のインスタンス」を選択した場合は、C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log、「名前付きのインスタンス」を選択した場合は、C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Log のフォルダーになります。
2014Express15

17.データベース、ログインアカウントの作成

SQL Server Management Studio (SSMS) を使用して、データベース及びログインアカウントを作成する手順は、SQL Server 2008 Express の設定にメモをしています。2008 のものですが、現時点でも殆ど変更はないのでそのままにしています。