テーブル定義の変更、新しいオブジェクト、パッケージの変更など、データベースに加えられた変更を追跡するために他の人が使用している方法を知りたい。外部バージョン管理システムでフラットファイルを使用していますか?トリガー?他のソフトウェア?
テーブル定義の変更、新しいオブジェクト、パッケージの変更など、データベースに加えられた変更を追跡するために他の人が使用している方法を知りたい。外部バージョン管理システムでフラットファイルを使用していますか?トリガー?他のソフトウェア?
回答:
私が働いたサイトでは、実稼働インスタンスに対して行う必要のある変更は、SQL * Plusで実行される変更スクリプトとしてスクリプト化する必要があります。さらに、すべてのスキーマオブジェクトを最初から再作成するために必要なスクリプトを最新の状態に保つ必要があります。これらのスクリプトはすべて変更管理にチェックインされ、そこから移行されます。
DDLの変更を監査するか、DDLトリガーを使用して変更を取得するか、diffソフトウェアを使用して2つのインスタンスを比較することもできますが、これらの方法は無差別です。多くの場合、開発者はスキーマにいくつかの変更を加えたり、元に戻したりします(たとえば、少しのテスト変更、概念をテストするためのダミーテーブルの作成など)。
私はこのトピックについて多くのことを考え、読みました。これは、構成制御と変更管理戦略の広範なトピックです。このトピックにはCMMIのドメインがあります。CMMI 3-5の認定を取得している企業でも、データベースをバージョン管理しない場合があります。
この質問は、制約に従うことを念頭に置いて回答する必要があります。
回答1
このアプローチは、6がある場合にうまく機能します。ソース管理にDDLステートメント(コードでもあります)を配置し、それを保守します。誰も十分に考慮せずにテストサーバーと運用サーバーを変更することはありません。
短所は、何らかの理由で運用サーバーまたはテストサーバーに変更を加えた場合、簡単なバグ修正、主キーの変更などです。その変更を開発サーバーにもロールする必要があります。実際には開発サーバーがあなたの地上の真実だからです。他の方法ではありません。
これは非常に開発者指向のアプローチです。しかし、新しいモジュールを最初に開発するときは、かなりうまく機能します。
回答2-1 と6が真の場合:
回答1への同様のアプローチは、開発サーバーの保守です。誰もがそれを使用して変更します。更新する時が来たときより。データベース比較ツールを使用します。これらをスクリプトとして取得し、ソース管理下に置きます。
- Red Gate Schema Compare supports Oracle
- Embercadero has similar tool
- https://github.com/carbonfive/db-migration
- http://www.sumsoftsolutions.com/svco/ (I have not used this product but I believe it belongs to this category.)
- Rails Active Migration (http://www.oracle.com/technetwork/articles/kern-rails-migrations-100756.html)
回答1と回答2の違いは、回答1では、データベース全体のDDLステートメントを収集して保存することです。回答2では、すべてのバージョンの変更を保存する必要があります。
列をテーブルに配置し、後で削除することにした場合。スクリプトはこれをanswer2に表示しますが、answer1には最後のバージョンのみが表示されます。そして、違いを確認するにはV2とV1を比較する必要があります。個人的には、Start 1とV3、V1、V3を簡単に比較できるので、回答1の方が好きです。answer2では、すべての変更を探す必要があります。また、回答2では、ソース管理のスクリプトはビッグバンで複雑なスクリプトになる傾向があります。情報を見つけるのは難しい。
回答3 3が真の場合。この状況では、制約6がないことに注意してください。つまり、開発、テスト、製品サーバーはありません。実稼働サーバーのみ。DDLトリガーを使用して、行われた変更を記録できます。これは主に、人々がDDL助成金を乱用するのを思いとどまらせるために使用されます。問題が発生した場合、責任を負うことができます。これが機能するためには、すべての人が自分のユーザーアカウントに接続し、アプリケーションアカウントにDDLの許可を与えないでください。すべての開発者がアプリケーションアカウントを知っており、使用できるためです。
回答4 3と5がある場合、この状況では制約6がないことに注意してください。つまり、開発、テスト、製品サーバーがありません。実稼働サーバーのみ。変更を保存するトリガーの代わりに。外部ツールを使用して変更を見つけ、ソース管理にDDLスクリプトを保存します。
これらのツールが変更を行った人を記録する機能を備えている場合、便利です。このソリューションでは、間隔を空けて行われる余分なDDLを失うことに注意してください。
11gデータベースにはSchema Version Controlを使用しましたが、11.2のソフトウェアにはいくつかの問題がありました。私たちがまだ取り組んでいる問題がなければ、素晴らしい製品になるでしょう。
以前はOracle SQL Designerを使用していましたが、これは(おそらく)SQL Developer Data Modelerに置き換えられました。http://www.oracle.com/technetwork/developer-tools/datamodeler/overview/index.html
それは非常に素晴らしかった、特に。列にドメインを設定し、共通の列(mtime、ctimeなど)を作成する時間を大幅に節約する機能。
私たちは、使用するOracle ddl2svn SVNでのOracle DDLスキーマの自動化を格納するための(私は著者の午前)ツールのセットを。
使用したことはありませんが、http://blog.gitora.com/は別のオプションです。