Массовый перевод содержимого таблицы - PullRequest
1 голос
/ 30 октября 2008

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

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

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

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

Ответы [ 2 ]

1 голос
/ 30 октября 2008

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

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

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

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

отсортирован.

0 голосов
/ 30 октября 2008

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

...