22
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLServer LocalDBにまつわる色々まとめ

Posted at

はじめに

SQLServer LocalDBを導入して開発するなかでそれを操作するためのツール、テクニック、手法などをまとめました。
LocalDBを使用することで自分のマシンに開発サーバと独立した実行環境を構築できるようになり、他に影響を与えることなく開発を進めることが可能となりました。アプリ側からは単純に接続文字列を変えるだけなのでアクセスも非常に簡単です。

SQLServer LocalDB?

  • ローカルの環境で動作する開発用DBを作成できる
  • SQL Server 2012のいずれかのエディション以降使用できる
  • 詳しくは蒼の王座・裏口

プロジェクト指向オフラインDB開発

SSDT(SQLServerDataTools)

  • Visual StudioのGUI上で操作可能

    • ssdt.PNG
  • 接続されたDBに対してのクエリの実行

  • 異なる環境間のDBで以下の操作が行える

    • スキーマ比較
    • データ比較

SQLServerオブジェクトエクスプローラ

  • VisualStudio上で接続されているDBの情報が確認できる
  • 異なるDBサーバ間のスキーマ比較やデータ比較もここで選択したもので実行できる
  • sqlserverobjectexplorer.PNG

SQL LocalDBインスタンスの操作

用意されているコマンド

コマンド 説明
create SQL Server Express LocalDB の新しいインスタンスを作成します。 SqlLocalDB では、引数 で指定された SQL Server Express バイナリのバージョンを使用します。 バージョン番号は、1 桁以上の 10 進数の数値書式で指定します。 マイナー バージョン番号 (サービス パック) は省略可能です。 たとえば、11.0 と 11.0.1186 という 2 つのバージョン番号のどちらも使用できます。 指定したバージョンがコンピューターにインストールされている必要があります。 指定しなかった場合、バージョン番号は既定で SqlLocalDB ユーティリティのバージョンに設定されます。 –s を追加した場合、 LocalDBの新しいインスタンスが起動します。
share 指定された共有名を使用して、LocalDB の指定されたプライベート インスタンスを共有します。 ユーザー SID またはアカウント名を省略した場合、既定で現在のユーザーになります。
unshared LocalDB の指定した共有インスタンスの共有を停止します。
delete 指定した SQL Server Express LocalDB のインスタンスを削除します。
start 指定した SQL Server Express LocalDB のインスタンスを起動します。 成功した場合、ステートメントから LocalDBの名前付きパイプ アドレスが返されます。
stop 指定した SQL Server Express LocalDB のインスタンスを停止します。 –i を追加した場合は、 NOWAIT オプション付きでインスタンスのシャットダウンを要求します。 –k を追加した場合は、インスタンス プロセスに通知することなく、そのプロセスを停止します。
info 現在のユーザーが所有する SQL Server Express LocalDB のすべてのインスタンスを一覧表示します。 を指定すると、SQL Server Express LocalDB の指定したインスタンスの名前、バージョン、状態 (Running または Stopped)、および最後の起動時刻に加え、LocalDB のローカル パイプ名が返されます。
trace trace on を指定すると、現在のユーザーに対して SqlLocalDB の API 呼び出しのトレースが有効になります。 trace off はトレースを無効にします。

ソースコードで実行する

Stopサンプル
SqlLocalDbApi.StopInstance(localDBInstanceName);
Deleteサンプル
SqlLocalDbApi.DeleteInstance(localDBInstanceName, true); // 第二引数は実ファイルであるmdf、ldfなどのファイルを削除するかどうか
Createサンプル
SqlLocalDbApi.CreateInstance(localDBInstanceName);
Shareサンプル
SqlLocalDbApi.ShareInstance(localDBInstanceName, localDBInstanceShareName);

コマンドラインで実行する

DBサーバへの操作

用意されているコマンド

コマンド 説明
Extract ライブ SQL Server または Microsoft Azure SQL データベースからデータベース スナップショット (.dacpac) ファイルを作成します。
Export SQL Server または Microsoft Azure SQL データベースのライブ データベース (データベース スキーマとユーザー データを含む) を BACPAC パッケージ (.bacpac ファイル) にエクスポートします。
Import BACPAC パッケージのスキーマとテーブル データを SQL Server または Microsoft Azure SQL データベースの新しいユーザー データベースにインポートします。
Publish ソース .dacpac ファイルのスキーマに合わせてデータベース スキーマの増分更新を行います。データベースがサーバーに存在しない場合は、公開操作によって作成されます。存在する場合は、既存のデータベースが更新されます。
DeployReport 公開操作によって行われる変更の XML レポートを作成します。
DriftReport 前回データベースが登録された後に、登録されたデータベースに対して行われた変更の XML レポートを作成します。
Script ソースのスキーマに合わせてターゲットのスキーマを更新する、Transact-SQL の増分更新スクリプトを作成します。

コマンド実行による成果物

  • DACPackage
    • データ層アプリケーションの定義を含む成果物の表現です。
  • BACPackage
    • データ層アプリケーションの定義とデータを含む成果物の表現です。

ソースコードで実行する

Exportサンプル
var sourceDacService = new DacServices(sourceConfig.ConnectionString);
sourceDacService.ExportBacpac("sample.bacpac", sourceDatabaseName);
Importサンプル
var targetDacService = new DacServices(targetConfig.ConnectionString);
var bacpacFile = BacPackage.Load("sample.bacpac");
targetDacService.ImportBacpac(bacpacFile, targetDatabaseName);

コマンドラインで実行する

参考

22
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?