Упрощенный взгляд на ногу в нашем контроле исходного кода будет:
\DatabasePatches
\Core
\Data
\DatabaseSource
\Core
\SchemaA
\SchemaB
\SchemaC
DDL для определенной части работы написан и проверен под основными исправлениями с DML / миграцией, зарегистрированной под исправлениями данных. Часть метки патча представляет собой порядковый номер (вручную добавляйте 10 каждый раз, чтобы разрешить будущую вставку патчей между ними), поэтому патч может называться «DATAPATCH01530 - migrate of xyz.sql».
При развертывании в новой среде запускаются все основные исправления, а затем запускаются исправления данных. Если DML важен для следующей части основного патча, он может быть включен в этот основной патч.
Как только патч был запущен в новом месте, файл помечается как ФИНАЛЬНЫЙ в исходном контроле (мы используем PVCS и блокируем файл с именем пользователя ФИНАЛ), чтобы убедиться, что он не может быть изменен и вызвать несогласованность. Любые дополнительные изменения должны быть включены в отдельный патч.
Хранимые процедуры, функции, пакеты и т. Д. Сохраняются и регистрируются в разделе DatabaseSource. Вы не можете гарантировать, что эти объекты будут продвинуты до запуска сценариев, поэтому мы учитываем это, создавая заглушки в наших сценариях (например, представления будут создаваться как SELECT '1' FROM dual, пакеты будут содержать фиктивную процедуру), которые гарантируют объект существует и позволяет вам предоставлять привилегии и т. д. Когда фактический объект продвигается, он заменяет заглушку и сохраняет привилегии.