データベースを配置する (VB)
ASP.NET Web アプリケーションをデプロイするには、必要なファイルとリソースを開発環境から運用環境に移す必要があります。 データ ドリブン Web アプリケーションの場合、これにはデータベース スキーマとデータが含まれます。 このチュートリアルは、開発環境から運用環境にデータベースを正常にデプロイするために必要な手順を説明するシリーズの最初のチュートリアルです。
はじめに
ASP.NET Web アプリケーションをデプロイするには、必要なファイルとリソースを開発環境から運用環境に移す必要があります。 過去 6 回のチュートリアルの過程で、簡単な Book Reviews Web アプリケーションのデプロイについて説明しました。 このデモ サイトは、多数のサーバー側リソース (ASP.NET ページ、構成ファイル、構成ファイル、Web.sitemap
ファイルなど) と、クライアント側リソース (イメージや CSS ファイルなど) で構成されていました。 しかし、データドリブン Web アプリケーションはどうでしょうか。 データベースを使用する Web アプリケーションをデプロイするために、実行する必要がある追加の手順は何でしょうか。
次のいくつかのチュートリアルでは、データ ドリブン Web アプリケーションをデプロイするために必要な手順について説明します。 このチュートリアルではまず、データベースのスキーマとコンテンツを開発環境から運用環境に移す方法を調べますが、後続のチュートリアルでは必要な構成の変更について説明します。 その後、アプリケーション サービス (メンバーシップ、ロール、プロファイルなど) を使用するデータベースをデプロイする際の課題について説明します。
更新された Book Reviews Web アプリケーションの調査
データドリブン Web アプリケーションのデプロイを説明するために、Book Reviews Web アプリケーションを単純な静的 Web サイトからデータドリブン Web サイトに更新しました。 前と同様に、このチュートリアルのダウンロードには 2 つのバージョンのアプリケーションがあります。1 つは Web アプリケーション プロジェクト モデルを使用し、もう 1 つは Web サイト プロジェクト モデルを使用します。
更新された Book Reviews Web アプリケーションは、サイトの App_Data
フォルダー (~/App_Data/Reviews.mdf
) に保存されている SQL Server 2008 Express Edition データベースを使用します。 お使いのコンピューターに SQL Server 2008 がインストールされている場合、デモはエラーなく実行されるはずです。 以前のバージョンの SQL Server を使用している場合は、無料の SQL Server 2008 Express Edition をインストールするか、このチュートリアルのダウンロードで入手できるデータベース スクリプトを使用して自分でデータベースを作成できます。
Reviews.mdf
データベースには、次の 4 つのテーブルが含まれています。
Genres
- テクノロジ、フィクション、ビジネスなどの各ジャンルのレコードが含まれます。Books
-Title
、GenreId
、ReviewDate
、Review
などの列を含む、各レビューのレコードが含まれます。Authors
- レビューされた書籍に寄稿した各著者に関する情報が含まれます。BooksAuthors
- どの著者がどの書籍を書いたかを指定する多対多の結合テーブル。
図 1 は、これら 4 つのテーブルの ER 図を示しています。
図 1: Book Reviews Web アプリケーションのデータベースは、4 つのテーブルで構成されています (クリックするとフルサイズの画像が表示されます)
以前のバージョンの Book Reviews Web サイトには、書籍ごとに個別の ASP.NET ページがありました。 たとえば、~/Tech/TYASP35.aspx
というページがあり、そこには「Teach Yourself ASP.NET 3.5 in 24 Hours」のレビューが含まれていました。 この新しいデータ ドリブン バージョンの Web サイトには、データベースに保存されたレビューと、指定された書籍のレビューを表示する単一の ASP.NET ページ (Review.aspx?ID=bookId) があります。 同様に、指定したジャンルのレビューされた書籍を一覧表示する Genre.aspx?ID=genreId ページがあります。
図 2 と 3 は、Genre.aspx
と Review.aspx
の各ページの動作を示しています。 各ページのアドレス バーの URL をメモします。 図 2 では、Genre.aspx?ID=85d164ba-1123-4c47-82a0-c8ec75de7e0e です。 85d164ba-1123-4c47-82a0-c8ec75de7e0e はテクノロジ ジャンルの GenreId
値であるため、ページの見出しには "Technology Reviews" と表示され、箇条書きには、このジャンルに該当するサイトのレビューが列挙されます。
図 2: テクノロジ ジャンルのページ (クリックするとフルサイズの画像が表示されます)
図 3: 「Teach Yourself ASP.NET 3.5 in 24 Hours」のレビュー (クリックするとフルサイズの画像が表示されます)
Book Reviews Web アプリケーションには、管理者がジャンル、レビュー、著者情報を追加、編集、削除できる管理セクションも含まれています。 現在、すべての訪問者が管理セクションにアクセスできます。 今後のチュートリアルでは、ユーザー アカウントのサポートを追加し、承認されたユーザーのみが管理ページにアクセスできるようにします。
Book Reviews アプリケーションをダウンロードする場合、その目的はデータ ドリブン アプリケーションのデプロイのデモンストレーションであることに留意してください。 アプリケーション設計に関するベスト プラクティスは示されていません。 たとえば、個別のデータ アクセス層 (DAL) はありません。ASP.NET ページは、SqlDataSource コントロールまたは分離コード クラスの ADO.NET コードを介してデータベースと直接通信します。 階層化アーキテクチャを使用してデータドリブン アプリケーションを作成する方法の詳細については、"データの使用"のチュートリアルを参照してください。
開発と運用のデータベース
データドリブン Web アプリケーションで開発を開始する場合は、データベース接続文字列を指定する必要があります。この文字列は、データベースへの接続方法に関するアプリケーションの詳細を提供します。 この接続文字列では、特にデータベース サーバー、データベース名、セキュリティ情報を指定します。 ほとんどの場合、開発中にアプリケーションによって使用されるデータベースは、運用環境で使用されるデータベースとは異なります。 開発と運用に異なるデータベースを使用すると、多くの利点があります。 開発で異なるデータベースを使用すると、ライブ データを誤って変更したり削除したりする心配がありません。 また、運用環境のアプリケーションへの影響を気にすることなく、ダミーのテスト データを投入したり、データ モデルに破壊的変更を加えたりすることもできます。 開発環境と運用環境で異なるデータベースを使用することの欠点は、アプリケーションがデプロイされるときに、データベースと、データベースのスキーマまたはデータへの関連する変更もデプロイする必要があることです。
最初のデプロイの前には、データベースのインスタンスは1つしかなく、そのインスタンスは開発環境にあります。 アプリケーションを初めて運用環境にデプロイするときは、必要なサーバー側およびクライアント側のファイルをコピーするだけでなく、開発環境から運用環境にデータベースをコピーする必要があります。 これが、Book Reviews Web アプリケーションで現在行われていることです。データベースは開発環境の App_Data
フォルダーにありますが、まだ運用環境にプッシュされていません。
アプリケーションがデプロイされると、データベースのコピーが 2 つ存在します。 アプリケーションが成熟するにつれて、新しい機能が追加され、データ モデルの変更が必要になることがあります (既存のテーブルに新しい列を追加する、既存の列を変更する、新しいテーブルを追加するなど)。 Web アプリケーションが次にデプロイされるときに、前回のデプロイ以降に開発環境のデータベースに適用された変更を運用データベースに適用する必要があります。 このプロセスを管理するためのいくつかの戦略については、今後のチュートリアルで説明します。 このチュートリアルでは、開発環境から運用環境にデータベース全体をデプロイすることに重点を置いています。
運用環境へのデータベースのデプロイ
このチュートリアルの残りの部分では、開発環境から運用環境にデータベースをデプロイする方法について説明します。 このチュートリアルに従う場合は、ご利用の Web ホスト プロバイダーのアカウントに Microsoft SQL Server データベースのサポートが含まれていることを確認する必要があります。 また、データベース サーバー名、データベース名、データベースへの接続に使用されるユーザー名とパスワードなどの情報も用意しておく必要があります。
このチュートリアルで前述したように、Book Reviews Web サイトのデータベースは、App_Data
フォルダーに保存されている SQL Server 2008 Express Edition データベースです。 このようなデータベースをデプロイするのは、App_Data
フォルダーを開発環境から運用環境にコピーするのと同じくらい簡単です。 ただし、ほとんどの Web ホスト プロバイダーは、セキュリティ上の理由から、App_Data
フォルダー内でのデータベースのホスティングをサポートしていません。 代わりに、Web ホストは自身の環境内の SQL Server データベース サーバーのアカウントを提供します。 開発環境から運用環境にデータベースをデプロイするには、ご利用の Web ホストのデータベース サーバーにデータベースを登録する必要があります。
では、開発環境から運用環境にデータベースを移動するにはどうすればよいでしょうか。 これを実現するには、Web ホストが提供するサービスに応じて、いくつかの方法があります。 DiscountASP.NET などの一部のホストでは、データベースのバックアップまたは実際の .mdf
ファイルをご自分の Web サイトに FTP で転送し、コントロール パネルからバックアップ ファイルを復元するか、.mdf
ファイルを SQL Server データベース サーバーにアタッチできます。 このようなツールを使用すると、データベースのデプロイは、App_Data
フォルダーを運用環境にコピーし、コントロール パネル経由でそれをアタッチするだけと簡単です。 これはおそらく、データベースを初めて発行する場合の最も簡単で迅速な方法です。
もう 1 つの方法は、データベース発行ウィザードを使用することです。 データベース発行ウィザードは、データベースのスキーマ (テーブル、ストアド プロシージャ、ビュー、ユーザー定義関数など) を作成するための SQL コマンドと、必要に応じてテーブル内のデータを生成する Windows デスクトップ アプリケーションです。 その後、SQL Server Management Studio を介して Web ホスト プロバイダーのデータベース サーバーに接続し、このスクリプトを実行して運用環境でデータベースを複製できます。 さらに、ご利用の Web ホスト プロバイダーで Microsoft のデータベース発行サービスをサポートしている場合は、データベース発行ウィザードによって生成されたスクリプトをデータベース サーバーで自動的に実行することもできます。 データベース発行ウィザードによって、データベースのスキーマとデータを作成するスクリプトが生成されるため、Web ホスト プロバイダーがアップロードされた .mdf
ファイルの添付などの機能を提供しているかどうかに関係なく、そのスクリプトは機能します。
データベース発行ウィザードを使用してデータベース スキーマとデータを作成する SQL コマンドの生成
データベース発行ウィザードを使用して Book Reviews データベースを運用環境にデプロイする手順を説明します。 Visual Studio 2008 以降を使用している場合は、データベース発行ウィザードが既にインストールされています。
Visual Studio を開き、Reviews.mdf
データベースに移動します。 Visual Web Developer を使用している場合は、データベース エクスプローラーに移動します。Visual Studio を使用している場合は、サーバー エクスプローラーを使用します。 図 4 は、Visual Web Developer のデータベース エクスプローラーの Reviews.mdf
データベースを示しています。 図 4 に示すように、 Reviews.mdf
データベースは 4 つのテーブル、3 つのストアド プロシージャ、1 つのユーザー定義関数で構成されています。
図 4: データベース エクスプローラーまたはサーバー エクスプローラーでデータベースを見つけます (クリックするとフルサイズの画像が表示されます)
データベース名を右クリックし、コンテキスト メニューから [プロバイダーに発行] オプションを選択します。 これにより、データベース発行ウィザードが起動します (図 5 を参照)。 [次へ] をクリックして、スプラッシュ スクリーンの先に進みます。
図 5: データベース発行ウィザードのスプラッシュ スクリーン (クリックするとフルサイズの画像が表示されます)
ウィザードの 2 番目の画面には、データベース発行ウィザードからアクセスできるデータベースが一覧表示され、選択したデータベース内のすべてのオブジェクトをスクリプト化するか、スクリプト化するオブジェクトを選択するかを選べます。 適切なデータベースを選び、[選択したデータベース内にあるすべてのオブジェクトのスクリプトを作成する] オプションをオンのままにします。
Note
図 6 に示す画面で [次へ] をクリックすると、"このウィザードでスクリプトを作成できる種類のオブジェクトがデータベース databaseName にありません" というエラーが表示される場合は、データベース ファイルへのパスが長すぎないことを確認してください。 このエラーは、データベース ファイルへのパスが長すぎる場合に発生する可能性があります。
図 6: データベース発行ウィザードのスプラッシュ スクリーン (クリックするとフルサイズの画像が表示されます)
次の画面から、スクリプト ファイルを生成できます。または、Web ホストでサポートされている場合は、Web ホスト プロバイダーのデータベース サーバーにデータベースを直接発行できます。 図 7 に示すように、スクリプトを C:\REVIEWS.MDF.sql
ファイルに書き込んでいます。
図 7: データベースをファイルにスクリプト化するか、Web ホスト プロバイダーに直接発行する (クリックするとフルサイズの画像が表示されます)
後続の画面では、さまざまなスクリプト オプションの入力を求められます。 これらの既存のオブジェクトを削除するために、スクリプトに drop ステートメントを含めるかどうかを指定できます。 既定値は True で、データベースを初めてデプロイする場合はこれで問題ありません。 ターゲット データベースが SQL Server 2000、SQL Server 2005、SQL Server 2008 のいずれであるかを指定することもできます。 最後に、スキーマとデータ、データのみ、またはスキーマのみをスクリプト化するかを指定できます。 スキーマは、データベース オブジェクト、テーブル、ストアド プロシージャ、ビューなどのコレクションです。 データは、テーブル内に存在する情報です。
図 8 に示すように、既存のデータベース オブジェクトを削除し、SQL Server 2008 データベースのスクリプトを生成し、スキーマとデータの両方を発行するようにウィザードを構成しました。
図 8: 発行オプションを指定する (クリックするとフルサイズの画像が表示されます)
最後の 2 つの画面には、これから実行されるアクションの概要が表示され、次にスクリプトの状態が表示されます。 ウィザードを実行した結果、運用環境でデータベースを作成し、開発環境と同じデータを入力するために必要な SQL コマンドを含むスクリプト ファイルが作成されます。
運用環境データベースでの SQL コマンドの実行
これで、データベースとそのデータを作成するための SQL コマンドを含むスクリプトが作成されたので、あとは運用データベースでこのスクリプトを実行するだけです。 Web ホスト プロバイダーによっては、コントロール パネルにデータベースで実行する SQL コマンドを入力できるテキスト ボックスが用意されている場合があります。 スクリプト ファイルが非常に大きい場合、このオプションは機能しない可能性があります (たとえば、REVIEWS.MDF.sql
スクリプト ファイルのサイズが 425 KB を超える場合)。
SQL Server Management Studio (SSMS) を使用して運用データベース サーバーに直接接続することをお勧めします。 コンピューターに SQL Server の Express 以外のエディションがインストールされている場合は、SSMS が既にインストールされている可能性があります。 それ以外の場合は、SQL Server Management Studio Express Edition の無料コピーをダウンロードしてインストールできます。
SSMS を起動し、Web ホスト プロバイダーから提供された情報を使用して Web ホストのデータベース サーバーに接続します。
図 9: Web ホスト プロバイダーのデータベース サーバーに接続する (クリックするとフルサイズの画像が表示されます)
[データベース] タブを展開し、目的のデータベースを見つけます。 ツール バーの左上隅にある [新しいクエリ] ボタンをクリックし、データベース発行ウィザードで作成したスクリプト ファイルから SQL コマンドを貼り付け、[実行] ボタンをクリックして運用データベース サーバーでこれらのコマンドを実行します。 スクリプト ファイルが特に大きい場合は、コマンドの実行に数分かかることがあります。
図 10: Web ホスト プロバイダーのデータベース サーバーに接続する (クリックするとフルサイズの画像が表示されます)
以上で終了です。 この時点で、開発データベースは運用環境に複製されています。 SSMS でデータベースを更新すると、新しいデータベース オブジェクトが表示されます。 図 11 は、運用データベースのテーブル、ストアド プロシージャ、ユーザー定義関数を示しています。これらは開発データベースのものが反映されています。 また、データベース発行ウィザードにデータを発行するように指示したため、運用データベースのテーブルには、ウィザードの実行時に開発データベースのテーブルと同じデータが含まれています。 図 12 は、運用データベース上の Books
テーブル内のデータを示しています。
図 11: データベース オブジェクトが運用データベースに複製されました (クリックするとフルサイズの画像が表示されます)
図 12: 運用データベースには、開発データベースと同じデータが含まれています (クリックするとフルサイズの画像が表示されます)
この時点では、開発データベースを運用環境にデプロイしただけです。 Web アプリケーション自体のデプロイについてはまだ検討しておらず、運用環境のアプリケーションで運用データベースを使用するために必要な構成変更についてもまだ確認していません。 これらの問題については、次のチュートリアルで説明します。
まとめ
データ ドリブン Web アプリケーションをデプロイするには、開発中に使用したデータベースを運用環境にコピーする必要があります。 多くの Web ホスト プロバイダーは、データベースをデプロイするプロセスを簡略化するためのツールを提供しています。 たとえば、DiscountASP.NET では、データベース .mdf
ファイル (またはバックアップ) を FTP で転送し、コントロール パネルからデータベースをデータベース サーバーにアタッチできます。 Web ホスト プロバイダーが提供する機能に関係なく機能するもう 1 つのオプションは、Microsoft のデータベース発行ウィザード ツールです。このツールは、開発データベースのスキーマとデータを作成するための SQL コマンドのスクリプトを生成します。 このスクリプトが生成されたら、運用データベースで実行できます。
これで、Book Reviews Web アプリケーションのデータベースが運用環境に配置されたため、アプリケーションをデプロイできます。 ただし、Web アプリケーションの構成情報では、データベースへの接続文字列が指定されており、その接続文字列は開発データベースを参照しています。 サイトを運用環境にデプロイするときに、この接続文字列情報を更新する必要があります。 次のチュートリアルでは、これらの構成の違いを確認し、データドリブンの Book Reviews サイトを運用環境に発行するために必要な手順について説明します。
プログラミングに満足!
もっと読む
このチュートリアルで説明したトピックの詳細については、次のリソースを参照してください。