Изменения схемы SQL Server 2014 в многопользовательской среде 24/7

12

У нас установлен SQL Server 2014 Enterprise для запуска базы данных, которая должна быть доступна 24/7. Наша база данных достаточно велика (200 Гб +). Также у нас есть множество сервисов, которые ежеминутно попадают в нашу базу данных для чтения, обновления или вставки новых данных. Мы хотим предоставить нашим клиентам возможность «горячего» повторного развертывания и сделать наши ежедневные обновления (обновления .net и схемы) прозрачными для клиентов. Мы нашли решение, основанное на кластере с балансировщиком нагрузки, для обновления двоичных файлов нашего приложения, но у нас все еще есть некоторое недопонимание относительно процесса развертывания обновлений базы данных и каковы лучшие методы для решения этой проблемы.

Для изменений схемы отключите один сервер, примените изменения схемы, восстановите его, а затем примените те же изменения ко второму экземпляру. Можно ли это сделать с помощью инструментов SQL Server, и является ли это общим подходом? Как синхронизировать данные после резервного копирования сервера? Или я полностью думаю о неверном направлении и есть ли лучшие решения?

Наша общая схема изменений: добавить / удалить столбец, добавить / удалить хранимую процедуру

Шмитов Михаил
источник
Какой у вас текущий макет SQL? Кластерный? Всегда включен? Зеркальный? Единственный экземпляр?
LowlyDBA
В настоящее время у нас есть один экземпляр, но мы можем изменить его в соответствии с требованиями, добавить новый сервер и т. Д.
Шмитов Михаил
4
Вы должны следовать сине-зеленому подходу, таким образом, вы можете иметь живую систему (зеленую) и выполнить обновление на промежуточной стадии (синяя), а затем поменяться ролями. Это то, что мы реализовали, используя AlwaysON, и это работает для нас - почти такой же сценарий. Это требует правильного планирования, реализации и тестирования.
Кин Шах
Не могли бы вы дать мне более подробный сценарий, например, для изменения схемы удаления столбцов?
Шмитов Михаил
Объяснение предыдущего комментария: я переключил основной (S1) / дополнительный (S2) узлы в инфраструктуре AlwaysOn, затем я решил удалить некоторые столбцы из схемы на реплике (S1, это был основной до переключения), но я все еще могу получить некоторые данные репликации из S2 с этим столбцом в таблице .... как я могу решить эту проблему?
Шмитов Михаил

Ответы:

1

Ниже потребуется немного больше планирования и тестирования.


Сине-зеленая концепция:


Суть концепции Blue-Green состоит в том, чтобы разделить ваше производство на 2 среды, и они всегда одинаковы (синхронизация данных), где

  1. Blue (Current) будет иметь текущую версию схемы / сборки или продукта и будет вашей "LIVE" средой.

  2. В то же время Green будет вашей средой промежуточного тестирования / тестирования, в которой вы обновите схему / сборку или продукт до следующей версии, проведете полный регрессионный тест и получите одобрение ваших бизнес-пользователей. После того, как вы будете счастливы, в течение периода сокращения вы будете продвигать Green в качестве среды «LIVE» и понижать Blue до уровня подготовки / постановки или тестирования для следующего выпуска.

Таким образом, у вас будет намного меньше времени простоя, и риск сбоя развертывания в работающей системе (который находится в окне обслуживания, поскольку вы выполняете обновление) будет сведен к минимуму. Кроме того, следуя сине-зеленому подходу, вы будете колебаться между ЖИВОЙ и ПРЕДЫДУЩЕЙ версией, которая будет готовиться к следующей версии.

Опять же, это потребует больше оборудования / лицензирования, а также планирования и тестирования.

Большинство шагов можно автоматизировать с помощью DACPAC и PowerShell. Кроме того, если вы устанавливаете несколько экземпляров на одном сервере, убедитесь, что баланс памяти изменился при переключении между синим и зеленым. Среда LIVE получает больше памяти, чем среда Passive.

В моей нынешней среде мы внедрили модель Blue / Green для развертывания гибкого кода, которая позволяет нам продвигать код каждые 2 недели с достаточным количеством времени для тестирования и выхода из бизнеса. Кроме того, это откат на случай, если что-то пойдет не так. Мы автоматизировали большинство процессов развертывания, используя Dacpacs и PowerShell.

введите описание изображения здесь (Источник изображения)

Также обратитесь к статье Гранта Фричи о проблемах отката и восстановления; Проблемы и стратегии

Кин Шах
источник
0

Если ваша база данных не реплицируется, то добавление и удаление столбцов будет выполняться очень быстро. Потому что add column - это просто пустая позиция, которую создает SQL. Столбец Drop просто удалит ссылку.

В противном случае, если есть какое-то ограничение или индекс, будьте осторожны.

ADD/DELETEпроцедуры просто будут влиять на само выполнение. Рекомендация перед тем, как внести какие-либо изменения, выполнить перекомпиляцию.

sp_recompile 'myproc'
Krismorte
источник