SQL Server Express LocalDB

適用対象:SQL Server

Microsoft SQL Server Express LocalDB は、開発者を対象とした SQL Server Express の機能です。 SQL Server Express with Advanced Services で利用できます。

LocalDB のインストールでは、SQL Server データベース エンジン の開始に最低限必要なファイルがコピーされます。 LocalDB のインストール後に、特殊な接続文字列を使用して接続を開始できます。 接続時に、必要な SQL Server インフラストラクチャが自動的に作成および開始されるため、複雑な構成タスクを行わなくてもアプリケーションでデータベースを使用できます。 開発者ツールによって、開発者は SQL Server データベース エンジンを使用して Transact-SQL コードを記述してテストすることができ、SQL Server の完全なサーバー インスタンスを管理する必要はありません。

インストール メディア

LocalDB は、SQL Server Express のインストール中に選択する機能で、メディアをダウンロードするときに使用できます。 メディアをダウンロードする場合は、 [Express Advanced] または [LocalDB] パッケージを選択します。

Visual Studio 2019 および 2022 のお客様は、SQL Server Express 2019 をインストールする必要があります。

LocalDB インストーラー SqlLocalDB.msi は、Express Core を除くすべてのエディションのインストール メディアで利用できます。 これは、<installation_media_root>\<LCID>_ENU_LP\x64\Setup\x64 フォルダーにあります。 LCID はロケール識別子または言語コードです。 たとえば、LCID 値が 1033 である場合は、ロケールが en-US であることを示します。

あるいは、データの保存と処理ワークロードや ASP.NET と Web 開発ワークロードの一部として、または個別のコンポーネントとして、Visual Studio インストーラーで LocalDB をインストールすることもできます。

LocalDB をインストールする

インストール ウィザードまたは SqlLocalDB.msi プログラムを使用して、LocalDB をインストールします。 LocalDB は SQL Server Express LocalDB をインストールするときのオプションです。

インストール時に [Feature Selection/Shared Features](機能の選択/共有機能) ページで [LocalDB] を選択します。 主要な SQL Server データベース エンジンのバージョンごとに LocalDB のバイナリ ファイルのインストールが 1 つだけ表示されます。 複数の データベース エンジン プロセスを開始することができ、すべてのプロセスが使用するバイナリは同じです。 LocalDB として開始された SQL Server データベース エンジン のインスタンスには、SQL Server Express と同じ制限があります。

SQL Server Express LocalDB のインスタンスは、SqlLocalDB.exe ユーティリティを使用して管理されます。 SQL Server Express ユーザー インターフェイス機能は非推奨であるため、代わりに SQL Server Express LocalDB を使用してください。

説明

LocalDB セットアップ プログラムでは、SqlLocalDB.msi プログラムを使用して、コンピューターに必要なファイルがインストールされます。 LocalDB はインストールされると SQL Server Express のインスタンスとなり、SQL Server データベースを作成して開くことができます。 データベースのシステム データベース ファイルは、通常は非表示になっているローカル AppData パスに格納されます。 たとえば、「 C:\Users\<user>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\LocalDBApp1\ 」のように入力します。 ユーザー データベース ファイルは、ユーザーが指定する場所 (通常は C:\Users\<user>\Documents\ フォルダー内の任意の場所) に格納されます。

LocalDB をアプリケーション内に組み込む手順の詳細については、Visual Studio の「ローカル データの概要」と「Visual Studio でデータベースを作成し、テーブルを追加する」を参照してください。

LocalDB API の詳細については、「SQL Server Express LocalDB リファレンス」を参照してください。

SqlLocalDB ユーティリティを使用すると、LocalDB の新しいインスタンス作成、LocalDB インスタンスの起動と終了を行うことができ、LocalDB の管理に役立つオプションが含まれます。 SqlLocalDB ユーティリティの詳細については、「SqlLocalDB ユーティリティ」を参照してください。

LocalDB のインスタンスの照合順序は SQL_Latin1_General_CP1_CI_AS に設定されており、変更することはできません。 データベース レベル、列レベル、および式レベルの照合順序は正常にサポートされます。 包含データベースは、「包含データベースの照合順序」で定義されているメタデータおよび tempdb の照合順序ルールに従います。

制限

  • LocalDB は、SQL Server Management Studio を使用してリモートで管理することはできません。

  • LocalDB はマージ レプリケーションのサブスクライバーとして使用することはできません。

  • LocalDB では FILESTREAM がサポートされていません。

  • LocalDB では Service Broker に対してローカル キューのみが許可されます。

  • NT AUTHORITY\SYSTEM などの組み込みのアカウントが所有する LocalDB のインスタンスには、Windows ファイル システムのリダイレクトのため管理の容易性の問題が生じることがあります。 代わりに、所有者として通常の Windows アカウントを使用してください。

自動インスタンスと名前付きインスタンス

LocalDB では、2 種類のインスタンス、自動インスタンスと名前付きインスタンスがサポートされています。

  • LocalDB の自動インスタンスはパブリックです。 ユーザーのために自動的に作成および管理され、任意のアプリケーションから使用できます。 ユーザーのコンピューターにインストールされているどのバージョンの LocalDB についても、LocalDB の自動インスタンスが 1 つ存在します。 LocalDB の自動インスタンスを使用すると、シームレスなインスタンス管理を実行できます。 インスタンスを作成する必要はありません。それだけで動作します。 この機能により、アプリケーションのインストールと別のコンピューターへの移行が簡単になります。 対象コンピューターに指定バージョンの LocalDB がインストールされている場合、その対象コンピューターでも同じバージョンの LocalDB の自動インスタンスを使用できます。 LocalDB の自動インスタンスのインスタンス名には特殊なパターンがあり、これは予約済み名前空間に属します。 自動インスタンスにより、LocalDB の名前付きインスタンスとの名前の競合が防止されます。 自動インスタンスの名前は MSSQLLocalDB です。

  • LocalDB の名前付きインスタンスはプライベートです。 これらは、そのインスタンスの作成と管理を行う単一のアプリケーションによって所有されます。 名前付きインスタンスは他のインスタンスからの分離を可能にし、他のデータベース ユーザーとのリソースの競合を減らすことによってパフォーマンスを向上させることができます。 名前付きインスタンスを LocalDB 管理 API を通じて明示的に作成するか、管理対象アプリの app.config ファイルを通じて暗黙的に作成する必要があります (ただし、管理対象アプリでは必要に応じて API も使用できます)。 LocalDB の各名前付きインスタンスには、LocalDB バイナリの特定のセットを指す特定の LocalDB バージョンが関連付けられています。 LocalDB のインスタンス名は sysname データ型で、最大文字数は 128 文字です (このインスタンス名は、SQL Server の正規の名前付きインスタンスとは異なり、15 の ASCII 文字で構成される正規の NetBIOS 名に制限されることはありません)。LocalDB のインスタンス名には、ファイル名内で有効な任意の Unicode 文字を使用できます。 自動インスタンス名を使用する名前付きインスタンスは、自動インスタンスになります。

コンピューターの異なるユーザーが同じ名前のインスタンスを持つことができます。 各インスタンスは、独自のプロセスでそれぞれのユーザーとして実行されます。

LocalDB の共有インスタンス

コンピューターの複数のユーザーが LocalDBの単一インスタンスに接続する必要のあるシナリオをサポートするために、LocalDB はインスタンス共有をサポートします。 インスタンスの所有者は、コンピューター上の他のユーザーに自分のインスタンスへの接続を許可することを選択できます。 LocalDB の自動インスタンスと名前付きインスタンスの両方を共有できます。 LocalDB のインスタンスを共有するには、ユーザーがその共有名 (別名) を選択します。 共有名はコンピューターのすべてのユーザーから参照できるため、この共有名はコンピューター上で一意である必要があります。 LocalDB のインスタンスの共有名は、LocalDB の名前付きインスタンスと同じ形式です。

コンピューターの管理者だけが、LocalDB の共有インスタンスを作成できます。 LocalDB の共有インスタンスは、管理者または LocalDB の共有インスタンスの所有者が共有解除できます。 LocalDB のインスタンスを共有または共有解除するには、LocalDB API の LocalDBShareInstance メソッドと LocalDBUnShareInstance メソッドを使用するか、SqlLocalDB ユーティリティの共有および共有解除オプションを使用します。

LocalDB の起動および LocalDB への接続

自動インスタンスへの接続

LocalDB を使用する最も簡単な方法は、接続文字列 Server=(localdb)\MSSQLLocalDB;Integrated Security=true を使用して、現在のユーザーが所有する自動インスタンスに接続することです。 ファイル名を使用して特定のデータベースに接続するには、Server=(LocalDB)\MSSQLLocalDB;Integrated Security=true;AttachDbFileName=D:\Data\MyDB1.mdf のような接続文字列を使用して接続します。

LocalDB 形式の名前付け規則と接続文字列は、SQL Server 2014 (12.x) で変更されました。 以前のインスタンス名は、単一の文字 v の後に LocalDB とバージョン番号を付けたものでした。 SQL Server 2014 (12.x) 以降では、このインスタンス名の形式はサポートされなくなり、前に説明した接続文字列を代わりに使用する必要があります。

Note

あるコンピューター上でユーザーが初めて LocalDB への接続を試みるときは、自動インスタンスを作成し、なおかつ開始する必要があります。 インスタンスの作成に時間がかかり、接続がタイムアウト メッセージで失敗する可能性があります。 この場合は、作成プロセスが完了するまで数秒待ってから再び接続します。

名前付きインスタンスの作成および接続

LocalDB では、自動インスタンスに加えて名前付きインスタンスもサポートされます。 LocalDB の名前付きインスタンスを作成、開始、および停止するには、SqlLocalDB.exe プログラムを使用します。 SqlLocalDB.exe の詳細については、「SqlLocalDB ユーティリティ」を参照してください。

REM Create an instance of LocalDB
"C:\Program Files\Microsoft SQL Server\160\Tools\Binn\SqlLocalDB.exe" create LocalDBApp1
REM Start the instance of LocalDB
"C:\Program Files\Microsoft SQL Server\160\Tools\Binn\SqlLocalDB.exe" start LocalDBApp1
REM Gather information about the instance of LocalDB
"C:\Program Files\Microsoft SQL Server\160\Tools\Binn\SqlLocalDB.exe" info LocalDBApp1

前のコード サンプルの最後の行は、次の表のような情報を返します。

カテゴリ
名前 LocalDBApp1
バージョン <Current Version>
共有名 ""
Owner "<Your Windows User>"
自動作成 No
都道府県 Running
前回の開始時刻 <Date and Time>
インスタンス パイプ名 np:\\.\pipe\LOCALDB#F365A78E\tsql\query

Note

アプリケーションで .NET 4.0.2 より前のバージョンが使用されている場合、LocalDB の名前付きパイプに直接接続する必要があります。 インスタンス パイプ名の値は、LocalDB のインスタンスがリッスンしている名前付きパイプです。 LOCALDB# の後ろのインスタンス パイプ名の部分は、LocalDB のインスタンスが開始されるたびに変わります。 SQL Server Management Studio を使用して LocalDB のインスタンスに接続するには、 [データベース エンジンへの接続] ダイアログ ボックスにある [サーバー名] ボックスにインスタンス パイプ名を入力します。 カスタム プログラムから LocalDB のインスタンスへの接続を確立するには、次のような接続文字列を使用します。SqlConnection conn = new SqlConnection(@"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query");

LocalDB の共有インスタンスへの接続

LocalDB の共有インスタンスに接続するには、\.\ (円記号 + ドット + 円記号) を接続文字列に追加して、共有インスタンス用に予約されている名前空間を参照します。 たとえば、AppData という名前の LocalDB の共有インスタンスに接続するには、接続文字列の一部として (localdb)\.\AppData などの接続文字列を使用します。 自身のものではない LocalDB の共有インスタンスに接続するユーザーには、Windows 認証または SQL Server 認証ログインが必要です。

トラブルシューティング

LocalDB のトラブルシューティングについては、「Troubleshooting SQL Server 2012 Express LocalDB (SQL Server 2012 Express LocalDB のトラブルシューティング)」を参照してください。

アクセス許可

SQL Server Express LocalDB のインスタンスは、ユーザーが自分で使用するために作成するインスタンスです。 コンピューター上のすべてのユーザーは、LocalDB のインスタンスを使用してデータベースを作成したり、ユーザー プロファイルの下にファイルを格納したり、資格情報の下でプロセスを実行したりできます。 既定では、LocalDB のインスタンスにアクセスできるのは、その所有者に制限されます。 LocalDB に含まれるデータは、データベース ファイルに対するファイル システム アクセス権によって保護されます。 ユーザー データベース ファイルが共有の場所に格納されている場合、その場所へのファイル システム アクセス権を持つユーザーであればだれでも、所有する LocalDB のインスタンスを使用してデータベースを開くことができます。 データベース ファイルがユーザー データ フォルダーなどの保護された場所に格納されている場合は、そのユーザーおよびそのフォルダーにアクセスできる管理者だけがデータベースを開くことができます。 LocalDB ファイルを開くことができる LocalDB のインスタンスは、一度に 1 つのみです。

Note

LocalDB は、常にユーザーのセキュリティ コンテキストに基づいて実行されます。つまり、LocalDB は、ローカル管理者グループの資格情報で実行されることはありません。 そのため、LocalDB インスタンスで使用されるすべてのデータベース ファイルは、ローカル管理者グループのメンバーシップを考慮することなく、所有するユーザーの Windows アカウントを使用してアクセスできる必要があります。