2017-10-18 4 views
0

私はスキーマ変更だけでタグ付けすることができましたが、ストアドプロシージャを混在させるとうまくいかないシナリオに遭遇しました。
Oracleデータベースに対してSQLの変更ログを使用しています。タグがrunOnChangeチェンジセットに適用された場合、タグへのロールバックは機能しません

リリース1.0.0
私はテーブルを作成する含まれているスクリプトR-1.0.0.sqlを持っている、とストアドプロシージャを作成するスクリプトのproc.sql:ここではシナリオです。 procチェンジセットには、runOnChange = trueというタグが付けられます。
Iが変更に満足して、そして最後にDATABASECHANGELOG表に示すIタグ1.0.0
とデータベースにタグを付ける:
1 - R-1.0.0.sqlに実行さ
2 - proc.sql- EXECUTED-(タグ)1.0.0

リリース2.0.0
私は列の名前を変更するスクリプトのR-2.0.0を持っている、と私はまた、新しいカラム名でproc.sqlを更新しました。これを実行した後、DATABASECHANGELOGは:
1 - R-1.0.0.sqlに実行さ
4 - proc.sql-RERAN-(タグ)1.0.0
3 - R-2.0.0.sqlに実行さ

あなたが再RAN procをスクリプトは新しい番号を持っていますが、今、私は1.0.0にタグをロールバックしたい場合は、それはまだ1.0.0タグ

を維持し、ロールバックコマンドは、タグので、何もしないことがわかり

1.0.0は、ログの最新の変更に対応します。

これは設計によるものです。この作業を行うために変更を整理する別の方法はありますか?

+0

このスレッドによれば、ストアドプロシージャのための異なる変更ログテーブルを指定できるはずです。 http://forum.liquibase.org/topic/configurable-databasechangelog-table-name。私はまだコマンドラインを理解しようとしています。 –

答えて

0

私は上記でリンクされた記事に基づいて解決策を見つけました。私の環境の制約のために、私はJava環境変数を渡す簡単な方法がありませんでした。私は、次の内容でカスタムバッチファイル(私はLiquiBaseを-sp.batそれを命名)をインストールすることになった:

@echo off 

IF NOT DEFINED JAVA_OPTS set JAVA_OPTS= 
set JAVA_OPTS=-Dliquibase.databaseChangeLogTableName=STOREDPROCCHANGELOG %JAVA_OPTS% 

liquibase %* 

をそれは、バッチファイルの受け渡しを呼び出し、その後、LiquiBaseをバッチファイルで使用する変数にパラメータを設定しますコマンドライン全体
私は "liquibase"を呼び出してスキーマの変更を適用し、 "liquibase-sp"を呼び出すことで保存されたprocの変更を適用します。スキーマの変更は、デフォルトのDATABASECHANGELOG表に記録され、procの変更は別のSTOREDPROCCHANGELOG表に記録されます。すべてのタグ付けは "liquibase"を呼び出して行われ、デフォルトのテーブルが使用され、スキーマの変更だけがバージョン付きのタグが付けられます。

ロールバックは、私が言及したシナリオで動作します。

変更を加えずにリリース2.0.0を使用すると、別の問題が発生することが予想されます。 2.0.0でデータベースにタグを付けると、最後のチェンジセットのタグが1.0.0から2.0.0に変更されます。これは、タグ1.0.0へのロールバックが失敗することを意味します。私は心配していませんが、これには手続き的な回避策があります。

関連する問題