3

私はVSスタジオを使用してasp.netWebアプリを開発してきました。SQLServerExpressを使用しています。開発中、サーバーでWebアプリをテストしてきました。

データベースを更新する必要があるたびに、(サーバー上にある)古いデータベースを削除して新しいDBをアップロードするだけです。私はテストしているだけで、アプリにはユーザーがいないので、問題はありません。

問題:

サイトが公開されると、DBに変更を加える方法がわかりません。明らかに、ユーザーデータが含まれているため、単純に削除することはできません。では、人々は通常、ライブDBをどのように更新するのでしょうか。つまり、私のサイトが稼働していて、DBにテーブルとストアドプロシージャを追加する必要があるとします。ライブサイトでこれを行うにはどうすればよいですか?

4

4 に答える 4

4

本番データベースに変更を加えるには、次のようにします。

  1. 影響を受けるユーザーの数が最も少ないときに停止をスケジュールし、ユーザーが事前に認識できるように情報を投稿してください。
  2. データ定義言語(DDL)スクリプトを使用してデータベーステーブルに変更を加え、場合によってはデータ操作言語(DML)スクリプトを使用して、既存のデータを変更に必要なものにマッサージします。

ステップ2に必要なスクリプトは、本番システムで発生する問題ができるだけ少ないことを確認するために、開発およびテスト/QA環境でテストされている必要があります。開発環境とテスト/QA環境の両方で、データベースを以前のバージョンのアプリケーションに復元できるバックアップが必要です。

于 2011-05-14T21:54:12.587 に答える
2

次のいずれかを行う必要があります。

  • 誰もサイトを使用しないときにデータベースを更新します。また
  • 更新がサイトの運用に影響を与えないことを確認してください。

2番目のオプションでは、NULL不可の新しい列に適切なデフォルトを設定し、すべてのINSERTステートメントで列リスト(例INSERT INTO dbo.MyTable (col1, col2, col3) VALUES (...))を使用し、新しいストアドプロシージャパラメーターにデフォルトを設定します。これは完全なリストではありませんが、良いスタートです。

于 2011-05-14T21:55:06.270 に答える
1

ほとんどの場合、変更がスクリプト化されて繰り返し可能なリリーススクリプトを作成します。だからあなたは次のようなものを見るでしょう

IF NOT EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_NAME = 'myTableName' 
           AND  COLUMN_NAME = 'myColumnName')
BEGIN
     ALTER TABLE myTableName
     ADD myColumnName varchar(50)
END

次のようなもので、どのオブジェクトが変更されたかを知ることができます。

SELECT
[name],
create_date,
modify_date
FROM sys.tables
ORDER BY
modify_date DESC

RedGateソフトウェアを使用して2つの異なるデータベースを比較する人もいますが、それにはコストがかかります。

于 2011-05-14T22:00:29.250 に答える
0

ライブデータベースに加えたい変更の種類によって異なります。

あなたの質問では、新しいテーブルとストアドプロシージャの追加についてのみ話します。新しいもの(テーブル、sproc、または既存のテーブルに新しい列)を追加
するだけである限り、SQL Serverはデータベースの使用中にこれを実行でき、変更は影響しないため、特別なことを行う必要はありません。アプリのバージョンが新しく追加されたものについてさえ知らないため、ユーザー。

一方、既存のものを変更したり削除したりすると、さらに複雑になります。
テーブルが予想と異なって見える場合、または存在しないテーブル/ sprocにアクセスしようとすると、アプリが機能しなくなる可能性があるため、これがアプリにとって重大な変更になる可能性が高くなります。
(最初に言ったように新しいものだけを追加したとしても、とにかくアプリを更新したいと思うでしょう。そうすれば、データベース内の新しいものを実際に使用できます)

そのため、データベースを変更し、アプリの新しいバージョンも同時にデプロイする必要があります。

私はASP.NETの専門家ではありませんが、私が知る限り、すべてのアクティブなユーザーが追い出されることなくASP.NETアプリを更新することはできません。
したがって、この場合、OMG Poniesがすでに言ったことを実行する必要があります。影響を受けるユーザーの数をできるだけ少なくするか、スケジュールされた停止について十分に早くユーザーに通知します。

于 2011-05-15T13:04:19.770 に答える