2008-08-02 22 views
101

多くの場合、次の問題が発生します。データベース構造の変更のためのバージョン管理システムはありますか?

データベースの新しいテーブルや列を必要とするプロジェクトにいくつかの変更を加えます。私はデータベースの変更を行い、私の仕事を続けます。通常は、変更を書き留めてライブシステムに複製できるようにしておきます。しかし、私はいつも変わったことを覚えているわけではなく、いつも書き留めておくことを忘れているわけではありません。

だから、私はぐふ、ライブシステムへのプッシュをすると何NewColumnXがないことを大きな、明白なエラーが発生します。

この状況ではこれがベストプラクティスではないかもしれないという事実にかかわらず、データベース用のバージョン管理システムはありますか?私は特定のデータベース技術を気にしません。私はちょうど1つが存在するかどうか知りたい。それはMS SQL Serverで動作する場合は、素晴らしいです。

+0

[これはDBのバージョン管理に関する別の説明です。](http://stackoverflow.com/questions/173/how-do-i-version-my-ms-sql-database-in-svn) –

+0

[on-topic](https://stackoverflow.com/help/on-topic)ガイダンス」**いくつかの質問は、上のカテゴリのいずれかに該当する場合でも、まだ話題にはなりません:**書籍、ツール、ソフトウェアライブラリ、チュートリアル、その他のオフサイトリソース*をお勧めする*を求める*の質問は、オフトピックです... " –

答えて

55

migrationの概念があります - データベースを変更する簡単なスクリプトが。

あなたが(例えば、列の削除など)のバージョンをダウングレードする(このようなカラムの追加など)、DBのバージョンを増加し、ルールにルールを持つ移行ファイルを生成します。各移行には番号が付けられ、テーブルには現在のdbバージョンが記録されます。

に移行します。を移行するには、バージョンを確認して必要なスクリプトを適用するコマンド "db:migrate"を実行します。同様の方法で移行することができます。あなたは、新しいスクリプトで確認したデータベースを変更するたびに、あらゆる開発者が最新のバージョンに自分のローカルDBを持って、それを適用することができます -

移行スクリプト自体はバージョン管理システムに保管されています。

+2

これはRubyプロジェクトの選択肢です。 javaでこのデザインに最も近いのは、mybatisスキーマの移行です。 .NETの場合、同等のものはhttp://code.google.com/p/migratordotnetです。彼らはこの仕事のIMOのためのすべての優れたツールです。 –

9

ほとんどのデータベースエンジンは、データベースをファイルにダンプすることをサポートする必要があります。とにかく、MySQLはわかります。これはテキストファイルにすぎませんので、Subversionやその他のものにサブミットすることができます。ファイルの差分も簡単に実行できます。 Oracleの場合

+11

そうですが、SQLファイルを比較すると、 1つのリビジョンから別のリビジョンへのdev/prod db –

7

、私は個別のファイルの数(テーブルごと例えば、一つのファイル)にスキーマをダンプすることができToadを、使用しています。私はPerforceでこのコレクションを管理するスクリプトをいくつか持っていますが、私はそれがちょうどあらゆるリビジョン管理システムで簡単に実行可能であるべきだと思います。 Ruby on Railsには

5

「Ruckusing」と呼ばれるPHP5「データベース移行フレームワーク」があります。私はそれを使用していませんが、examplesは、あなたが必要に応じてデータベースを作成するために言語を使用する場合、ソースファイルを追跡する必要があるというアイデアを示しています。

6

私は、コードと並行してdbリリーススクリプトを書き、SSのプロジェクト固有のセクションにリリーススクリプトを保存します。 dbの変更が必要なコードを変更すると、リリーススクリプトも同時に更新されます。 リリースの前に、私はクリーンなdevのdb(生産から賢明な構造をコピーした)でリリーススクリプトを実行し、最終テストを行います。

7

あなたがのためにすべての変更を見つけることができますので、ちょうどより理想的に順次指定されたファイルを変更し、あるいは「変更セット」として、あなたの最初のバージョンのコントローラでは、CREATE TABLE文を持って、その後、ALTER TABLEステートメントを追加しますが、ファイルを編集することはありません特定の展開。

私が見ることができる最も困難な部分は、依存関係を追跡することです。たとえば、特定の展開テーブルBをテーブルAより前に更新する必要があるかもしれません。

1

テーブルの変更用のVCSがない場合、私はそれらをwikiに記録しています。少なくともそれがいつ、なぜそれが変更されたかを見ることができます。誰もがそれをやっているわけではないので、完璧ではありません。複数の製品バージョンが使用されていますが、何もありません。

7

oracleパッケージDBMS_METADATAを参照してください。

特に

、以下の方法が特に有用である:

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

あなたは、彼らが(かなり自明)の仕組みに精通しているたら、することができますそれらのメソッドの結果をソース管理下に置くことができるテキストファイルにダンプする簡単なスクリプトを書いてください。がんばろう!

MSSQLでこれが単純であるかどうかわかりません。

8

SQL Serverを使用している場合、Data Dude(Visual Studioのデータベース版)を倒すのは難しいでしょう。データベースのソース制御バージョンと本番バージョンのスキーマ比較を実行すると、そのスキルが失われます。クリックすると、差分DDLを生成することができます。

MSDNにはvideoという指示があり、非常に役に立ちます。

私はDBMS_METADATAとToadについて知っていますが、誰かがOracle用のデータ・デュードを考え出すことができれば、人生は本当に甘いでしょう。

6

私はこのことを何年も前から行ってきました。つまり、スキーマバージョンの管理(または管理)です。最適なアプローチは、あなたが持っているツールによって異なります。 Quest Softwareのツール "Schema Manager"を入手できる場合は、適切な形になります。 Oracleには、「Schema Manager」とも呼ばれる、それほど混乱しないツールがありますが、私はそれを推奨しません。

自動化されたツールがないと(ここでのデータデュードについての他のコメントを参照)、スクリプトとDDLファイルを直接使用します。アプローチを選んで文書化し、それに厳密に従います。私はいつでもデータベースを再作成する能力があるのが好きなので、データベース全体(DBAの場合)または開発者スキーマの完全なDDLエクスポートを希望します(もし私が製品の場合は開発モード)。

6

すべての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

5

ER Studioあなたはツールにデータベーススキーマを逆にすることができますし、あなたがして、データベースを生きるためにそれを比較することができます。

例:開発スキーマをER Studioに戻します。これを本番と比較すると、すべての相違点がリストされます。変更をスクリプト化することも、自動的に変更をプッシュすることもできます。

ER Studioにスキーマを作成したら、作成スクリプトを保存するか、プロプライエタリバイナリとして保存してバージョンコントロールに保存することができます。スキームの過去のバージョンに戻ってみたいと思ったら、それをチェックして、あなたのdbプラットフォームにプッシュしてください。

1

アンブラーとサダラージュの "リファクタリングデータベース"とアンブラーの "アジャイルデータベーステクニック"の2つの書籍の推奨事項。

誰かがRails Migrationsについて言及しました。私は彼らがRailsアプリケーションの外ですら大きく動作すると思います。私はRailsに移行中のSQL ServerをASPアプリケーションで使用しました。移行スクリプト自体をVCSにチェックインします。 ここにa post by Pragmatic Dave Thomasがあります。

1

2つの方法のいずれかをお勧めします。まず、SybaseのPowerDesignerに投資してください。エンタープライズ版。物理データモデルをデザインすることができます。しかし、それはあなたのモデルをチェックインできるリポジトリが付属しています。新しいチェックインは新しいバージョンにすることができます。それは、どのバージョンも他のバージョンと比較することができます。また、その時点でデータベースにあるものと比較することもできます。次に、すべての相違点のリストを表示し、移行する必要があるかどうかを尋ねます。次に、それを行うスクリプトを作成します。それは安くはないが、価格の2倍の値引きで、ROIは約6ヶ月です。

もう1つのアイデアは、DDL監査を有効にすることです(Oracleで動作します)。これにより、変更が行われるたびにテーブルが作成されます。最後にデータベースの変更をprodに移動したタイムスタンプから変更を照会すると、完了したすべてのリストが表示されます。いくつかのwhere節は、テーブルfooの作成のようにゼロサムの変更を排除するための節です。続いてドロップテーブルfooが表示されます。 modスクリプトを簡単に構築することができます。なぜwikiに変更を残して、それは仕事の倍増です。データベースがあなたのためにそれらを追跡するようにしてください。

2

MS Team System Database Editionを使用しました。 TFSのバージョンコントロールとVisual Studioをシームレスに統合し、保存されたprocsやビューなどを簡単に管理することができます。競合解消には苦労する可能性がありますが、バージョン履歴は完了すると完了します。その後、QAへの移行と生産は非常に簡単です。

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

28

私は、データベースを作成するためのソースファイルを使用することで、私は、少し古い学校です。実際には、project-database.sqlとproject-updates.sqlの2つのファイルがあります。最初はスキーマと永続データ、2番目は変更です。もちろん、どちらもソース管理下にあります。 、私は最初のプロジェクト-database.sqlにの主なスキーマを更新すると、データベースの変更

、その後、例えばALTER TABLEステートメント、プロジェクトupdates.sqlに関連する情報をコピーします。 私は開発データベースに更新を適用し、テストし、うまくいくまで繰り返すことができます。 その後、ファイルをチェックインし、再度テストし、本番環境に適用します。コンフィグ - -

また、私は通常デシベルでテーブルを持っているよう:

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はどのくらい表示されますかdbはベースラインから外れています。

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

10

SQL deltaを強くお勧めします。私はちょうど私の機能をコーディングし、私のソース管理ツール(Mercurial :)にそれらのスクリプトをチェックしているときにdiffスクリプトを生成するために使用します。

彼らはSQLサーバー&オラクルバージョンを持っています。

2

Oracle用のSchema Compareは、Oracleデータベースの変更を別のデータベースに移行するために特別に設計されたツールです。ダウンロードリンクについては、以下のURLを参照してください。ここで、完全に機能する試用版ソフトウェアを使用することができます。

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

10

は、私は誰もがJavaベースで、JDBCをサポートし、ほぼすべてのデータベースのために働く必要があり、オープンソースのツールliquibaseを言及していないということだろう。レールと比較すると、スキーマの変更を行うためにルビの代わりにxmlが使用されます。私は、ドメイン固有言語のXMLを嫌いますが、XMLの非常にクールな利点は、あなたがあなた自身の

ピュアのSQLこれを処理する必要はありませんバック

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

のような特定の操作をロールバックする方法をLiquiBaseを知っているということですステートメントやデータのインポートもサポートされています。

+0

私たちはliquibaseを使用していますが、異なる情報に対して3つの異なるアプローチを使用しています: 1.構造(テーブル、ビュー、...):履歴変更ログ 2.コード(プロシージャ、pl/sql、関数) runalways = true runonchange = trueのマーク付きのチェンジセット 3.テーブルに格納されている他のメタ「定数」:コードと同じアプローチ、チェンジセットは1つだけ、削除する、すべての情報を挿入 – Palesz

+0

Javaの場合、最近のhttps://flywaydb.orgを見てください - このサイトの機能比較も見てください – Karussell

11

​​(以前のiBatis)には、コマンドラインで使用するツールschema migrationがあります。それはどのプロジェクトでも使用できるが、Javaで書かれている。

データベースの変更管理を適切に行うには、いくつかの重要な目標を特定する必要があります。 (略しまたはMyBatisの移行) したがって、MyBatisのスキーマ移行システムはしよう:例えば、任意のデータベースと

  • 仕事、新しい又は
  • 活用を既存のソースコントロールシステム(Subversionの)
  • は、アクセス可能な簡単にデータベースの現在の状態を確認します)それぞれ委譲、独立
  • 前後移動(進化のために許可競合が非常に目に見えるし、容易に管理できるように動作するように、同時開発者やチームを有効にしますどの方法論
  • と分かりやすい
  • アクセス権限や官僚にもかかわらず、移行を有効に
  • 仕事が良い、一貫性の慣行を奨励
11

RedgateにはSQL Source Controlという製品があります。 TFS、SVN、SourceGear Vault、Vault Pro、Mercurial、Perforce、Gitと統合されています。

3

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

関連する問題