2015-05-13 14 views
25

Wir verwenden Liquibase 3.2 mit Java 6. Kann ich Liquibase dazu zwingen, Prüfsummen neu zu berechnen, ohne dieselben Anweisungen aus unseren Liquibase-Dateien erneut auszuführen? In unserer Datenbank ich diese laufen ...Wie kann ich Liquibase zwingen, Prüfsummen neu zu berechnen, ohne die Anweisungen erneut auszuführen?

update DATABASECHANGELOG set md5sum = null where 1; 

Allerdings, wenn ich meine Liquibase Change Scripts ausführen, noch bestimmte Ausführungen mit den folgenden Fehlern fehlschlagen ...

invoking liquibase change script with file /tmp/deploywork/db.changelog-master.xml 
running /usr/java/liquibase/liquibase --logLevel=info --driver=com.mysql.jdbc.Driver --classpath=/usr/java/jboss/modules/com/mysql/main/mysql-connector-java-5.1.22-bin.jar --changeLogFile=/tmp/deploywork/db.changelog-master.xml --url="jdbc:mysql://myservername:3306/my_db" --username=username --password=password update 
INFO 5/13/15 2:15 PM: liquibase: Successfully acquired change log lock 
INFO 5/13/15 2:15 PM: liquibase: Reading from my_db.DATABASECHANGELOG 
INFO 5/13/15 2:15 PM: liquibase: Successfully released change log lock 
Unexpected error running Liquibase: Validation Failed: 
    3 change sets check sum 
      db.changelog-1.0.xml::1357593229391-25::rob (generated) is now: 7:5cfe9ecd779a71b6287ef2360a6979bf 
      db.changelog-7.0.xml::create-address-email-index::davea is now: 7:da0132e30ebd6a1bc52d9a39bb8c56d7 
      db.changelog-7.0.xml::add-myproject-event-object-id-col::davea is now: 7:2eab5d784647ce33ef3488aa8c383443 


SEVERE 5/13/15 2:15 PM: liquibase: Validation Failed: 
    3 change sets check sum 
      db.changelog-1.0.xml::1357593229391-25::rob (generated) is now: 7:5cfe9ecd779a71b6287ef2360a6979bf 
      db.changelog-7.0.xml::create-address-email-index::davea is now: 7:da0132e30ebd6a1bc52d9a39bb8c56d7 
      db.changelog-7.0.xml::add-myproject-event-object-id-col::davea is now: 7:2eab5d784647ce33ef3488aa8c383443 

liquibase.exception.ValidationFailedException: Validation Failed: 
    3 change sets check sum 
      db.changelog-1.0.xml::1357593229391-25::rob (generated) is now: 7:5cfe9ecd779a71b6287ef2360a6979bf 
      db.changelog-7.0.xml::create-address-email-index::davea is now: 7:da0132e30ebd6a1bc52d9a39bb8c56d7 
      db.changelog-7.0.xml::add-myproject-event-object-id-col::davea is now: 7:2eab5d784647ce33ef3488aa8c383443 

    at liquibase.changelog.DatabaseChangeLog.validate(DatabaseChangeLog.java:181) 
    at liquibase.Liquibase.update(Liquibase.java:191) 
    at liquibase.Liquibase.update(Liquibase.java:174) 
    at liquibase.integration.commandline.Main.doMigration(Main.java:997) 
    at liquibase.integration.commandline.Main.run(Main.java:170) 
    at liquibase.integration.commandline.Main.main(Main.java:89) 

Hier ist einer der Änderung setzt, dass das Skript über beschwert ...

<changeSet author="davea" id="add-myproject-event-object-id-col"> 
     <addColumn tableName="sb_myproject_event"> 
      <column name="OBJECT_ID" type="VARCHAR(32)"/> 
     </addColumn> 
     <createIndex indexName="SB_myproject_EVENT_IDX" 
      tableName="sb_myproject_event" 
      unique="false"> 
      <column name="OBJECT_ID" type="varchar(32)" /> 
     </createIndex> 
     <sql>update sb_myproject_event set object_id=LEFT(SUBSTRING_INDEX(event_data, '&quot;id&quot;:&quot;', -2), 24) where object_id is null and event_data is not null;</sql> 
     <!-- Delete older events that no longer need to be processed --> 
     <sql>delete from sb_myproject_event where id not in (select q.* from (select e.id FROM sb_myproject_event e, (select object_id, max(date_processed) d from sb_myproject_event group by object_id) o where e.object_id = o.object_id and e.date_processed = o.d) q);</sql> 
    </changeSet> 

Wie gesagt, ich will nur Prüfsummen neu berechnet werden (müssen dies tun, weil wir Liquibase-Versionen sind zu ändern).

Antwort

42

Anstatt die Prüfsummen Clearing selbst SQL verwendet, wird es wahrscheinlich besser sein Liquibase tun zu lassen, dass der clearCheckSums Befehl unter Verwendung:

http://www.liquibase.org/documentation/command_line.html

aktuelle Prüfsummen aus der Datenbank entfernt. Beim nächsten Lauf werden Prüfsummen neu berechnet.  

+2

Hallo, habe ich „--clearCheckSums“ in den Befehl oben aufgeführten, bekam aber den Fehler, „severe 5/14/15 15.09: liquibase: Kann nicht‚--clearCheckSums‘analysiert“ –

+4

'clearCheckSums' ist ein Befehl (ähnlich wie update) und keine Option - es braucht nicht vorher' --'. – SteveDonie

+4

Datenbank aktualisierenchangelog set md5sum = null wo ID wie '% 62%'; –