инструмент командной строки flyway - какой вариант для повторного выполнения неудачного DDL? - PullRequest
2 голосов
/ 18 августа 2011

Я успешно запустил миграцию v1 с таблицей создания DDL. Я скопировал то же самое в файл v2 и запустил - получил ожидаемое сообщение об ошибке проверки:

Миграция до версии 1.0.002 com.googlecode.flyway.core.exception.FlywayException: ошибка при выполнении оператора в строке 1: создать таблицу people (id номер (10) первичный ключ, имя varchar2 (301)) Вызвано java.sql.SQLSyntaxErrorException: ORA-00955: имя уже используется n существующий объект MigrationException: миграция на версию 1.0.002 не удалась! Пожалуйста, восстановите резервные копии и откатить базу данных и код

Я исправил файл v2 и снова запустил миграцию. Возвращение сообщения об ошибке

Текущая версия схемы: 1.0.002 MigrationException: миграция на версию 1.0.002 не удалась! Пожалуйста, восстановите резервные копии и откатить базу данных и код

Я не на этапе, когда делается резервное копирование базы данных - просто пытаюсь выполнить фиксированный DDL. В настоящее время я не вижу решения, за исключением чистого пути. Почему flyway не может снова попытаться выполнить FAILED версии (если контрольная сумма изменилась)? Или там не должно быть команды отката с пролета?

Я знаю, что могу очень хорошо изменить код, чтобы сделать его таким, но была ли какая-то причина, по которой вы выбрали его так?

1 Ответ

2 голосов
/ 20 августа 2011

Проблема с простым повторным вычислением состоит в том, что некоторые изменения уже могут быть применены , что приведет к переходу на fail .

Для этого есть два решения:

  • Использование базы данных, поддерживающей транзакции DDL , такой как PostgreSQL, SQLServer или DB2
  • Выполните ручную очистку модифицированных структур и таблицы метаданных перед повторным применением
...