Перенос данных с MySQL на SQL Server - PullRequest
4 голосов
/ 02 декабря 2009

Мне нужно преобразовать данные, которые уже существуют в базе данных MySQL, в базу данных SQL Server.

Предостережение заключается в том, что старая база данных была плохо спроектирована, но новая находится в правильной 3N форме. У кого-нибудь есть какие-либо советы о том, как это сделать? У меня SSMS 2005.

  1. Можно ли использовать это для подключения к БД MySQL и создания DTS? Или мне нужно использовать SSIS?
  2. Нужно ли писать сценарий в базе данных MySQL и изменять каждый оператор для «вставки» в базу данных SQL Server?

Кто-нибудь прошел через это раньше? Пожалуйста, ПОМОГИТЕ !!!

Ответы [ 6 ]

10 голосов
/ 02 декабря 2009

См. эту ссылку . Идея состоит в том, чтобы добавить базу данных MySQL в качестве связанного сервера в SQL Server через драйвер MySQL ODBC. Затем вы можете выполнять любые операции с базой данных MySQL через SSMS, включая копирование данных в SQL Server.

Поздравляю с продвижением в мире РСУБД!

5 голосов
/ 02 декабря 2009

Служба SSIS предназначена для подобных вещей. Первый шаг заключается в том, чтобы вручную наметить, где каждый фрагмент данных будет идти в новой структуре. Итак, в вашей старой таблице было четыре поля, в новой структуре fileds1 и 2 перейдите к таблице a, а поля три и четыре - к таблице b, но вам также нужно иметь автоматически сгенерированный идентификатор из таблицы a. Сделайте заметки относительно того, где изменились типы данных, и вам может потребоваться внести коррективы, или где у вас есть необходимые поля, где данные ранее не требовались и т. Д.

Что я обычно делаю, это создаю промежуточные таблицы. Поместите данные в денормализованной форме в одну промежуточную таблицу, а затем перейдите к нормализованным промежуточным таблицам, выполните очистку и добавьте новые идентификаторы, как только они появятся в промежуточных таблицах. Одна вещь, которую вам нужно будет сделать, если вы переходите от денормализованной базы данных к нормализованной, состоит в том, что вам нужно будет удалить дубликаты из родительских таблиц перед их вставкой в ​​фактические рабочие таблицы. Вам также может понадобиться выполнить очистку данных, так как в новой структуре могут потребоваться поля, которые не требовались в старых проблемах или при обращении к данным, из-за перехода к лучшим типам данных (например, если вы сохранили даты в старой базе данных в полях varchar, Перейдите к дате и времени в новой базе данных, у вас могут быть записи, у которых нет действительных дат.

Еще одна проблема, о которой вам нужно подумать, - это как конвертировать старые идентификаторы записей в новые.

Это не простая задача, но она выполнима, если вы не торопитесь и работаете методично. Сейчас не время пробовать ярлыки.

0 голосов
/ 02 декабря 2009

Если вы заходите в свою базу данных в SSMS и щелкаете правой кнопкой мыши, под задачами должна быть опция «Импортировать данные». Вы можете попытаться использовать это. По сути, это просто мастер, который создает для вас пакет служб SSIS, который затем может либо автоматически запускаться для вас, либо его можно сохранить, а затем изменить при необходимости.

Большая проблема в том, как вам нужно преобразовать данные. Это связано со многими особенностями, которые вы не включили (и которые, вероятно, слишком многочисленны для того, чтобы вы могли их сюда включить).

Я уверен, что SSIS может обрабатывать любые преобразования, которые вам нужно сделать, чтобы изменить его со старого формата на новый. Однако альтернативой может быть просто импортировать таблицы в MS SQL как есть в промежуточные таблицы, а затем использовать код SQL для преобразования данных в таблицы 3NF. Все зависит от того, что вам больше всего нравится. Если вы выберете второй путь, то можно использовать процесс импорта, который я упоминал выше в SSMS. Он даже создаст таблицы назначения для вас. Просто убедитесь, что вы даете им уникальные имена, возможно, ставите перед ними префикс «STG_» или что-то в этом роде.

Давуд упомянул связанные серверы. Это, безусловно, еще один способ, которым вы можете пойти (и получил мой upvote). Лично я предпочитаю сначала скопировать таблицы в MS SQL, поскольку связанные серверы могут иногда иметь странные особенности, особенно когда речь идет о типах данных, не сопоставляемых между различными поставщиками. Наличие всех таблиц в MS SQL также, вероятно, будет немного быстрее и сэкономит время, если вам придется повторно выполнять или исправлять части данных. Как я уже сказал, метод связанного сервера, вероятно, тоже подойдет.

0 голосов
/ 02 декабря 2009

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

0 голосов
/ 02 декабря 2009

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

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

0 голосов
/ 02 декабря 2009

Вам нужен инструмент ETL (извлечение, преобразование, загрузка).

http://en.wikipedia.org/wiki/Extract,_transform,_load#Tools

...