Как настроить RoundhousE на одноразовые скрипты, которые изменились из-за нормализации конца строки в git?
Я использую RoundhousE для управления миграцией базы данных, и из-за плохой устаревшей конфигурации git скрипты были настроены на git с несовместимыми окончаниями строк. Я хочу нормализовать эти окончания строк и, конечно, при этом RoundhousE обнаруживает изменения хеш-функции в этих файлах.
Я принимаю это как правильное поведение с точки зрения RoundhousE, но я не уверен в том, какой путь лучше исправить. Мы уже работаем с базой данных.
Я немного теряюсь в том, как лучше поступить, поэтому пока не проведено много исследований, и я рад обсудить их в комментариях с людьми, имеющими предыдущий опыт.
Опция 1
Сначала зафиксируйте скрипт UPDATE, который загружает таблицу хешей [RoundhousE].[ScriptsRun] в правильный хеш для новых одноразовых скриптов, которые были изменены. Затем передайте одноразовые скрипты. Мне действительно не нравится этот подход, он кажется грязным и хакерским.
3 ответа
Есть две опции командной строки, которые могут помочь: WarnOnOneTimeScriptChanges
в комбинации с Baseline
,
-w, --warnononetimescriptchanges | WarnOnOneTimeScriptChanges - поручает RH выполнять измененные одноразовые сценарии (DDL/DML в папке Up), которые ранее выполнялись для базы данных, а не для сбоя. Предупреждение регистрируется для каждого повторного запуска сценариев. По умолчанию false.
Эта опция будет выполнять ваши миграции, что, вероятно, не то, что вы хотите. Вот почему вы должны также указать --baseline.
--baseline | Базовая линия - это указывает RH создать вставку для своих таблиц записи, но не запускать что-либо для базы данных. Используйте эту опцию, если у вас уже есть скрипты, которые запускались другими способами (и ДО того, как вы запустите новые).
Я не пробовал этого, но эти два переключателя вместе должны записывать новые хэши скриптов, фактически ничего не выполняя.
Вы хотите использовать --warnandignoreononetimescriptchanges
WarnAndIgnoreOnOneTimeScriptChanges - указывает RH игнорировать и обновлять хэш измененных одноразовых скриптов (DDL/DML в папке Up), которые ранее выполнялись для базы данных, вместо сбоя. Предупреждение регистрируется для каждого повторного запуска одноразового сценария. По умолчанию - false.
Первый запуск даст следующий результат:
21-Apr-2020 22:23:52 2019-12-17_1100_SomeScript.sql is a one time script that has changed since it was run. build
21-Apr-2020 22:23:43 BASELINING: Recording 2019-12-17_1100_SomeScript.sql on 10.0.0.14,1433 - DATABASENAME.
При последующих запусках будет отображаться "Пропущено".
Хотя решение, задокументированное в других ответах, полностью правильное, часто бывает сложно запустить RoundhouseE с дополнительными флагами, если у вас есть конвейеры в облаке, выполняющие миграции. RoundhouseE отслеживает, какие сценарии он запускал, и сохраняет содержимое файла SQL и его хэш в таблице базы данных в
roundhouse
схема с именем
scriptsrun
. Поэтому, если вы удалите строку для рассматриваемого скрипта, RoundhouseE не узнает, что скрипт когда-либо запускался. Все, что вам нужно сделать, это:
- Подключиться к базе данных с помощью инструмента SQL
- Запустите следующую команду SQL, чтобы избавиться от записи:
delete from roundhouse.scriptsrun where script_name = 'my_script_name.sql';
- Примечание 1. Это решение не подходит для работы с производственными системами, но прекрасно работает в процессе разработки.
- Примечание 2: Если вы ранее запускали сценарий и удаляли запись RoundhouseE, вам рекомендуется отменить действия, выполняемые сценарием, чтобы избежать несоответствия состояния.