- PR -

SQL Server2005 Express Editonで作ったDBファイルをサーバに移動する方法

1
投稿者投稿内容
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-02-03 22:14
こちらの会議室は初めてですがよろしくお願いします。
非常に初歩的な質問で心苦しいのですが、よろしければアドバイスいただけますでしょうか。

Visual Studio2005でウェブアプリ構築の勉強をしており、そろそろデータベースをやろうかと最近SQL Serverを本を読んだりしながら触り始めたレベルです。

相談内容としては、VisualStudioのウェブアプリケーションのプロジェクト内でデータベースファイルを作成し、それを実際に利用するサーバに移す手順です。

サーバ側はSQL Server 2005のStandard Edition、開発機はSQL Server 2005のExpress Editionが入っています。
開発機側で作成したデータベースファイル(今回はASPNETDB.MDF)をサーバにアップロードするには、VSで「Webサイト」→「Webサイトのコピー」を選んで、「リモートへのサイトのコピー」を実施して行いました。(ここでデータベースファイルのデタッチをしておく必要はないのでしょうか?)

デタッチせずともとりあえずはコピーはされているようなので、次にアタッチをしようと思い、試しにManagement Studioでアタッチをしてみました。アタッチ後、DBを操作しようとすると所有者を設定しろというエラーが出たのでデータベースのプロパティ→ファイルで所有者をNetwork Serviceとしました。ASP.NETで利用するのでこうしましたがどう設定するのが正しいのでしょうか?また他にも設定すべき項目がありますでしょうか?

この状態でネットワーク越しにウェブアプリにログインをしてみたところ、以下のエラーメッセージがでました。

--------------------------------------------------------------
サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: SQL ネットワーク インターフェイス, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました)
--------------------------------------------------------------

サーバのSQL Serverについては、DotNetNukeなども入れて使えていることから、エラーメッセージにあるリモート接続の許可など以外の原因だと思います。

そもそも開発機がExpress、サーバがStandardとEditionが違う場合の手順は上のような流れで正しいのかどうか自信がありません。
また、気になっているのが、Express EditionなのでUser Instanceではないかと思うのですが、それ以外のEditionにはない機能だと思うので、どこか設定ファイルなどを変更しないといけないのかなという気もしているのですが、web.configファイルなどにも特に何も書かれていないようですし、どこを触ればいいのかよくわかりません。

すみませんが、参考URLなどでも結構ですので、アドバイスをいただけますでしょうか。
よろしくお願いします。
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-02-05 13:44
すみません。一応自己解決しました。

事前調査の際の検索キーワードがまずかったようで、改めて探したところ、どっとねっとふぁんさんのサイトの以下の記事を見つけましたので参考にさせてもらいつつ、どうにか動くところまでは持っていけました。

http://dotnetfan.org/blogs/dotnetfanblog/archive/2006/01/11/506.aspx

本質的なところはまだ理解できていないと思いますが、とりあえず使えるようになったので、これから色々弄ってみて試してみたいと思っています。
間違っているところもあるかもしれませんが、とりあえず現状の報告だけしておきます。
やってみたこととしては、ASPNETDBは接続文字列などが隠れているようでよくわからないので最初は別のデータベース(とウェブアプリ)を作ってやってみました。

1.VSのソリューションエクスプローラ上で試験用データベースファイルを作成
(ここで、web.configの接続文字列を確認し、試しにUseInstance=Falseとしてみて動くことを確認)
2.上記ファイルをデタッチしてから「ウェブサイトのコピー」でファイル(*.mdf,*.ldf)をサーバにアップロード
3.サーバのManagementStudioを立ち上げ、上記ファイルをアタッチ
4.アタッチ後、所有者にNetwork Service(2003 Serverの場合)を指定、データベースの名前も適当なものに変更
5.web.configの接続文字列の変更(以下、データベースの名前をTestとした場合の例)

[開発機側](VSが自動生成)
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Test.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>

[サーバ側](アップロード後に修正)
<connectionStrings>
<add name="ConnectionString" connectionString="Server=(local);Database=Test;Integrated Security=True;
providerName="System.Data.SqlClient" />
</connectionStrings>

以上でOKでした。
当初の目的であったASPNETDBの場合は同じようにアップロード&アタッチした後、<connectionStrings>に以下を付け加えます。(データベース名をTestAccountと変更した場合)

<remove name="LocalSqlServer"/>
<add name="LocalSqlServer" connectionString="Server=(local);Database=TestAccount;Integrated Security=True;
providerName="System.Data.SqlClient" />

ということで動いたには動いたのですが、まだまだいろんな疑問点があります。
これは今後、調べていきたいと思います。

■User Instanceの意義がよくわからない
→結局、開発者のアカウントがAdministratorなら不要?
■AttachDbFilenameの意義もよくわからない
→ManagementStudioではなくVisualStudio上でデータベースを作る場合には必要?
→AttachDbFilenameはExpressEdition以外でも使えるらしいが、どうやって設定する?
■アップロードの前にデタッチ(開発機、サーバとも)は必要か?
■所有者はNetwork ServiceでOK?
■Windows統合認証以外に変更する場合の設定方法
■machin.configにLocalSqlServerが設定されているようだが、ウェブアプリ個別に認証データベースを持つのではなく、サーバ共通の認証をするのが普通なのか?

デフォルトでVSをセットアップするとExpress Editionがインストールされて初心者でもSQL Serverを使った開発は簡単に出来ますみたいな宣伝文句があって、実際結構手軽に開発できますが、それを実際に配置しようとすると初心者には難しいのが実情だと思いました。
それに間違ってweb.configの上書きをしたりしないように開発機とサーバ機を同じにするには最初からUser InstanceやAttachDbFilenameを使わない(つまりサーバ機と開発機のSQL ServerのEditionはあわせておいた方がよい・・つまりExpress Editionを使わない)ようにした方がよいような気もしますがどうなんでしょう?まだ全然理解できていないので間違った解釈をしているかもしれませんけど。
今後、更に弄ってみて何か有益な情報がありましたら自分と同じような初心者の方向けにアップしたいと思います。

とりあえず、自己解決ということで、どうもお騒がせしました。
1

スキルアップ/キャリアアップ(JOB@IT)