既存の Oracle データベースがあります。ソース管理(Subversion)下に置きたい。私が知っている唯一の解決策は、'DROP/CREATE/INSERT' テキスト スクリプトを作成し、SVN に保存することです。
スキーマとデータを管理するためのより良い方法があるでしょうか? 私は Oracle SQL Developer を使用しており、移行/リポジトリ管理機能を見てきました。それらを使用する必要がありますか?そして、それらをどのように使用するのですか?
既存の Oracle データベースがあります。ソース管理(Subversion)下に置きたい。私が知っている唯一の解決策は、'DROP/CREATE/INSERT' テキスト スクリプトを作成し、SVN に保存することです。
スキーマとデータを管理するためのより良い方法があるでしょうか? 私は Oracle SQL Developer を使用しており、移行/リポジトリ管理機能を見てきました。それらを使用する必要がありますか?そして、それらをどのように使用するのですか?
免責事項:私はRed Gateで働いています
Source Control for Oracle は、既存のスキーマを Subversion にリンクできます (Windows のみ): http://www.red-gate.com/source-control-for-oracle/
これにより、CREATE ファイルのベースラインと、今後の変更をチェックインできます。また、ソース管理からスキーマに変更を適用し、変更を ALTER ステートメントとして処理して、テーブルを変更するときにデータを保持することもできます。これにより、サンドボックス環境を作成する開発者ごとにプライベート/専用スキーマをスピンアップすることもできます (チームで作業している場合)。
現在、ソース管理への静的/参照データの追加はサポートされていませんが、サポートする予定です。
ここであなたの質問に本当に答えているのか、それともランダムなものを吐き出しているだけなのかわかりません:)
まず最初に、私はデータをソース管理に入れることに強く反対しています。データベースはデータを維持する場所です。SCM を使用してオブジェクトの変更を追跡し、DB 内のアーカイブ戦略を使用してデータの変更を追跡します。
主に、デプロイがJenkins CIサーバーと統合されているため、SQL Developerのバージョン管理を使用していないため、すでに必要なことを正確に実行できる可能性があります。
コードを編成するには基本的な構造が必要であり、これは実際のデータベースにできるだけ近いものにする必要があると思います。
<database>
|_____<schema>
| |____<DDL>
| |____<DML>
| |____<PLSQL>
| |____<Indexes>
| |____<Constraints>
|____<schema>
...
上記は、Oracle 内の名前空間の境界を模倣しています。PLSQL オブジェクトと DDL オブジェクトは同じ名前空間を共有していますが、PLSQL にはビジネス ロジックがあるため、それらを分離しています。
これらのフォルダー内のすべてのオブジェクトを OBJECTNAME.TYPEEXTENSION の命名スキーマでホストし、(多かれ少なかれ) 標準化されたファイル拡張子を使用します。
Table .tbl
Package Spec .pks
Package Body .pkb
Trigger .trg
View .vw
...
私が見つけたこれらのスクリプトの内容は、展開ツールとオブジェクトの種類によって異なります。
これを念頭に置いて、これらのファイルに必要な構造を理解することができます。
現在、ツールは再実行可能性を処理できません。つまり、CREATE OR REPLACE オブジェクトがない場合、またはユーザー定義オブジェクト間に密接に結合された依存関係がある場合です。
これらの場合、システム テーブルをチェックして、たとえば、インデックスが追加されているかどうかを確認する PLSQL ブロックを作成する必要がありました。追加されている場合は、ツールがキャプチャし、破棄して次のスクリプトに移動することを認識している例外をスローします。
継続的インテグレーション中にデータベース内にデルタを適用することだけを考えているため、DROP/CREATE/INSERT スクリプトを使用しないのはそのためです。これにより、各変更を個別に追跡し、ロールバック ロジックを使用して特定のビルドに戻すことができます。
Subversion リポジトリから Oracle データベースに変更を配信する必要がある場合に、私のコマンド ライン ツールが役立つことを願っています。www.dbapply.comで試してみてください。
Windows と Linux の両方で動作します。一般的には、次のように使用します。
dbapply --paths <ローカル SVN リポジトリ> <ローカル SVN リポジトリ> ... --database <データベース接続文字列>
例:
dbapply --paths /space/svn/oracle/scripts --database scott/tiger@localhost/orcl
DbApply は、すべてのスクリプトを分析し、それらを並べ替え (依存エラーを回避するため)、実行します。
また、データベース スキーマにカップル テーブルを作成して、適用されたスクリプトのリビジョンを追跡します。DbApply を実行するたびに、リビジョンが比較され、変更されたスクリプトのみが適用されます。
さらに、SVN リポジトリのすべてのスクリプトをバッチまたはシェル コマンド ファイルにエクスポートできます。このコマンド ファイルは、SQL*Plus でのみ機能し、DbApply がインストールされていないサーバーで実行できます。
最後に、SQL コマンドで無視できるエラーのリストを指定できます。
/* ignore_error(955) */ CREATE TABLE a (n NUMBER);
このタイプの注釈を使用すると、スクリプトに「再実行可能性」を追加できます。何か問題が発生し、上記の例のテーブルが既に存在する場合、DbApply は「ORA-00955」エラーを無視し、他のスクリプトの処理を続行します。
このツールの以前のバージョンは、1 つの会社で数年間非常にうまく機能します。おそらく、あなたもそれが便利だと思うかもしれません。フィードバックをいただければ幸いです。
ありがとうございました!
oracle-ddl2svnを見てください- SVN に oracle DDL スキーマを自動保存するためのツールのセット。