15

アプリケーションのバージョンを更新した後、本番 DB で SQL スキーマを検証する方法を探しています。アプリケーションが DB スキーマのバージョンと一致しない場合、ユーザーに警告し、必要な変更を一覧表示する方法が必要です。

それを行うための組み込み機能を備えたツールまたはフレームワーク (プログラムで使用するため) はありますか? または、この比較を実行するための簡単なアルゴリズムはありますか?

更新:赤い門のリストは「395 ドルから」です。無料のものはありますか?または、バージョン番号を保持するよりも簡単ですか?

4

11 に答える 11

23

このSQLを試してください。
-各データベースに対して実行します。
-出力をテキストファイルに保存します。
-テキストファイルを差分します。

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 
于 2008-10-03T14:42:15.473 に答える
9

お役に立てれば幸いです - これは私が読むことをお勧めする記事です:

SQL Server データベース スキーマを自動的に比較する

T-SQL、SSMS、またはサード パーティ ツールを使用して、SQL Server スキーマの比較および同期プロセスを自動化する方法について説明します。

于 2014-02-04T09:08:34.340 に答える
8

両方のデータベースのデータ ディクショナリ (sys.objects、sys.columns など) を調べて比較することにより、プログラムで実行できます。ただし、これを行うRedgate SQL Compare Proのようなツールもあります。私はこれを、データ ウェアハウス システムの QA ツールの一部として、現在取り組んでいるものを含め、いくつかの機会に指定しました。私の現在のギグでは、ここの DBA がすでに使用していたので、これはまったく問題ありませんでした。

これらのツールを使用するための基本的な方法論は、データベースを構築する参照スクリプトを維持し、これをバージョン管理することです。スクリプトをスクラッチ データベースで実行し、ターゲットと比較して違いを確認します。必要に応じて、パッチ スクリプトも生成します。

私の知る限り、自分で書きたいと思わない限り、これを行う無料のものはありません。Redgate は十分に安価なので、無料でもかまいません。実稼働 DB が意図した構成にないことを証明する QA ツールとしても、1 つのインシデントの後で購入価格を節約できます。

于 2008-10-03T06:31:11.307 に答える
4

SQL Admin Studioを無料で使用して、スキーマ比較データ比較、および変更の同期を実行できるようになりました。ここからライセンス キーをダウンロードする必要はなくなりましたhttp://www.simego.com/Products/SQL-Admin-Studio

SQL Azure に対しても機能します。

[更新: はい、私は上記のプログラムの作成者です。今は無料なので、コミュニティと共有したかっただけです]

于 2011-07-11T14:02:57.507 に答える
1

2 つのデータベースを比較して違いを示すことができるツールを探しているなら、Red Gate はSQL 比較を行います

于 2008-10-03T02:30:43.523 に答える
1

私のニーズのほとんどに適合するこの小さくて無料のツールを見つけました。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

これは非常に基本的なものですが、2 つのデータベースのスキーマの違いを示しています。違いをなくすための自動生成されたスクリプトのような派手なものはなく、データを比較することもありません。

これは、スキーマの違いを示す小さな無料のユーティリティです:)

于 2011-12-01T09:01:57.900 に答える
1

使用している RDMBS について言及していませんでした。RDBMS で INFORMATION SCHEMA ビューが利用可能で、同じホストから両方のスキーマを参照できる場合は、INFORMATION SCHEMA ビューをクエリして、次の違いを特定できます。列 - 列タイプ - 制約 (主キー、一意の制約、外部キーなど)

過去の仕事で、SQL Server でまさにこの目的のために一連のクエリを作成しました。違いを特定するのにうまく機能しました。クエリの多くは、IS NULL を指定した LEFT JOIN を使用して、期待されるアイテムがないかどうかを確認していました。他のクエリは、列の型や制約名などを比較していました。

少し面倒ですが、可能です。

于 2008-10-03T18:40:57.537 に答える
0

Red Gate による SQL 比較

于 2008-10-03T02:30:19.297 に答える
0

dbForge Data Compare for SQL Server を試してください。非常に大きなデータベースであっても、あらゆるデータベースを比較および同期できます。迅速、簡単、常に正しい結果を提供します。データベースで試して、製品についてコメントしてください。

SQL Server データベース内のテーブル データの比較と同期を 3 倍高速化する、信頼性の高い SQL 比較ツールをお勧めします。これは、SQL Server 用の dbForge データ比較です。

主な利点:

  • 大規模データベースのより高速な比較と同期
  • ネイティブ SQL Server バックアップのサポート
  • テーブル、列、およびスキーマのカスタム マッピング
  • 比較と同期を調整する複数のオプション
  • 比較レポートと同期レポートの生成

さらに、30 日間の無料試用版と 30 日間の返金保証付きのリスクのない購入。

于 2010-04-09T11:22:18.003 に答える
0

これはどの RDBMS で、潜在的な変更はどの程度複雑ですか?

おそらく、これは各テーブルの行数とインデックス数を比較するだけの問題です-トリガーとストアドプロシージャのバージョンも心配する場合は、より工業的なものが必要です

于 2008-10-03T12:25:17.857 に答える
0

テーブルを作成し、そこにバージョン番号を保存します。必要に応じて更新してください。

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

次に、データベースに保存されているバージョン番号が、アプリのセットアップ中または都合のよい場所でアプリケーション コードと一致することを確認できます。

于 2008-10-03T02:16:29.267 に答える