SQL Server 2012 Expressエディションには2種類の製品が用意されています。従来通りのSQL Server 2012 ExpressとSQL Server 2012 Express LocalDBです。
今回は、SQL Server 2012 Express LocalDBについて調べたことをまとめてみたいと思います。
LocalDB RC0のインストーラー
SQL Server 2012 Express LocalDB RC0のインストーラーは、「ここ」からダウンロードできます。
RC0からインストーラーが改善されて、とてもシンプルで、とても小さいインストーラーとなりました。
32MBのMSIパッケージで、30秒ほどでLocalDBをインストールすることができます。
サイレントインストールに対応しており、LocalDBのサイレントインストールコマンド例は次のようになります。
msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES
32ビット版LocalDBは、64ビット版Windowsでの動作をサポートしていません。また、LocalDBパッケージは、32ビット版も64ビット版も同じファイル名SqlLocalDB.msiで、MSIファイル名の変更をすることはできません。
LocalDBの概要
LocalDBは開発者向けに開発された製品です。
とても簡単にインストールでき、管理をする必要が無く、SQL Server Expressと同じT-SQL言語・プログラミングインターフェイス・プロバイダーを使用できます。
LocalDBはアプリケーション開発環境を対象にしたときのニーズを満たし、開発者は使用し続けることができ、とても素晴らしい組み込みデータベースです。
- LocalDBは、SQL Server Expressと他のエディションと同じsqlserver.exeを使用します。アプリケーションは、接続するために同じクライアントプロバイダー(ADO.NET、ODBC、PDOなど)を使用でき、SQL Server Expressに提供されているのと同じT-SQLを使用してデータ操作ができます。
- LocalDBは、マシン上に(SQL Serverのメジャーバージョン一つにつき)一つだけインストールされます。複数のアプリケーションが複数のLocalDBプロセスを開始することができますが、同じディスク上から同じsqlserver.exe実行ファイルから開始します。
- LocalDBは複数のデータベースサービスを作成することはできません。LocalDBプロセスは、必要に応じて自動的にスタートし、ストップします。アプリケーションは、「Data Source=(localdb)\v11.0」に接続し、LocalDBプロセスは、アプリケーションの子プロセスとしてスタートします。このプロセスに最後に接続してから数分後、プロセスを閉じるためプロセスをシャットダウンします。
- LocalDBは、AttachDbFileNameプロパティでの接続をサポートしており、開発者はデータベースファイルを指定することができます。LocalDBは指定したデータベースファイルをアタッチし、コネクションが作成されます。
背景
SQL Server Expressには、2つの異なるニーズがあります。
一つ目は、SQL Serverの無料エディションであること。SQL Server ExpressはほかのエディションのSQL Serverとインストール、管理、プログラミングで100%の互換性があります。SQL Server Expressは、学習、トレーニング、(DB容量10GB未満の)小さな製品データベースに使用することができます。SQL Server Expressからほかのエディションへのアップグレードは、ライセンスキーを登録するだけで実行でき、インストールは必要ありません。
二つ目は、SQL Server Expressは、SQL Serverを対象にしたアプリケーション開発に使用できるSQL Serverエディションです。ほかのSQL Server と100%の互換性を保ちながら、とても小さく、シンプルで、設定や管理が必要なく、管理者ユーザでも無く実行できることが期待されています。
SQL Expressは、両方の役割を担当できるように調整してきました。しかし、SQL Serverと互換性を保ちながら、小さくシンプルをじつげんすることは困難でした。そこで、アプローチを変え、開発者向けのSQL Express版、つまりAPIレベルでSQL Serverと互換性を持ち、シンプルなLocalDBを提供することにしました。
LocalDBインスタンス
LocalDBが必要なDLLはすべて一か所にまとめてインストールされます。
初期設定では、「C:\Program Files\Microsoft SQL Server\110\LocalDB\Binn」に配置されます。
(ADO.NETやODBC、PDOのような)クライアントプロバイダーから「Data Source=(localdb)\v11.0」に接続します。プロバイダーは最初にLocalDBインスタンスが起動しているかを確認します。すでに開始している場合は、アプリケーションに接続します。起動していない場合は、LocalDBインスタンスを起動してから接続します。
WindowsログオンユーザでLocalDBインスタンスを起動し、ほかのユーザのインスタンスとは分離されています。
LocalDBの接続文字列は、「Data Source=(localdb)\v11.0;Integrated Security=true」です。LocalDBに接続するには、SQL Server 2012のODBCやOLEDB、または.NET Framework 4 Update 4.0.2のADO.NETを使用する必要があります。
データベースファイル
LocalDBの接続文字列は、AttachDbFileNameプロパティをサポートしており、接続プロセス時にデータベースファイルをアタッチすることができます。
C:\MyData\Database1.mdfにデータベースファイルが配置されているとすれば、開発者は接続文字列を次のように指定します。
Data Source=(localdb)\v11.0;Integrated Security=true;AttachDbFileName=C:\MyData\Database1.mdf
LocalDBのシステムデータベースファイルは、隠しディレクトリのAppData「C:\Users\<user>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\LocalDBApp1\」に格納されます。
ユーザデータベースは、特に配置場所を指定しない場合は、My Documentsディレクトリ「C:\Users\<user>\Documents\」直下に作成されます。
データベースの作成
次のようなクエリを実行します。
create database foo
My Documetフォルダーを参照すると、foo.mdfとfoo_log.ldfファイルが作成されていることを確認できます。また、データベースファイルの配置場所を指定したい場合は、次のようなクエリを実行します。
create database foo on (name='foo', filename='c:\DBs\foo.mdf')
LocalDBとSQL Server Express
LocalDBは、SQL Server Expressを置き換えるものではありません。
SQL Server Expressラインナップに追加されるものです。LocaDBは開発者向けで、SQL Server ExpressはSQL Serverの無料エディションであり続け、完全な互換性があり、簡単に上位エディションへアップグレードすることができます。
LocalDBとSQL Server Compact
「小さく、シンプルなデータベースで、ライトウェイトなインストール・データベースファイルへの接続」
これだけを見ると、SQL Server Compactを使用している開発者には同じに見えるかもしれません。この同一性はアクシデントではなく、LocalDBの目的はSQL Server Compactと同様に簡単に使用でき、一方でパワフルで、SQL Serverと完全な互換性があります。
LocalDBとSQL Server Compactの差異
- 実行モード:SQL Server Compactはin-proc DLLですが、LocalDBは分離プロセスです
- ディスク使用量:SQL Server Compactバイナリは4MBですが、LocalDBは140MBです。
- 特徴:SQL Server Compactはクエリ機能のようなコアのRDBMS機能を提供しますが、LocalDBはストアドプロシージャ、幾何学、地理データ型のようなリッチな機能セットを提供します。
SQL Server Management Studioでの操作
SQL Server Management StudioとLocalDBと.NET Framework 4をインストールします。さらに、.NET Framework 4.0.2へアップデートします。SSMSから接続するさいには、図のように「(localdb)\v11.0」と指定します。
SSMSからデータベースの作成
SSMSからデータベースを作成するために、データベース作成ウィザードからデータベースを作成します。
情報を入力し、OKボタンをクリックするとエラーが発生します。
これは現時点でのバグです。
回避策としては、データベースの配置場所を「My Documents」にすることです。
参考情報
- SQL Server コード ネーム 2012 Express LocalDB
- MSDN Blogs
- Announcing SQL Server 2012 Express LocalDB RC0
- Introducing LocalDB, an improved SQL Express
- .NET Framework 4 now supports LocalDB!
- LocalDB: Where is My Database?
- Local Data Overview
- LocalDB の共有名を使用してみる – SE の雑記
- Denali CTP3 Express Core の新機能 LocalDB を触ってみる « SE の雑記
- SqlLocalDB Utility
- SQL Server LocalDB Management Utility SqlLocalDB.exe
ピンバック: 【ASP.NET MVC5】チュートリアルの Data Source には MSSQLLocalDB を指定すること!【Visual Studio 2015】 | oki2a24
参考にさせていただきました。ありがとうございました。
ピンバック: ExpressWebからWinserverに引っ越しました[非推奨案件] | YouZeeRaw-Blog