質問
アプリケーションのバージョンを更新した後、本番DBでSQLスキーマを検証する方法を探しています。アプリケーションがDBスキーマバージョンと一致しない場合、ユーザーに警告し、必要な変更を一覧表示する方法が必要です。
それを行うための組み込み機能を備えた(プログラムで使用する)ツールまたはフレームワークはありますか? または、この比較を実行するための簡単なアルゴリズムはありますか?
更新:レッドゲートリスト" from $ 395"。何か無料ですか?または、単にバージョン番号を保持するよりも簡単ですか?
解決
この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
他のヒント
お役に立てば幸いです。これは、私が読むことをお勧めする記事です。
T-SQL、SSMS、またはサードパーティのツールを使用して、SQL Serverスキーマの比較および同期プロセスを自動化する方法について説明します。
両方のデータベースのデータディクショナリ(sys.objects、sys.columnsなど)を調べて比較することにより、プログラムで実行できます。ただし、これを行う Redgate SQL Compare Pro などのツールもあります。君は。現在、私が現在取り組んでいるものを含めて、データウェアハウスシステムのQAのツールの一部としてこれを数回指定しました。私の現在のギグでは、DBAがすでに使用しているため、これはまったく問題ありませんでした。
これらのツールを使用するための基本的な方法論は、データベースを構築し、これをバージョン管理に保持する参照スクリプトを維持することです。スクリプトをスクラッチデータベースで実行し、ターゲットと比較して違いを確認します。気が向いた場合にもパッチスクリプトを生成します。
私が知る限り、あなたが自分で書いてみたいと思わない限り、これを行う自由なものはありません。 Redgateは十分に安価なので、無料である可能性もあります。実動DBが構成にないことを証明するQAツールとしても、1回のインシデント後に購入価格を節約することを意図していました。
SQL Admin Studio を無料で使用して、スキーマ比較、データ比較を実行し、変更を同期できるようになりました。ここからライセンスキーをダウンロードする必要がなくなりました http://www.simego.com/Products/ SQL-Admin-Studio
SQL Azureに対しても機能します。
[更新:はい、私は上記のプログラムの作成者です。現在は無料なので、コミュニティと共有したいだけです]
2つのデータベースを比較し、Red Gateが SQL比較
使用しているRDMBSについては言及しませんでした。RDBMSでINFORMATION SCHEMAビューが使用可能であり、同じホストから両方のスキーマを参照できる場合、INFORMATION SCHEMAビューを照会して、次の違いを識別できます。 -テーブル -列 -列タイプ -constraints(例:主キー、一意の制約、外部キーなど)
過去の仕事のために、SQL Server上でまさにこの目的で一連のクエリを作成しました-違いを特定するのにうまく機能しました。クエリの多くはLE NULL JOINとIS NULLを使用して予想されるアイテムが存在しないことを確認し、他のクエリは列タイプや制約名などを比較していました。
少し面倒ですが、可能です。
ほとんどのニーズに合ったこの小さくて無料のツールを見つけました。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html
これは非常に基本的なものですが、2つのデータベースのスキーマの違いを示しています。 違いをなくすために自動生成されたスクリプトのような派手なものはなく、データを比較しません。
スキーマの違いを示す小さな無料のユーティリティです:)
テーブルを作成し、そこにバージョン番号を保存します。必要に応じて更新してください。
CREATE TABLE version (
version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');
その後、データベースに保存されているバージョン番号が、アプリケーションのセットアップ中または都合の良い場所であればアプリケーションコードと一致するかどうかを確認できます。
これはどのRDBMSで、潜在的な変更はどの程度複雑ですか?
これは、各テーブルの行数とインデックス数を比較するだけの問題かもしれません-トリガーとストアドプロシージャのバージョンがある場合は、さらに工業的なものが必要です
dbForge Data Compare for SQL Server をお試しください。非常に大きなデータベースであっても、あらゆるデータベースを比較して同期できます。迅速、簡単、常に正しい結果を提供します。 データベースで試して、製品にコメントしてください。
SQL Serverデータベース内のテーブルデータの3倍の高速比較と同期を提供する信頼性の高いSQL比較ツールをお勧めします。 SQL Server用のdbForgeデータ比較です。
主な利点:
- 大規模データベースの比較と同期の高速化
- ネイティブSQL Serverバックアップのサポート
- テーブル、列、スキーマのカスタムマッピング
- 比較と同期を調整する複数のオプション
- 比較および同期レポートの生成
さらに、30日間の無料トライアルと30日間の返金保証付きのリスクのない購入。