Каков ваш рабочий процесс для планирования миграции данных?

23

Так много раз меня приглашали в конце процесса разработки программного обеспечения, и мне говорили что-то вроде: «Хорошо, у нас есть весь этот новый код, и он требует изменения таблиц и перенос данных».

Кажется, что каждый раз, когда это единый сценарий, стреляющий из бедра, лучший вариант. Я чувствую, что это мой самый слабый навык DBA.

Я хотел бы получить некоторые шаблоны для подхода, управления и тестирования миграции данных .

Пожалуйста, объясните мне некоторые лучшие практики и / или где я могу получить учебные материалы, чтобы помочь мне стать лучше в этой области.

randomx
источник

Ответы:

14

Каждый раз, когда я это делал, мы проходили два прохода ...

  1. сделайте снимок и работайте на другом сервере, используйте его, чтобы определить, что нужно сделать для миграции, и запишите его.
  2. как только у них есть скрипт в руках, Snapshop восстанавливается в тестовой системе, и пора посмотреть, будет ли он работать в течение требуемого времени, или он будет настроен и изменен, пока не сможет.
  3. пусть заинтересованные стороны подпишут, что с данными в тестовой системе нет ничего плохого.

Затем на выходных у вас запланированное отключение:

  1. В пятницу вечером системы, использующие базу данных, вышли из строя, сделано полное холодное резервное копирование, и запущены сценарии для переноса / изменения / чего-либо в данные
  2. Системы восстанавливаются по какому-то частному адресу или как-то настраиваются, поэтому они никому не нужны, кроме заинтересованных лиц для приемочного тестирования
  3. Если заинтересованные стороны одобряют, система будет размещена в сети и обнародована; если нет, база данных восстанавливается из резервной копии, сделанной в пятницу вечером, и вы начинаете процесс заново.

В соответствии с нашим расписанием у сотрудников базы данных обычно было с 18:00 в пятницу до 10:00 в субботу для запуска сценариев резервного копирования и миграции, поэтому наша цель состояла в том, чтобы они выполнялись менее чем за 8 часов (~ 6 из них были резервными копиями), поэтому мы « У меня будет время для нашего тестирования и исправлений, прежде чем оно будет передано заинтересованным сторонам.

Заинтересованным сторонам заранее были предоставлены временные окна, поэтому они знали, что в начале окна они должны оставить свои выходные открытыми для тестирования. Им также сказали, что конец их окна, как правило, в воскресенье днем, где, если бы все не подписались, нам пришлось бы начать отступать.

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

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

Джо
источник
6

Все зависит от объема данных по сравнению с мощностью оборудования, которое поддерживает базу данных, и соглашениями о доступности системы. У вас случаются простои, или все это нужно делать в Интернете? Начните очищать данные, максимально стирая устаревшие строки. Это проект сам по себе. Если данные чистые и ценные, попросите пользователя принять решение о времени простоя. Если время простоя доступно, это довольно просто, если это известное преобразование, которое следует применить к существующим данным для формирования обновленной коллекции. Если нет или очень мало времени простоя, начинается испытание. Oracle поддерживает это несколькими способами, такими как переопределение онлайн-таблиц и - новое в 11g - переопределение на основе издания. С помощью переопределения онлайн-таблиц вы можете подготовить таблицы к принятию их новой формы. Это можно сделать, когда приложение работает в старой форме таблицы [s]. Если они все готовы, вы можете перейти к новой форме таблицы. Это также будет момент для представления нового кода приложения и в то же время отмечает начало времени простоя, необходимого для установки нового приложения. Старые исторические данные могут быть подготовлены до переноса живых данных и синхронизированы с помощью таких инструментов, как Oracle Golden Gate. В таком сценарии вы эффективно создаете новую базу данных, которая берет на себя роль старой базы данных. Переопределение на основе редакции лучше подходит, если не требуется никаких изменений в таблице. Есть множество вариантов для рассмотрения, и я думаю, что трудно дать хорошее правило, которое всегда работает. Это также будет момент для представления нового кода приложения и в то же время отмечает начало времени простоя, необходимого для установки нового приложения. Старые исторические данные могут быть подготовлены до переноса живых данных и синхронизированы с помощью таких инструментов, как Oracle Golden Gate. В таком сценарии вы эффективно создаете новую базу данных, которая берет на себя роль старой базы данных. Переопределение на основе редакции лучше подходит, если не требуется никаких изменений в таблице. Есть множество вариантов для рассмотрения, и я думаю, что трудно дать хорошее правило, которое всегда работает. Это также будет момент для представления нового кода приложения и в то же время отмечает начало времени простоя, необходимого для установки нового приложения. Старые исторические данные могут быть подготовлены до переноса живых данных и синхронизированы с помощью таких инструментов, как Oracle Golden Gate. В таком сценарии вы эффективно создаете новую базу данных, которая берет на себя роль старой базы данных. Переопределение на основе редакции лучше подходит, если не требуется никаких изменений в таблице. Есть множество вариантов для рассмотрения, и я думаю, что трудно дать хорошее правило, которое всегда работает. Старые исторические данные могут быть подготовлены до переноса живых данных и синхронизированы с помощью таких инструментов, как Oracle Golden Gate. В таком сценарии вы эффективно создаете новую базу данных, которая берет на себя роль старой базы данных. Переопределение на основе редакции лучше подходит, если не требуется никаких изменений в таблице. Есть множество вариантов для рассмотрения, и я думаю, что трудно дать хорошее правило, которое всегда работает. Старые исторические данные могут быть подготовлены до переноса живых данных и синхронизированы с помощью таких инструментов, как Oracle Golden Gate. В таком сценарии вы эффективно создаете новую базу данных, которая берет на себя роль старой базы данных. Переопределение на основе редакции лучше подходит, если не требуется никаких изменений в таблице. Есть множество вариантов для рассмотрения, и я думаю, что трудно дать хорошее правило, которое всегда работает.

Это интересная тема, Рональд.

ik_zelf
источник
5

Хорошие ответы до сих пор. Я добавлю еще пару пунктов для рассмотрения.

Во-первых, когда вы можете выполнять миграцию с помощью простого SQL DML, вы можете в значительной степени полагаться на свой движок SQL, чтобы убедиться, что все строки успешно обработаны. Я участвовал в миграциях, хотя некоторые из них были немного сложнее - происходили реальные преобразования данных, когда данные перемещались в новую структуру. В этих случаях важно, чтобы у вас был процесс, который может обрабатывать следующие элементы:

  • Подсчет записей в сравнении с обработанными записями.
  • Обнаруживайте ошибки во время преобразования и устраняйте их таким образом, чтобы преобразование могло продолжаться и позволяло повторно обрабатывать «плохие» записи, как только вы определили исправление.
  • Количество записей должно включать в себя «плохие» записи - т.е. записи-в = записи-в-хороших + плохих записей
  • Если ваше преобразование изменяет количество записей (например, одна входная запись становится больше, чем одна выходная запись), можно предсказать количество выходных записей, с которыми вы закончите, а затем проверить свои результаты по этому количеству.

Другой момент, который я хотел бы добавить, это то, что важно иметь план того, что вы собираетесь делать, если / когда все идет не так, как планировалось. Это действительно функция развертывания в целом, но, похоже, она достаточно часто закрывается, и я подумал, что это стоит упомянуть.

Д. Ламберт
источник
4

Обзор того, как это сделать

Начать с

  • У вас есть база данных "после" в test / UAT / что угодно "рабочая БД"
  • У вас есть база данных «до» в производстве. Так что используйте его, чтобы создать копию продукции где-то = "ссылочная БД". И еще один, как "скрипт тестовой БД"
  • Я также надеюсь, что у вас есть куча сценариев разработки с вашими ALTER и т. Д. Если это так, еще одна копия производства с вашим сценарием разработки, примененная чисто и по порядку, будет полезна = "изменить БД"

Затем загрузите инструменты Red Gate Compare или что-то вроде Embarcadero SQL Change manager . Вы не можете легко мигрировать без него. Стоимость не зависит от количества сэкономленного времени. И самое главное, созданные скрипты вносят изменения в одну транзакцию, что означает чистое развертывание

В настоящее время,

  • генерировать сценарии изменения и отката с помощью инструментов, сравнивающих «ссылку» и «изменение»
  • применить скрипт изменения к «тесту скрипта» и сравнить обратно с «рабочей БД»
  • применить скрипт отката к «тесту скрипта» и сравнить обратно с «и сравнить обратно с« рабочей БД »

Теперь у вас есть безопасные + проверенные сценарии изменения и отката, которые можно применять всегда.

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

Инструменты Red Gate также могут сравниваться с папкой, которая находится под контролем источников. Затем мы фиксируем ALTER и т. Д. В нашем контроле исходного кода отдельно от реальных сценариев изменений.

ГБН
источник