3

私たちの SQL Server 2000 インスタンスは、クライアントごとに 1 つずつ、すべて類似した複数のデータベースをホストしています。それらをすべて更新するときが来たら、Red Gate SQL Compare を使用して、開発データベースとすべてのクライアント データベースの現在の状態 DB のコピーとの間の移行スクリプトを生成します。

SQL Compare はトランザクションのスクリプトを生成します。1 つのステップが失敗すると、スクリプトはすべてをロールバックします。しかし現在、私たちのシステムでは、スクリプトをバッチ セパレータ ( GO ステートメント) で分割し、各コマンドを個別に実行する方法を使用しています。これにより、すべてのトランザクションが台無しになります。プログラミングによってデータベースを照会する場合、GOステートメントはサポートされません (クラシック ASP)。

ツールでプログラムまたは手動で、これらすべてのデータベース (250 DB など) でそのスクリプトを実行する (トランザクションを保持する) 方法を知りたいですか? Query Analyzerでは、各 DB を選択してRunを押す必要がありますが、これは DB の数に対して非常に長い時間です。

4

5 に答える 5

5

SQL 2005または2008のSSMSを使用できる場合は、無料のSSMSツールパックをお勧めします

于 2009-09-22T19:19:55.103 に答える
3

外部のsqlcmd コマンド ライン ツールを使用しています。私が働いているサーバーでも同じ状況があります。

*.sql ファイルにスクリプトがあり、2 番目のファイルにデータベースのリストがあります。すべてのデータベースを反復処理し、sqlcmdコマンドを使用してスクリプトを実行する小さな *.bat スクリプトがあります。

詳細については、次のようにしています。

  • スクリプトを展開するすべてのデータベースを含む DB.ini ファイル
  • すべてのスクリプトを保存する sql/ ディレクトリ
  • runIt.bat - スクリプトをデプロイするスクリプト

コマンド ラインは、次のようになります。

sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -d <database_name> -T

SQL Server 2000 ではosql ユーティリティでした

アップデート

Red Gate にはSQL Multi Scriptと呼ばれるツールが追加されました。SQL 2000 から 2008 R2 をサポートし、複数のデータベースでクエリを並行して実行して、パフォーマンスを向上させます。

于 2009-09-22T19:09:32.613 に答える
1

7年後、私は同じ問題を何度も抱えていたので、それを作成してプロジェクトを公開しました:

たこデプロイ

ここにいくつかの機能があります:

  • 1 つのインスタンスからすべてのデータベースを取得し、名前フィルターを適用します。または、単一の直接接続のみ。
  • 必要なだけデータベース ソースを混在させます。たとえば、2 つの直接インスタンスと 1 つの完全なインスタンス (フィルターありまたはなし)。
  • スクリプト・エディター (Avalon Text、同じ monodevelop 使用)
  • スクリプトは実行前に解析され、エラーが検出されます。
  • スクリプトは GO ステートメントによって「分割」されます。
  • デプロイをファイルに保存する
  • 配置する前に、すべてのデータベースのリストを取得します。
  • 何が起こっているかをリアルタイムで確認してください (ここでは PRINT ステートメントをお勧めします!)。
  • エラーが発生した場合の独立したデータベースへの自動ロールバック。
  • Squirrel による透過的な更新。

https://github.com/andreujuanc/TakoDeployで入手できます。

于 2016-10-12T00:32:17.183 に答える
0

思い出すと、SQL Compare でスクリプトを作成して、すべてを開始時の状態に戻すこともできます。両方を生成することもできます。

この種の展開を行ったとき (かなり時間が経ちました)、最初にスクリプトが prod で動作することを確認する前に、prod とまったく同じように作成されたステージング サーバーにロードしました。何かが失敗した場合 (通常、スクリプトが実行された順序が原因で、たとえば、まだ存在しないテーブルに外部キーを設定できません)。また、最初にすべてのテーブルの変更、次にすべてのビューの変更、すべての UDF の変更、すべてのストアド プロシージャの変更をスクリプト化しました。これにより、オブジェクトがまだ存在しないことによる障害が大幅に削減されましたが、通常、調整が必要なオブジェクトがいくつかありました。

于 2009-09-22T19:40:37.067 に答える
0

これが機能するかどうかはわかりませんが、GO ステートメントをセミコロンに置き換えて、ステートメント全体を 1 つのバッチで実行してみてください。

于 2009-09-22T19:00:17.217 に答える