MySQL -> Помощник по миграции SQL Server с проблемой БОЛЬШОЙ таблицы

Я пытаюсь перенести старую базу данных MySQL моей компании на SQL Server 2008.

Я использую помощник по миграции SQL Server для программного обеспечения MySQL, и все работает отлично, за исключением больших таблиц (некоторые из которых содержат около 150 миллионов строк). at Migrating myTable > myTable with 0 of 159216578 rows processed - Он остается таким примерно 1-2 часа, затем вылетает и говорит, что не может создать файл ошибки.

Есть ли что-то/настройки, которые я могу изменить, чтобы это работало? Есть ли лучший способ (у меня есть доступ к файлам .frm, .MYD, .MYI, если есть что-то, что я могу сделать таким же образом) - я открыт для всего, пока я перенесу эти таблицы.

Спасибо!!


person John Bustos    schedule 31.01.2013    source источник
comment
Какую версию SSMA вы используете? Как устроена сеть между MySQL, SQL Server и местом, где вы используете SSMA? Я только что выполнил миграцию на этой неделе с таблицей MySQL, имеющей 5,1 миллиона строк, и она отлично сработала.   -  person mellamokb    schedule 01.02.2013
comment
Используете ли вы настройки по умолчанию, т. е. размер партии = 1000? Я не могу найти никаких упоминаний о том, что должно быть ограничение на размер таблицы, но кажется, что ваш компьютер пытается загрузить слишком много данных во время миграции (следовательно, он застревает на 0, а затем падает). Сколько оперативной памяти у машины, на которой вы используете SSMA? Сколько данных содержится в одной строке этой таблицы, т. е. много ли широких или бинарных столбцов, или схема относительно легкая и простая?   -  person mellamokb    schedule 01.02.2013
comment
Данные MySQL находятся на моем локальном компьютере — localhost — а SQL Server находится на удаленном сервере. Что касается настроек по умолчанию, я и размер партии 1000 - есть мысли?? Что касается таблиц с 5 миллионами строк, они работают нормально... Похоже, проблема заключается в таблицах со 100 миллионами строк...   -  person John Bustos    schedule 01.02.2013
comment
... Это довольно сложная таблица, и эти машины 32-разрядные, поэтому я ограничен 3 ГБ ОЗУ.   -  person John Bustos    schedule 01.02.2013
comment
... Мне интересно, есть ли у соединения ODBC ограничение на размер таблицы, но мне нравится эта идея! Что касается разделения таблицы, я надеюсь, что есть более чистое решение, но, возможно, мне придется пойти по этому пути - что может быть нормально, поскольку в любом случае в таблице есть первичный ключ. В противном случае таблица составляет 10 ГБ, а самая большая у меня - 40 ГБ ‹gulp›   -  person John Bustos    schedule 01.02.2013
comment
Одна из возможностей с OpenQuery заключается в том, что вы могли бы технически включить WHERE, чтобы ограничить количество строк. Например, что-то вроде INSERT SQLServerdatabasename.dbo.tablename SELECT * FROM openquery(MYSQL, ‘SELECT * FROM databasename.tablename WHERE PK BETWEEN 1 AND 1000000’) для захвата первых 1 000 000 значений идентификатора. Затем просто обновите минимальные/максимальные значения и запустите, пока не пройдете всю таблицу (или используйте цикл FOR для всех необходимых # миллионов).   -  person mellamokb    schedule 01.02.2013
comment
... Хотя я настоятельно рекомендую протестировать небольшой набор, например, 100 строк, и проверить, все ли в порядке. Например, значения PK не будут переданы напрямую, если вы set identity [TableName] off. И вы можете найти проблемы с переводом в некоторых столбцах, с которыми вам придется иметь дело.   -  person mellamokb    schedule 01.02.2013
comment
@mellamokb - Большое спасибо!! - Мне нравится эта идея больше всего из всего, что я видел в сети! Я собираюсь попробовать это сейчас, потому что в противном случае я почти готов сдаться :)   -  person John Bustos    schedule 01.02.2013
comment
@mellamokbtheWise, пожалуйста, не стесняйтесь публиковать свои комментарии в качестве решения - вы определенно заслуживаете похвалы за ответ на этот вопрос для меня !!!   -  person John Bustos    schedule 16.02.2013


Ответы (1)


Я думаю, вы хотите экспортировать около 10 миллионов строк за раз (в зависимости от оборудования MySQL), используя что-то в предложении WHERE, которое позволит вам разделить данные (идентификатор, дату и т. д.).

SELECT * FROM Table1 WHERE ID BETWEEN x and y INTO OUTFILE 'C:\temp\data.csv';

Вы можете использовать мастер импорта/экспорта SQL Server, чтобы получить его в MSSQL.

person smoore4    schedule 04.04.2013