Типичным советом перед любым производственным развертыванием является резервное копирование БД. Таким образом, если в новом обновлении есть какая-то проблема, которая может привести к потенциальной потере данных или логическому повреждению данных, у вас все еще есть резервная копия для сравнения и исправления старых записей.
Тем не менее, это может работать хорошо, пока размер БД не будет в нескольких ГБ. Когда размер БД огромен, резервное копирование занимает много времени. Каковы некоторые рекомендации, которые следует соблюдать в таких ситуациях, чтобы избежать логического повреждения данных из-за логических проблем при развертывании кода?
database
patterns-and-practices
Притам Бархате
источник
источник
Ответы:
Как человек, который регулярно занимался обновлением производственной базы данных для клиентов для наших обновлений программного обеспечения, я говорю вам, что лучший способ минимизировать ошибки - это делать обновления как можно более простыми.
Если вы можете внести изменения во все записи, а не в конкретные записи, это предпочтительно.
Другими словами, если вам предоставляется список идентификаторов записей, для которых необходимо изменить их состояние, вы должны спросить себя, почему обновление выполняется в контексте программы. Возможно, из 10 записей, которые необходимо обновить, таблица содержит только 10 элементов. Поэтому вы должны спросить себя, концептуально ли все, что вы делаете, это обновляет состояние всех записей.
Если вы можете вставить, это предпочтительно.
Акт добавления записи является автономным. Под этим я подразумеваю только один побочный эффект от добавления записи - это существование записи, которой раньше не было. Поэтому, если вы не добавляете запись, которой не должно быть, проблем не должно быть.
Если вы можете избежать удаления, это предпочтительно.
Если вы выполняете удаление, вы удаляете данные, которые в противном случае были бы невозможно восстановить без резервного копирования. Если возможно, попытайтесь организовать данные таким образом, чтобы можно было отключить записи, изменив их состояние, а не физически удалив запись. Избыток данных можно поместить в раздел или полностью удалить в более поздний момент, если вы уверены, что проблем нет.
Имейте последовательную политику обновления.
Если вам нужно обновить запись, может произойти одно из нескольких:
Вы должны иметь политику, чтобы определить курс действий, если что-то идет не так, как планировалось. Для простоты вы должны быть последовательными по всем направлениям и применять эту политику в любой ситуации такого типа, а не только для конкретных таблиц. Это облегчает возможность восстановления данных позже. Как правило, моя политика заключается в том, чтобы написать сценарий таким образом, чтобы иметь возможность выполнить его позже. В случае сбоя скрипта приятно знать, что вы можете внести коррективы и выполнить заново, однако вы можете выбрать собственную политику, которая подходит вам лучше всего.
Резервные копии
Это ни в коем случае не освобождает вас от выполнения резервного копирования перед выполнением любого обновления в производственной среде! Хотя даже с резервной копией, я считаю невозможным использовать резервную копию. Потеря данных не может быть возможной даже в худшем случае .
Вывод
Вы не всегда сможете сделать это по-своему. Схема таблицы вряд ли будет определяться вами, и поэтому она означает, что типы обновлений, которые вы можете ожидать, будут как сложными, так и рискованными. Хотя, если у вас есть какие-либо слова в этом вопросе, это помогает помнить эти моменты, поскольку они делают любые обновления прямо и без существенного риска.
Удачи!
источник
На этом этапе вы должны использовать систему БД коммерческого уровня, которая поддерживает моментальные снимки (оракулы называют это Flashback ) - это именно то, для чего они предназначены.
Имейте в виду, что вам все равно нужна концепция резервного копирования - наличие большего количества данных не означает, что вы удаляете резервные копии, потому что они становятся трудными, как раз наоборот. Вам нужно какое-то непрерывное резервное копирование, например, на основе репликации с автоматическим восстановлением после отказа.
источник
Это огромная область - так что ожидайте, что этот вопрос будет закрыт в довольно короткие сроки, но не в моей голове (как бывший администратор баз данных в базах данных yuge):
Mart / Repository
Вы можете уменьшить некоторый риск, если у вас есть отдельная база данных для обновлений и отдельная база данных, которую используют все. Тогда это всего лишь случай копирования данных из одной БД в другую после проведения различных проверок. Март / репозиторий, как это иногда описывается, но у вас может быть основной / дополнительный, главный / подчиненный и т. Д.
Исходный код
Для всего, что может измениться, есть исходный код, который относится к тому, как данные были обновлены. Сколько их у вас варьируется от БД к БД, но у вас может быть один для каждого пользователя, роли, канала данных, модуля кода и т. Д.
Дата создания / обновления
Когда вы отслеживаете, где что-то пошло не так, вам может помочь создание и обновление данных для каждой строки. Затем вы можете сразу увидеть, какие строки были обновлены.
ETL
Если обновление базы данных происходит как часть фабрики данных, вы можете восстановить предыдущий винтаж из плоских файлов.
Резервный
Полные резервные копии, конечно, занимают много места, но в обычном сценарии полное резервное копирование происходит через регулярные промежутки времени (например, еженедельно), а частичные - чаще (ежедневно и т. Д.).
Момент времени восстановления
В зависимости от того, какую СУБД вы используете, некоторые моменты поддержки могут быть восстановлены. Это позволяет вам вернуться к тому времени, когда было известно хорошее состояние. Однако для этого требуется большой объем памяти, который увеличивает то, насколько далеко вы хотите вернуться.
аудит
Наличие таблиц аудита скажет вам, кто (или что) сделал обновление строки. Это может дать вам хорошую отправную точку для расследования.
история
Для некоторых критических таблиц копия соответствующей строки берется во время обновления, поэтому данные могут быть восстановлены в случае необходимости.
Проверка данных
Убедитесь, что базовые проверки проверок данных выполняются до их сохранения - сверх проверок базовых типов данных.
Ссылочная целостность
Ссылочная целостность не является серебряной пулей, но она может помочь обеспечить правильную структуру данных.
источник
Много раз, если мы выполняем обновление «одним выстрелом», мы производим резервное копирование и восстанавливаем его на тестовом сервере. Затем мы создаем набор тестов и запускаем один выстрел. Мы проверяем, что данные изменились с помощью тестов, и нам стало удобно, что обновление пройдет успешно, и мы изменим данные так, как мы ожидаем. Это называется пробным или пробным прогоном. Я рекомендую это сделать.
Это дает всем хорошее чувство, что один выстрел будет успешным. Мы не можем гарантировать 100%, потому что данные будут обновлены с даты пробного запуска, но мы повышаем уверенность и факторы успеха. Это также дает реальное представление о любых проблемах, которые могут возникнуть, поскольку мы используем копию производства. Теперь, если по какой-то причине обновление завершается неудачно, мы всегда можем вернуться к повторному запуску до восстановления, если это необходимо, но мы должны были найти и устранить любые проблемы с пробным прогоном.
Если вы не можете взять всю базу данных (если она действительно большая), попробуйте экспортировать образец меньшего размера и запустить обновление (небольшой пробный прогон) для реальных данных. Я бы предпочел весь набор данных, если это возможно, чтобы тест был как можно более полным.
источник