3

展開スクリプトを変更してliquibaseを使用しますが、別の意見を持ちたい、またはその適切な解決策を知りたいという問題が発生し始めています。

私たちは Oracle を使用しており、パッケージ、関数、プロシージャ、トリガーなど、多くのレガシー コードがあります (ご覧のとおり、データベースには多くのロジックがあります)。

次の構造を使用しています。

.
..
packages
functions
triggers
baseline 
S1301
S1302
S1312
xxx-changelog.xml

xx-changelog.xmlは次のようになります。

<include file="baseline/xxx-baseline-changelog.xml" relativeToChangelogFile="true" />

<!- Sprint change logs -->
<include file="S1304/xxx-s1304-changelog.xml" relativeToChangelogFile="true" />
<include file="S1308/xxx-s1308-changelog.xml" relativeToChangelogFile="true"/>
<include file="S1309/xxx-s1309-changelog.xml" relativeToChangelogFile="true"/>  
<include file="S1310/xxx-s1310-changelog.xml" relativeToChangelogFile="true"/>
<include file="S1311/xxx-s1311-changelog.xml" relativeToChangelogFile="true"/>

毎回新しいフォルダーにファイルをコピーしたくないので、同じファイルを指しています。内容を変更しているので、 runOnChangeプロパティを設定する必要があります。これを行わないと失敗するからです。 .

問題は、私たちはアジャイルで作業しており、3 週間ごとに新しいコードを提供することです。1 つのスプリントで 1 つのパッケージを変更する必要があり、次のスプリントで同じパッケージを変更する必要がある場合があります。

私の状況は次のとおりです。

1) スプリントごとに新しい changeSet を追加し、たとえば runOnchange を使用して、packages フォルダー内のファイルを指すようにすると、内容が異なり、runOnchange であるため、これらのファイルを指すすべての changeSet が実行されます (私が欲しい)。しかし、スプリントの変化を知り、これを追跡する唯一の方法です。

xxx-s1311-changelog.xml

<changeSet id="XXX_SEND_TO_PP_PCK_S1311" author="e-ballo" runOnChange="true">
     <sqlFile path="../packages/XXX_SEND_TO_PP_PCK.pkb" splitStatements="false" relativeToChangelogFile="true"/>
</changeSet>

xxx-s1312-changelog.xml

<changeSet id="XXX_SEND_TO_PP_PCK_S1312" author="e-ballo" runOnChange="true">
     <sqlFile path="../packages/XXX_SEND_TO_PP_PCK.pkb" splitStatements="false" relativeToChangelogFile="true"/>
</changeSet>

2) パッケージ専用のファイル ( packages-changelog.xml ) を作成し、プロパティ runOnChange を使用してパッケージの changeSet を追加すると、ファイルが変更されるたびに実行されますが、いつ変更されるかを知ることができません。私たちはそれを変更します。

おそらく最善の解決策は、スプリントのフォルダーにファイル (パッケージ) をコピーすることですが、ファイルの履歴を SVN に保持し、変更ログでスプリントの新しい変更を明確に把握したいと考えています。 .

私の質問:

liquibase でハッシュマップを無効にする方法があるかどうか知っていますか? その後、すべてのスプリントに追加してトラックを持つことができます..そして、IDがすでにデータベースにある場合、再度実行するべきではありませんか?

前もって感謝します、

4

1 に答える 1

1

私はこれが古いことを知っており、将来それに出くわす人のために答えます.

いいえ、チェックサムは Liquibase の動作にかなり根付いています。これを行う正しい方法は runOnChange です。問題は、変更ログをより細かくする必要があることです。注意: 変更ログには他の変更ログを含めることができます。

スプリントごとに新しい changeSet を追加し、たとえば runOnchange を使用して、packages フォルダー内のファイルを指すようにすると、これらのファイルを指しているすべての changeSet が実行されます。 )。しかし、スプリントの変化を知り、これを追跡する唯一の方法です。

あなたのプロジェクト構造は良好です。あとは一歩踏み出すだけです。package/function/trigger/etc をインストールするための実際の変更ログをこれらのディレクトリの一部にします:

.
├── functions
│   ├── my_function_changelog.xml
│   └── sql
│       └── my_function.sql
├── packages
│   ├── my_package_changelog.xml
│   └── sql
│       └── my_package.sql
└── triggers
    ├── my_trigger_changelog.xml
    └── sql
        └── my_trigger.sql

次に、リリースに1つを含める必要がある場合は、毎回新しい変更セットを定義する代わりに、その静的な変更ログを含めます(これは、Liquibaseを混乱させることがわかりました):

<include file="../packages/my_package_changelog.xml" relativeToChangelogFile="true" />

これで、不要なパッケージを誤って再インストールすることなく、各スプリントで行ったことを追跡できます。

于 2015-05-04T12:41:14.490 に答える