Лучшие практики для обновления структуры БД без потери каких-либо данных - PullRequest
3 голосов
/ 20 апреля 2011

Я и напарник разрабатываем веб-приложение для нашей компании.SQL Server 2005 используется для сохранения данных.Поскольку приложение продолжает развиваться, любое последнее стабильное обновление будет развернуто в производственной среде.В нашей компании нет отдельных администраторов баз данных и инструментов SQL Comparator.

Мой способ обновления базы данных в производственном приложении до последней версии - это разделение процесса на:

  1. Создание новой базы данных в соответствии со всеми СОЗДАНИЯМИ СКРИПТОВ

  2. Миграция данных путем репликации и / или преобразования

  3. Тестирование с новым экземпляром

  4. Замена

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

Итак, пожалуйста, посоветуйте, пожалуйста, что будет лучше?или лучше?

ps у нас нет бюджета на покупку необходимых для лицензии инструментов.

Спасибо!

Уильям

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

Во-первых, код базы данных, как и любой другой код, должен быть написан в сценарии и помещен в систему контроля версий.Таким образом, вы знаете, какой код должен быть передан с какой версией приложения, которое вы продвигаете (и может быть легко связан с ним).В конце концов, у вас могут быть изменения, которые вы не готовы подтолкнуть в prod, поскольку соответствующий код приложения еще не готов.

Ни при каких обстоятельствах нельзя изменять базу данных с помощью графического интерфейса, вносить изменения только с использованием сценариев, находящихся в системе контроля версий.

Как только у вас есть данные, все изменения в таблицах следует выполнять с помощью alterТаблица.Если вы не можете использовать alter table для чего-либо (например, добавление поля идентификатора после факта), тогда вы пишете сценарий для создания таблицы с небольшим другим именем в структуре, которую вы хотите, скопировать данные из старой таблицы, отброситьстарый стол и переименуйте новый.Конечно, вам также придется удалять и воссоздавать индексы, ограничения, триггеры и т. Д., Если они есть в таблице.К счастью, большинство изменений могут быть сделаны с помощью таблицы alter.) Если вам нужно создать новое поле, которое не может иметь значение null, то вы используете alter table, чтобы написать новое поле со значением по умолчанию, или таблицу alter, чтобы добавить поле, допускающее нули., напишите обновления, чтобы заполнить поле существующими данными, а затем напишите другую таблицу изменения, чтобы поле не было нулевым.

0 голосов
/ 20 апреля 2011

Если это возможно, я рекомендую использовать SSIS. Главное преимущество в том, что вы можете динамически менять имя базы данных на требуемое. В других случаях вам необходимо динамически создавать оператор SQL. Второй вопрос - обработка ошибок. Если у вас есть ошибка в скрипте схемы (структуре), вы не должны продолжать. Если у вас есть ошибка в скрипте вставки данных, вы должны обрабатывать построчно и откатывать только транзакции, содержащие ошибки. Вы можете реализовать это с помощью ForEachLoop в SSIS. Только один вопрос к подготовке данных для построчной обработки. Вот почему я рекомендую не использовать «стандартный» скрипт из SSMO, а использовать другой контейнер данных, например, XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...