2017-01-11 7 views
0

Liquibaseを使用してロールバックする際の詳細な手順についてはわかりません。ロールバック中にLiquibaseが従うすべてのステップは?

私は6つのチェンジのようなシナリオを持っていたし、1つのチェンジのロールバック用に定義されていませんでした - つまり、唯一<rollback/>チェンジ中。

deployITを用いて実行した後、私はDatabasechangelog表7エントリ、追加6、deployITのタグ作成による使用のための1つを見ることができます。

ロールバックした後、私は6つのチェンジの一つが空のロールバックタグを持っていたにも関わらず、すべての新しく追加された6つのチェンジを除去する行動を見ました。

どうか専門家に教えてください。ロールバックの正確な動作は何ですか?

全体的に、Databasechangelogのレコードが削除されたことを知りたいですか?

+0

1つのチェンジセットに<ロールバックタグ>が含まれていない場合のliquibaseロールバックの予想される動作は失敗します。 このdeployITコメントは、下にliquibaseを使用するツールですか? liquibaseコマンドを使用してロールバックを実行しようとしましたか?ex:liquibase rollbackCount 3 – kothvandir

答えて

2

ロールバックを実行すると、liquibaseはロールバックするchangeSetsを見つけて、それぞれの説明で<rollback>タグをチェックして、changeSetをロールバックします。

<rollback>タグがない場合、Liquibaseはチェンジセットの変更に自身をロールバックする方法のロジックが組み込まれているかどうかをチェックします。 gileが指摘しているように、変更を取り消すための十分な情報があれば(createTableの変更にテーブルを削除するために必要なテーブル名があるように)、ロールバックすることができます。

変更に十分な情報がない場合(dropTableにテーブルの再作成に必要な情報がない場合など)、ロールバックコマンドは「ロールバックできません」というエラーで失敗します。

ので、ロールバック・ロジックは次のとおりです。ロールバックするのに十分な情報がない場合

  1. を使用しませんロールバック・ブロック場合はブロック
  2. で定義されているもの、
  3. を必要とされているものを推測してみてくださいLiquiBaseをは喜んであなたのノーオペレーションのロールバックの共同を実行しますので、あなたは空のロールバック・ブロックを指定した場合、あなたは「このバックをロールするために必要なロジックは何もしないことである」LiquiBaseをを言っているバック

を圧延する前に、終了changeSetをロールバックしてマークします。

+0

ロールバックを実行した後にLiquibaseがrollbackタグを空にしたチェンジセットを削除すると、riteを怖がらせる必要はありませんか?ロールバックするアクションとしての前述のスクリプト?儀式?あなたのお時間をありがとう。 –

+0

はい、createTableのように自動ロールバックできるものにロールバックが空の場合、databasechangelogエントリは削除され、他の変更は行われません。 –

0

ご変更セットによっては、あなたがLiquibase Rollback documentation用として、自動的に生成されたロールバックコマンドを持つ文の場合に該当することができる。

、このような「テーブルの作成」などの多くのリファクタリングは、「列の名前を変更」、および「追加 列 "は自動的にロールバック文を作成できます。変更 ログにこのカテゴリに該当する文のみが含まれている場合は、 ロールバックコマンドが自動的に生成されます。

「ドロップテーブル」や「データを挿入」などの他のリファクタリングでは、対応するロールバックコマンドは自動的に生成されません。 デフォルトの ロールバックコマンドをオーバーライドする場合は、 のchangeSetタグ内のロールバックコマンドを指定できます。 に何もしたくない場合は、ロールバックモードの変更を取り消すには、空のタグを使用します。

http://forum.liquibase.org/topic/understanding-rollbackには、詳細やその他のリンクがあります。

関連する問題