おがわみつぎの SQL Server な BLOG

雑多な日々

PASSJブログ ホーム 連絡をする RSS ATOM Login
  293 投稿数 :: 0 ストーリー :: 330 コメント :: 70 トラックバック

ニュース


Microsoft Most Valuable Professional

MVP プロファイル














過去の記事

カテゴリ

イメージギャラリ

BLOGS

MVP

技術系

白血病

SQL Server 2005 Express の AttachDBFilename/User Instance を利用した開発について

  • SQL Server 2005 Express の設定
    • インストール時に User Instance の設定を有効にしていない場合、sqlcmd や SQL Server Management Studio Express から設定変更コマンドを実行する

    C:\>sqlcmd -E -S .\SQLEXPRESS
    1>sp_configure 'show advanced options', 1;
    2>GO
    1>RECONFIGURE;
    2>GO
    1>sp_configure 'user instances enabled','1'
    2>GO
    1>RECONFIGURE;
    2>GO

  • 名前付きパイプを有効にする
    • SQL Server Configuration Manager の「SQL Server 2005 ネットワークの構成」→「SQLEXPRESS のプロトコル」→「名前付きパイプ」を有効化

  • データベースファイルの作成
    • sqlcmd で、データベースを作成し、デタッチ(切り離し)を行う

    C:\>sqlcmd -E -S .\SQLEXPRESS
    1>CREATE DATABASE SampleDB
    2>GO
    1>sp_detach_db 'SampleDB'
    2>GO

      • 通常、C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data に SampleDB.mdf/SampleDB_Log.LDF ファイルが生成される
      • MSSQL.X の番号は SQL Server 2005 のインストールされると状況が変わるので、レジストリの値にて確認すること

    • SSEUtility

      SQL Server Express Utility(http://www.microsoft.com/downloads/details.aspx?familyid=FA87E828-173F-472E-A85C-27ED01CF6B02&displaylang=en) をダウンロードし、適当な場所に解凍する(パス設定をしておくと便利)

      sseutil で、データベースファイルの作成

      C:\>sseutil -create C:\Sample.mdf
  • Visual Studio 2005 でプロジェクトの作成
    • Windows アプリケーション
      • ソリューション エクスプローラよりプロジェクトを右クリックし、「追加」→「既定の項目」を選択

      • 事前に作成したデータベースファイルを選択し、追加

      • サーバ エクスプローラ に「SampleDB.mdf」が追加される(ウィザードが起動されるがこの場合、キャンセル)

      • 「SampleDB.mdf」を右クリックし、「接続の変更」を選択し、「接続の確認」をクリック

      • これで、データベースアプリケーションの開発が可能になるが、MDF ファイルのプロパティで「出力ディレクトリにコピー」を「常にコピー」とするとデバッグを開始するたびに、MDF ファイルがコピーされるので、データベースは初期化されてしまうので、「新しい場合はコピーする」か「コピーしない」にしておくこと

      • 「コピーしない」にすると例外が発生するため、手動で bin\Debug/bin\Release フォルダ MDF ファイルをコピーしておく必要があるので、「新しい場合はコピーする」を選択するほうが無難

  • Web アプリケーション
  • aspnetdb
    • Web サイト管理ツールから設定を行うデータベース(パーソナル Web サイト スタータ キットやログイン関連のコントロールで利用されるデータベース)は %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe を使って、aspnetdb を作成する

    • aspnetdb をデタッチする

    C:\>sqlcmd -E -S .\SQLEXPRESS
    1>sp_detach_db 'aspnetdb'
    2>GO

    • aspnetdb.mdf/aspnetdb_Log.LDF をどこかに移動しておく
      • 通常、C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 配下にファイルが生成される
    • 空の Web アプリケーションの作成

    • aspnetdb.mdf の追加

    App_Data を右クリックし、「既存項目の追加」をクリック

    • 移動した aspnetdb.mdf を指定する

    このとき App_Data は NTFS 圧縮されていないこと、Web アプリケーションを HTTP で作成した場合は、App_Data フォルダに %COMPUTERNAME%\ASPNET ユーザに書き込み、変更権限を付与すること

    • Web.Config の追加

    ソリューション エクスプローラ の Web アプリケーションを右クリックし、「新しい項目の追加」をクリック

    「Web 構成ファイル」を選択して、「追加」ボタンをクリック

    • Web.Config の編集
      <connectionStrings>
      <
      remove name="LocalSqlServer"/>
      <
      add name="LocalSqlServer" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=True" providerName="System.Data.SqlClient" />
      </
      connectionStrings>

     

    • ASP.NET の構成

    • ユーザ/ロールの作成

    • あとは適当に。。。(ぉぃ)
  • ユーザデータベース
    • 事前に sqlcmd/SSEUtil.exe で、データベースを作成する
    • Web アプリケーションの「App_Data」に作成した MDF を追加する

    • テーブルやストアドプロシージャ作成、データ追加はサーバ エクスプローラから行う

 

  • ユーザー インスタンスのプロセスを起動中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。」エラーについて

    • ASP.NET/Windows アプリケーションともに発生するので、上図は一例
  • このエラーは「リモートデスクトップ」などで、リモートの Windows XP Service Pack 2/Windows Server 2003 Service Pack 1 に接続して、その OS 上で開発を行うと必ず発生する
    • You cannot connect to Visual Studio SQL Server Express on a remote Windows XP Service Pack 2-based computer

      http://support.microsoft.com/kb/896613

      この KB にはリモートコンピュータが Windows XP Service Pack 2 の場合に発生するとありますが、Windows Server 2003 R2 でも発生することが確認できました。

      Windows XP Service Pack 2 の場合はホットフィックスがあるので、何とかなりそうですが、Windows Server 2003 Service Pack 1 の場合は別途サポートに問い合わせてホットフィックスの提供を求めるか、リモートでの開発を諦めてコンソールで開発か Windows XP などのクライアント OS で開発するしかありません。

 

  • ユーザー インスタンスを使用する場合の制限

    ユーザー インスタンスを使用する場合、SQL Server Express の一部の機能が通常どおりに機能しなくなる場合があります。たとえば、次のような制限があります。

    • 1 人のユーザーが使用できるユーザー インスタンスは 1 つだけです。
    • レプリケーションが無効になります。
    • ユーザー インスタンスでは SQL Server 認証はサポートされません。Windows 認証のみがサポートされます。
    • ユーザー インスタンスをサポートするネットワーク プロトコルは、ローカルの名前付きパイプだけです。
    • ユーザー インスタンスは、親インスタンスのレジストリ エントリを共有します。
    • ユーザー インスタンスは、ネイティブ コードではサポートされません。この機能は、ADO .NET でのみサポートされます。
    • 動的に生成されたユーザー インスタンスでは、サーバー イベントの WMI プロバイダはサポートされません。親の SQL Server Express インスタンスでは引き続き機能するはずです。WMI プロバイダの詳細については、SQL Server 2005 Books Online の「 サーバー イベントの WMI プロバイダ」を参照してください。

2006/01/10 初版
2006/01/11 改定    User Instance のエラーについての記述の追加

投稿日時 : 2006年1月10日 14:43

Feedback

# SQL Server 2005 Expressの使い方 2006/01/10 15:40 どっとねっとふぁんBlog
SQL Server 2005 Express の AttachDBFilename/User Instance を利用した開発について
SQL Expressを使ってて何かうまく動かない、というときはきっとここに解決のヒントがあるはず。それと当然のことだけど、単にこの情報をそのまま使うのではなく、なぜこの作業を行っているか、という目で自分なりに納得するまで調べておくこと。...

# re: [SQLEXPRESS]SQL Server 2005 Express の AttachDBFilename/User Instance を利用した開発について 2006/01/11 11:25 Yoshihiro Kawabata/河端善博
いやはや、ごくろうさまです。
ユーザーインスタンス (RANU) 情報はこれから、ますます必要ですね。
ユーザーインスタンスを使った、効果的なサンプルも早くでるといいですね。
※ふつうに出てきそうですが。

# SQL Server 2005でハマったことあれこれ 2006/01/20 17:56 寝ても覚めても.NET(?)
SQL Server(というかデータベース)に関してはとんと疎い私ですが。。。SQL Server 2005で見事にはまりました。AttachDBFilenameとUser Instanceの違いについてまったく理解していなかったのが最大の原因。「ファイルアタッチ機能はSQL...

# フェスタ 2006 全セッション決定?! 2006/05/16 15:54 PASSJアフタースクール
フェスタ 2006 全セッション決定?!

コメント

タイトル:
名前:
Url:
コメント: