データベース構造の変更のためのバージョン管理システムはありますか?

StackOverflow https://stackoverflow.com/questions/308

質問

私はよく次の問題に遭遇します。

データベース内の新しいテーブルまたは列を必要とするプロジェクトへの変更に取り組んでいます。データベースを変更して作業を続けます。通常、ライブ システム上で複製できるように、変更内容を忘れずに書き留めます。ただし、何を変更したかを常に覚えているわけではありませんし、それを書き留めることも常に覚えているわけではありません。

したがって、ライブシステムにプッシュすると、システムが存在しないという大きな明白なエラーが発生します。 NewColumnX, 、うーん。

この状況ではこれがベストプラクティスではないかもしれないという事実に関係なく、データベースのバージョン管理システムはありますか?特定のデータベーステクノロジーには興味がありません。存在するかどうか知りたいだけです。MS SQL Server で動作するのであれば、それは素晴らしいことです。

役に立ちましたか?

解決

Ruby on Rails には、 移住 -- データベースを変更するための簡単なスクリプト。

移行ファイルを生成します。このファイルには、データベースのバージョンを上げるルール (列の追加など) とバージョンをダウングレードするルール (列の削除など) が含まれています。各移行には番号が付けられ、テーブルで現在の DB バージョンが追跡されます。

上に移行する, では、「db:merge」というコマンドを実行して、バージョンを確認し、必要なスクリプトを適用します。同様の方法で下に移行できます。

移行スクリプト自体はバージョン管理システムに保存されます。データベースを変更するたびに新しいスクリプトをチェックインし、開発者はそれを適用してローカル データベースを最新バージョンにすることができます。

他のヒント

私はデータベースの作成にソース ファイルを使用するという点で、少し古い考えを持っています。実際には、project-database.sql と project-updates.sql という 2 つのファイルがあります。1 つ目はスキーマと永続データ用で、2 つ目は変更用です。もちろん、どちらもソース管理下にあります。

データベースが変更されると、まず project-database.sql 内のメイン スキーマを更新し、次に ALTER TABLE ステートメントなどの関連情報を project-updates.sql にコピーします。その後、更新を開発データベースに適用し、テストを繰り返し、うまくいくまで繰り返します。次に、ファイルをチェックインし、再度テストして、運用環境に適用します。

また、通常、データベース - Config - に次のようなテーブルがあります。

SQL

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

次に、更新セクションに次の内容を追加します。

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

db_version データベースが再作成される場合にのみ変更されます。 db_revision データベースがベースラインからどれだけ離れているかを示します。

更新を個別のファイルに保存することもできましたが、すべてをマッシュし、カットアンドペーストを使用して関連するセクションを抽出することにしました。もう少しハウスキーピングが必要です。つまり、$Revision 1.1 $ から ':' を削除して凍結します。

マイバティス (旧 iBatis) には、 スキーマの移行, コマンドラインで使用するツール。Java で書かれていますが、どのプロジェクトでも使用できます。

データベース変更管理を適切に実践するには、いくつかの重要な目標を特定する必要があります。したがって、MyBatis Schema Migration System (略して MyBatis Migrations) は次のことを目指しています。

  • 新規または既存のデータベースを操作する
  • ソース管理システムを活用します (例:転覆)
  • 同時開発者またはチームが独立して作業できるようにする
  • 競合を非常に可視化し、容易に管理できるようにする
  • 前方および後方への移行を可能にする (それぞれ進化、デボルブ)
  • データベースの現在のステータスを簡単にアクセスして理解できるようにする
  • アクセス権限や官僚主義にもかかわらず移行を可能にする
  • あらゆる方法論を使用して作業する
  • 適切で一貫した実践を奨励する

Redgate には という製品があります。 SQLソース管理. 。TFS、SVN、SourceGear Vault、Vault Pro、Mercurial、Perforce、Git と統合されます。

強くお勧めします SQLデルタ. 。機能のコーディングが完了したときに差分スクリプトを生成し、それらのスクリプトをソース管理ツールにチェックインするためにこれを使用するだけです (Mercurial :))

SQL サーバーと Oracle の両方のバージョンがあります。

オープンソース ツールについて誰も言及しなかったのが不思議です リキベース これは Java ベースであり、jdbc をサポートするほぼすべてのデータベースで動作します。Rails と比較すると、Ruby の代わりに XML を使用してスキーマの変更を実行します。私はドメイン固有言語の XML は嫌いですが、XML の非常に優れた利点は、liquibase が次のような特定の操作をロールバックする方法を知っていることです。

<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

したがって、これを自分で処理する必要はありません

純粋な SQL ステートメントやデータのインポートもサポートされています。

ほとんどのデータベース エンジンは、データベースのファイルへのダンプをサポートしている必要があります。とにかく、MySQL がそうであることは知っています。これは単なるテキスト ファイルなので、Subversion などに送信できます。ファイルの差分を実行するのも簡単です。

SQL Server を使用している場合、Data Dude (別名 Visual Studio のデータベース版) に勝るのは難しいでしょう。コツを掴めば、データベースのソース管理バージョンと実稼働バージョンの間でスキーマ比較を行うのは簡単です。クリックするだけで diff DDL を生成できます。

指導があります ビデオ MSDN では非常に役に立ちます。

DBMS_METADATA と Toad については知っていますが、誰かが Oracle 用の Data Dude を思いつくことができれば、人生は本当に楽しいものになるでしょう。

バージョン コントローラーで最初の create table ステートメントを作成し、次に alter table ステートメントを追加します。ただし、ファイルは編集せず、理想的には連続した名前、または「変更セット」として名前を付けたファイルを追加するだけで、特定のデプロイメントのすべての変更を見つけることができます。

私が知る限り最も難しい部分は、依存関係を追跡することです。たとえば、特定のデプロイメントでは、テーブル A の前にテーブル B を更新する必要がある可能性があります。

オラクルの場合は、 ヒキガエル, 、スキーマを多数の個別のファイル (テーブルごとに 1 つのファイルなど) にダンプできます。Perforce でこのコレクションを管理するスクリプトがいくつかありますが、ほぼすべてのリビジョン管理システムで簡単に実行できるはずだと思います。

Oracle パッケージ DBMS_METADATA を見てください。

特に、次の方法が特に役立ちます。

  • DBMS_METADATA.GET_DDL
  • DBMS_METADATA.SET_TRANSFORM_PARAM
  • DBMS_METADATA.GET_GRANTED_DDL

それらがどのように機能するかを理解したら (か​​なり自明のことです)、これらのメソッドの結果をソース管理下に置くことができるテキスト ファイルにダンプする簡単なスクリプトを作成できます。幸運を!

MSSQL にこれほど単純なものがあるかどうかはわかりません。

私はコーディングと並行して DB リリース スクリプトを作成し、リリース スクリプトを SS のプロジェクト固有のセクションに保管します。データベースの変更が必要なコードを変更した場合は、同時にリリース スクリプトも更新します。リリース前に、クリーンな開発データベース (運用環境から構造的にコピーされたもの) でリリース スクリプトを実行し、それに対して最終テストを行います。

私はスキーマのバージョンを管理する (または管理しようとしている) という作業を何年も断続的に行ってきました。最適なアプローチは、使用しているツールによって異なります。Quest Software ツール「Schema Manager」を入手できれば、大丈夫です。Oracle には、「スキーマ マネージャー」(非常に紛らわしい?) とも呼ばれる独自の劣ったツールがありますが、これはお勧めしません。

自動化ツールがなければ (Data Dude に関する他のコメントを参照してください)、スクリプトと DDL ファイルを直接使用することになります。アプローチを選択し、文書化して、厳密に従ってください。私はデータベースをいつでも再作成できる機能が気に入っているので、データベース全体 (DBA の場合) または開発者スキーマ (製品担当者の場合) の完全な DDL エクスポートを好みます。 -開発モード)。

All Arround Automations のツールである PLSQL Developer には、Visual Source Safe で正常に動作する (ただし優れているわけではありません) リポジトリ用のプラグインがあります。

ウェブから:

バージョン コントロール プラグインは、PL/SQL Developer IDE >> と Microsoft SCC インターフェイス仕様をサポートするバージョン コントロール システムとの間の緊密な統合を提供します。>>これには、Microsoft Visual SourceSafe、>>Merant PVCS、MKS Source Integrity などの最も一般的なバージョン管理システムが含まれます。

http://www.allroundautomations.com/plsvcs.html

ERスタジオ を使用すると、データベース スキーマをツールに反転して、それをライブ データベースと比較できます。

例:開発スキーマを ER Studio に反転します。運用環境と比較すると、すべての違いがリストされます。変更をスクリプト化することも、自動的に変更をプッシュすることもできます。

ER Studio でスキーマを作成したら、作成スクリプトを保存することも、独自のバイナリとして保存してバージョン管理に保存することもできます。スキームの過去のバージョンに戻りたい場合は、それをチェックアウトしてデータベース プラットフォームにプッシュしてください。

Ruckusing と呼ばれる PHP5 の「データベース移行フレームワーク」があります。使ったことはありませんが、 アイデアを示してください。必要に応じて言語を使用してデータベースを作成する場合、ソース ファイルを追跡するだけで済みます。

使用できます Microsoft SQL Serverデータツール Visual Studio で SQL Server プロジェクトの一部としてデータベース オブジェクトのスクリプトを生成します。その後、Visual Studio に組み込まれているソース管理統合を使用して、スクリプトをソース管理に追加できます。また、SQL Server プロジェクトでは、コンパイラを使用してデータベース オブジェクトを検証し、既存のデータベースを更新したり、新しいデータベースを作成したりする展開スクリプトを生成することができます。

私たちが使用したのは MSチームシステムデータベース版 かなり良い成功を収めました。TFS バージョン管理および Visual Studio とほぼシームレスに統合され、ストアド プロシージャ、ビューなどを簡単に管理できるようになります。競合の解決は面倒な場合がありますが、それが完了するとバージョン履歴は完了します。その後、QA および運用環境への移行は非常に簡単です。

ただし、これはバージョン 1.0 製品であり、いくつかの問題がないわけではありません。

Schema Compare for Oracle は、Oracle データベースから別のデータベースに変更を移行するために特別に設計されたツールです。以下の URL にアクセスしてダウンロード リンクを入手すると、ソフトウェアを完全に機能する試用版として使用できるようになります。

http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm

テーブル変更用の VCS がない場合は、Wiki にログを記録しています。少なくとも、いつ、そしてなぜ変更されたのかがわかります。誰もがやっているわけではなく、複数の製品バージョンが使用されているため、完璧とは程遠いですが、何もしないよりはマシです。

2 つのアプローチのうちの 1 つをお勧めします。まず、投資するのは、 パワーデザイナー サイベースから。エンタープライズ版。これにより、物理データモデルなどを設計できるようになります。ただし、モデルをチェックインできるリポジトリが付属しています。新しいチェックインはそれぞれ新しいバージョンにすることができ、任意のバージョンを他のバージョンと比較したり、その時点でデータベースにあるものとさえ比較したりできます。次に、すべての違いのリストを表示し、どれを移行する必要があるかを尋ねます。そして、それを実行するためのスクリプトを構築します。安くはありませんが、2倍の価格でお買い得で、ROIは約6か月です。

もう 1 つのアイデアは、DDL 監査を有効にすることです (Oracle で機能します)。これにより、変更を加えるたびにテーブルが作成されます。データベースの変更を本番環境に最後に移動したタイムスタンプからの変更を今すぐクエリすると、これまでに行ったことすべての順序付きリストが得られます。create table foo のようなゼロサム変更を排除するためのいくつかの where 句。続いてテーブル foo をドロップします。MOD スクリプトを簡単に構築できます。変更を Wiki に保存する必要があるのは、作業が 2 倍になるからです。データベースにそれらを追跡させます。

お勧めの本 2 冊:Ambler と Sadalage 著の「Refactoring Databases」と Ambler 著の「Agile Database Techniques」。

誰かが Rails の移行について言及しました。Rails アプリケーション以外でもうまく機能すると思います。Rails への移行途中だった SQL Server を使用した ASP アプリケーションでこれらを使用しました。移行スクリプト自体を VCS にチェックインします。こちらです Pragmatic Dave Thomas による投稿 件名に。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top