2016-11-17 11 views
1

FlyWayは複数のデータベースを処理していますが、独立したデータベースのようです。私が理解しているように、FlyWayはインスタンスごとに1つのデータベースしか扱えないので、データベーススキーマの作成/クリーニングは完全に独立しています。相互依存データベースを使用したFlyWay

Multiple datasources migrations using Flyway in a Spring Boot application

私たちの問題は、おそらく悪いDB設計から茎が、それはそれが何であるかであり、それはすぐに変更されることはありません。バックグラウンドに関しては、これはMSSql DBを使用したC#の古い学校のアプリケーションで、現在は評価の目的でFlyWayコマンドラインを使用しています。

DBはこのように設定されています。

  • AppDB
  • AppLogDB
  • AppAuditDB
  • AppArchiveDB
  • ...

Iは、他のテーブルを参照AppDB、ビュー/手順/等を有している例を有しています。他のDBがAppDBにアクセスするケースもあります(IE ArchiveDBストアドプロシージャはAppDBから引き出されます)。

このような異なるデータベース間の依存関係は、とにかくFlyWayが必要な順にマイグレーション/クリーン処理を行うことができますか?例えば

私はスクリプト

  • の順AppDBをお持ちの場合は
    1. V1__Create_table
    2. V2__Create_proc_pointing_to_ArchiveDB
  • ArchiveDB
    1. V1__Create_table
    2. V2__Create_proc_pointing_to_AppDb

どのようにこれは、よりこの

  • のようにそれを処理するために再行うことができるAppDB、ArchiveDB
    1. V1__AppDB_Create_table
    2. V2__ArchiveDB_Create_table
    3. V3__AppDB_Create_proc_pointing_to_ArchiveDB
    4. V4__ArchiveDB_Create_proc_pointing_to_AppDb

答えて

0

これは特に、円形の依存関係を持っているあなたのArchiveDBと、トリッキーな問題になることがあります。

私が取り組んでいるプロジェクトでも同様の設定があります。実際にはOracleデータベース内では異なるスキーマですが、各スキーマごとに別々のschema_version表を保持するように選択しました(情報表示を管理しやすくするため)。私たちが使用するアプローチは、依存関係の支配的な順序でディレクトリを番号付けし、その順番で確実に適用することです。

10_AppDB 
20_AppLogDB 
30_AppAuditDB 
40_AppArchiveDB 

循環依存関係は、クリーン環境に正しく適用できるかどうかを確認するためにもう少し作業が必要です。幸いにも私たちはこれに遭遇しませんでしたが、これは将来変わる可能性があります。私が示唆しているアプローチは、オブジェクトが必要な順序で作成されるように、配置をずらすことです(ターゲットオプション/プロパティーをmigrateで使用する)。次に、新しい環境でゼロから作成する場合は、すべてのデータベースにわたって最初の統合ポイントに適用し、次にすべてのデータベースに適用する必要があります。あなたの例に基づいて構築する:

# run flyway -target 2 for all DBs 
10_AppDB___/V1__AppDB_Create_table 
20_AppLogDB/V2__ArchiveDB_Create_table 
# run flyway -target 4 for all DBs 
10_AppDB___/V3__AppDB_Create_proc_pointing_to_ArchiveDB 
20_AppLogDB/V4__ArchiveDB_Create_proc_pointing_to_AppDb 
関連する問題