LocalDBが開発(プログラムの設計、開発、およびテスト)専用と思う理由

MSDNフォーラムで「LocalDB をどう考えますか?どう捉えていますか?」っというスレッドでLocalDBの話題で盛り上がっていました。

LocalDBはアプリケーションと共に配置し、本番のアプリケーションでも使用できる、つまり開発専用ではないという事実があります。

マイクロソフトの人がBlogでどういう風に語っていたか、セミナーでどういう風に語っていたかは、一旦わきに置いて、Microsoftが会社としてどう定義しているかを確認してみましょう。

ここで言う会社としての定義は、「マイクロソフト ソフトウェア ライセンス条項 MICROSOFT SQL SERVER 2014 EXPRESS LOCALDB」を参照するのが良いかと思います。
(C:\Program Files\Microsoft SQL Server\120\License Terms)

一部分だけを抜粋。

1. インストールおよび使用に関する権利。お客様は、お客様のプログラムの設計、開発、およびテストを行うために、任意の数の本ソフトウェアの複製をお客様のデバイスにインストールして使用することができます。

うーん、本番アプリケーションで使用できるようには読み取れないです。

お客様は、以下を行うことはできません。
• 本ソフトウェアを商用ソフトウェア ホスティング サービスで使用すること。

少なくとも、有償のオンラインサービスで使用してはいけないと明示されていますね。
では、組み込みは…となると、やっぱり第一条の文面からすると、
ダメで、「プログラムの設計、開発、およびテスト」に限定されているように思います

ただ、自分は法律の専門家ではないので、ライセンス条項をどう解釈するか、どう捉えるべきかは言えないので、私見ってことで…。

ちなみに、再頒布については以下のように書かれていました(まぁ、これも抜粋)。

• お客様は、本ソフトウェアのオブジェクト コード形式 (以下「再頒布可能なコード」といいます) を複製して再頒布することができます。および、
• お客様は、お客様のプログラムの頒布者に対して、お客様のプログラムの一部として再頒布可能コードの複製および頒布を許可することができます。

再頒布できるとは言え、LocalDBの使用権利が「お客様のプログラムの設計、開発、およびテストを行うために」というのは変わらないので、通常運用としては使用できないと思います。

SQL Server 2012 Express LocalDBのまとめ

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」と指定します。

SNAGHTML2771a5bf

SSMSからデータベースの作成

SSMSからデータベースを作成するために、データベース作成ウィザードからデータベースを作成します。

情報を入力し、OKボタンをクリックするとエラーが発生します。

これは現時点でのバグです。

回避策としては、データベースの配置場所を「My Documents」にすることです。

 

参考情報