2010-11-03 3 views
7

Nous ne versions de base de données qui sont constitués d'un groupe d'ensembles de changement et nos journaux de changement de base de données sont organisées de la façonLiquibase - Annulation d'un ensemble de changesets

MasterChangeLog.xml 

      ---> Release0001.XML 
        ---> AddCustomerTable.XML 
        ---> AddOrderTable.XML 

      ---> Release0002.XML 
        ---> AddNewColumnsToCustomerTable.XML 
        ---> AlterOrderTableXML 

      ---> Release0003.XML 
        ---> AddPreferedCustomerTable.XML 

suivant, je voudrais savoir comment je irait sur le retour d'un ensemble d'ensembles de changements. J'espérais que je pourrais utiliser tagDatabase avec le numéro de version (Release001, Release002 ou Release003) et juste revenir en arrière en utilisant le tag

Je m'attendrais à être en mesure de faire quelque chose comme ça si je voulais revenir à Release001

java -jar "liquibase.jar" --changeLogFile="MasterChangeLog.xml" Rollback "Release0002" 

Pourriez-vous me dire comment je vais travailler avec Liquibase?

Merci

Répondre

8

La commande que vous avez indiqué est valide si Release002 est une étiquette valide. Cependant, vous ne voulez probablement pas avoir besoin de guillemets autour de la balise Release0002. Lorsque vous annulez à l'aide d'une balise, liquibase démarre à la fin de vos changesets exécutés et annule chacun dans l'ordre inverse jusqu'à ce qu'il atteigne le changeset qui a été marqué auparavant.

Je ne suis pas sûr de votre description si c'est ce que vous voulez. Dans votre exemple, si vous avez étiqueté la base de données après l'exécution de Realease002.xml, l'exécution de "rollback Release0002" annulera tout dans Release0003. Si vous souhaitez annuler tout dans Release0002, vous devez exécuter "rollback Release0001" ou créer la balise Release0002 avant en exécutant les changesets Release0002. Quoi qu'il en soit, vous aurez réinitialisé Release0003 car il est apparu après Release0002. La raison pour laquelle liquibase ne prend pas en charge le choix et le changement de changesSets à annuler est parce qu'il y a souvent des dépendances entre les changesets parce qu'elles se construisent souvent les unes sur les autres, et donc annuler un groupe arbitraire de changements a souvent des conséquences inattendues.