2008-10-30 2 views
1

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

Поскольку это не простая миграция от 1 до 1, а результирующие строки представляют собой родительскую/дочернюю строку на основе генерируемых сгенерированных ключей, каков наилучший механизм для выполнения миграции?

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

Если у кого-то еще есть вход, я буду благодарен за отзыв.

ответ

0

Спасибо за предложение, но я предпочел бы создать программное решение. В настоящее время я использую Nant/CruiseControl для автоматизации тестов и нуждаюсь в чем-то, что я могу воссоздать на лету, основываясь на текущем живом содержании.

1

Это мой стандартный подход:

  • создать новую модель данных
  • вытащить данные в новую БД без изменений
  • записи (и запустить) сценарий SQL для выполнения миграции
  • тест
  • (необязательно) отбросить таблицы с унаследованными данными

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

Запуск процесса в Query Analyzer (или аналог в ваших dbms), у вас будет то преимущество, что вы можете обернуть все в транзакцию, чтобы вы могли откат, если что-то пошло не так. Запишите его в биты и протестируйте его в кусках, в базе данных разработчиков. Как только все будет работать правильно, установите скрипт в вашей производственной базе данных.

Сортировка.

Смежные вопросы