web-dev-qa-db-fra.com

Dépassement de la somme de contrôle de migration Flyway 3.0

après la mise à jour du plugin Flyway Maven de la version 2.3 à la version 3.0, je reçois:

[ERREUR] Échec d'exécution du but org.flywaydb: flyway-maven-plugin: 3.0: migrer (default-cli) sur le projet xxx: org.flywaydb.core.api.FlywayException: la validation a échoué. A trouvé Différences entre les migrations appliquées et les migrations disponibles: Correspondance de somme de contrôle de migration pour la migration V003__data_feed_sources_locations.sql: DB = 942424992, Classpath = 1117634405 -> [Aide 1]

Vous avez une erreur similaire sur un autre projet.

Si je rétrograde à la version 2.3, la migration se déroule bien. Cela a-t-il quelque chose à voir avec un codage de plate-forme différent pour le calcul des sommes de contrôle?

Une solution de contournement, ou mieux encore, une solution appropriée?

41
bbcooper

Flyway 3.0 a remplacé la valeur par défaut de validateOnMigrate par true.

C’est toutefois une bonne chose, car dans l’esprit d’échec rapide, les erreurs sont découvertes plus tôt.

Dans votre cas, certains scripts ont changé depuis leur application, c'est ce que rapporte Flyway.

Vous avez deux options:

  • supprimez l'erreur en définissant validateOnMigrate sur false (comportement par défaut de 2.3)
  • invoquer Flyway.repair () pour réaligner les sommes de contrôle
73
Axel Fontaine

Pour ajouter à la réponse d'Axel Fontaine:

J'ai pu utiliser mvn flyway: repair mais je devais pointer la propriété flyway.locations config sur le dossier contenant mes scripts de migration de base de données. Sinon, le message "Réparation de la table de métadonnées xyz.schema_version n'est pas nécessaire. Aucune migration en échec n'a été détectée." comme d'autres personnes mentionnées.

J'ai utilisé mvn -Dflyway.locations=filesystem:<project dir>/src/main/resources/db/migrations flyway:repair et j'ai vu la somme de contrôle mise à jour dans la table de métadonnées, corrigeant mon problème.

14
tfendall

Le problème se produit juste après que j'ai changé le fichier ddl V1_2__books.sql. Il devrait y avoir un meilleur moyen de forcer flyway à reconnaître les nouveaux changements !!!

J'ai essayé d'exécuter mvn flyway: réparation mais cela n'a pas fonctionné, j'ai fini par modifier l'URL du schéma dans le fichier application.properties [datasource.flyway.url] en books2.

J'ai également supprimé les fichiers ci-dessous (livres est mon ancien nom de schéma) 

~ @~:rm books.mv.db 
~ @~:rm -r books.trace.db 
datasource.flyway.url=jdbc:h2:file:~/books2
datasource.flyway.username=sa
datasource.flyway.password=
datasource.flyway.driver-class-name=org.h2.Driver

J'ai couru l'application et BINGO :) 

2
Saif Masadeh

Tout d'abord, il recherche les modifications de la somme de contrôle. Ces modifications se produisent si nous mettons à jour des fichiers de migration qui sont déjà appliqués à une instance de base de données.

FlywayException : Échec de la validation: incohérence de la somme de contrôle de la migration pour la version de migration 18.2.6

-> appliqué à la base de données: 90181454

-> Résolu localement: 717386176

repair () method résoudrait le problème de la somme de contrôle en mettant à jour la table flyway_schema_history avec la valeur de la somme de contrôle locale.

Cependant, les instructions mises à jour dans le même fichier de migration seraient négligées. Ainsi, les nouvelles modifications dans le même fichier seraient négligées car il existe déjà une entrée pour la version dans flyway_schema_history table. La méthode setValidateOnMigrate () n'a aucun effet dans ce scénario. Nous devrions suivre une approche incrémentielle, les modifications de schéma devraient être fournies via de nouveaux fichiers.

1
Prashanth

J'ai trouvé que le moyen le plus simple de résoudre ce problème consistait à mettre à jour littéralement la somme de contrôle dans la table de schéma avec la valeur attendue pour le trajet aérien. Je savais pertinemment que mes fichiers de migration n'avaient pas changé et que l'état actuel de la base de données correspondait à ses besoins. Je ne voulais pas non plus perdre du temps à lire la documentation et à jouer avec Flyway.repair() ou d’autres méthodes qui pourraient potentiellement gâcher encore plus les choses. Une simple mise à jour de SQL l'a résolu tout de suite

1
aarbor

Je voulais juste ajouter que pour que la somme de contrôle soit mise à jour par réparation. Flyway doit avoir accès au répertoire où se trouvent toutes les migrations. Autrement, la voie de migration va juste à propos de ses affaires

"Réparation de la migration ayant échoué dans la table de métadonnées xyz.schema_version non nécessaire. Aucune migration ayant échoué n'a été détectée."

0
mfrancisy