2015-05-13 16 views
25

Chúng tôi đang sử dụng Liquibase 3.2 với Java 6. Có cách nào tôi có thể buộc Liquibase tính toán lại tổng kiểm tra mà không phải chạy lại các câu lệnh tương tự từ các tệp Liquibase của chúng tôi không? Trong cơ sở dữ liệu của chúng tôi, tôi chạy này ...Làm thế nào tôi có thể buộc Liquibase tính toán lại tổng kiểm tra mà không phải chạy lại các câu lệnh?

update DATABASECHANGELOG set md5sum = null where 1; 

Tuy nhiên, khi tôi chạy kịch bản thay đổi Liquibase của tôi, hành nhất định vẫn thất bại với các lỗi sau đây ...

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) 

Đây là một trong những thay đổi các tập lệnh mà tập lệnh đang khiếu nại về…

<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> 

Như tôi đã nói, tôi chỉ muốn tính lại tổng kiểm tra (phải làm điều này vì chúng tôi đang thay đổi phiên bản Liquibase).

Trả lời

42

Thay vì xóa checksums mình sử dụng SQL, nó có lẽ sẽ tốt hơn để cho Liquibase làm điều đó bằng cách sử dụng các clearCheckSums lệnh:

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

Loại bỏ checksums hiện từ cơ sở dữ liệu. Trên lần kiểm tra tiếp theo sẽ được tính toán lại.  

+2

Hi, tôi đã thêm "--clearCheckSums" vào lệnh liệt kê ở trên, nhưng đã nhận lỗi, "NGHIÊM TRỌNG 5/14/15 03:09: liquibase: Không thể phân tích '--clearCheckSums" –

+4

'clearCheckSums' là một lệnh (tương tự như cập nhật) và không phải là một tùy chọn - nó không cần' --' trước. – SteveDonie

+4

cập nhật databasechangelog set md5sum = null trong đó id như '% 62%'; –

Các vấn đề liên quan