1

大規模なエンタープライズ レベルの web ベースの asp.net/c# システムに取り組んでいる 5 人の開発者からなる小さな開発チームがあります。

ストアド プロシージャの作成と変更、新しいテーブルの作成、列の作成、レコードの挿入、レコードの更新などを含む多くのデータベースの更新を行います。

現在、すべての開発者は、すべての変更スクリプトを 1 つの大きな SQL 変更スクリプト ファイルに配置し、テスト環境と本番環境で実行しています。したがって、この単一のファイルには、ストアド プロシージャの変更、レコードの挿入、更新などが含まれます。1 ~ 2 か月ごとにテストまたは本番リリースを行うだけなので、ファイルは非常に長くなる可能性があります。

私が現在直面している問題はこれです:

この大きな「バッチ変更スクリプト」の任意の場所でスクリプト エラーが発生することがあります。たとえば、挿入が失敗したり、proc の変更が失敗したりする可能性があります。

これが発生すると、データベースでどの変更が成功し、どの変更が失敗したかを判断するのが非常に困難になります。

たとえば、1 つの変更が失敗した場合でも、スクリプト全体でコードが実行され続けることもあれば、実行が停止してそれ以上何も実行されないこともあります。

そのため、今日はprocsとrecordsを手動でチェックして、実際に機能したものと実際に機能しなかったものを確認することになりましたが、これは少し骨の折れる作業です.

この変更スクリプト全体を 1 つの大きなトランザクションにロールアップして、問題が発生した場合にすべての変更を元に戻すことができることを望んでいましたが、SQL サーバーのこのようなバッチ スクリプトではそれが可能ではないようです。

そのため、スクリプトを実行する前にデータベースのバックアップを試みたので、エラーが発生した場合はデータベースを復元し、問題を修正してから、修正したスクリプトを再実行できました。ただし、データベースを復元するには、データベースのミラーリングをオフにする必要があるため、これも完全に理想的ではありません。

私の質問は、本番データベースでバッチ スクリプトを実行する最も安全な方法は何ですか?

スクリプト全体をロールバックできるトランザクションにラップして、表示されていない方法はありますか?

個別のスクリプト ファイルを追跡して実行し、1 つのファイルが失敗した場合に、失敗したディレクトリにそれを押し込んで確認し、他のすべてのファイルを実行し続けることができるようにした方がよいでしょうか?

アドバイスと専門知識を求めています。

お時間をいただきありがとうございます。マット

4

1 に答える 1

2

バッチスクリプトは、最初にQCデータベースで実行して、本番環境の前にエラーが検出されるようにする必要があります。

QCデータベースは、本番環境と同一であるか、同一である可能性がある限り近いものである必要があります。

各スクリプトはエラーをトラップし、printステートメントを使用してエラーの場所とともにスクリプトの名前を報告する必要があります。本番環境に適用するときにエラーが発生した場合は、少なくともスクリプトの名前とエラーの場所がわかります。スクリプト内。

QCデータベースが同一または非常に近い場合、プロダクションエラーは非常にまれです。

于 2012-09-28T15:13:19.390 に答える