Разбить большой файл sql на границы операторов? - PullRequest
2 голосов
/ 14 декабря 2010

Мне нужно импортировать большую таблицу SQL из базы данных Oracle в базу данных mySQL. Я «сбросил» таблицу Oracle, используя RazorSQL, так что теперь у меня есть большой (2,5 ГБ) файл .sql со множеством операторов INSERT.

Этот файл слишком большой, и я хочу разделить его, чтобы импортировать его по частям. Какой бы умный способ разбить такой файл?

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

  • a Perl, использующий регулярное выражение для разделения на "; \ n" (конец оператора), будет работать, но все еще существует удаленная возможность, что такая последовательность символов может быть найдена в данных.

Конечно, я всегда могу написать синтаксический анализатор для понимания цитирования строк. Интересно, а есть ли что-нибудь умнее?

Подобные вопросы были заданы. например:

Как разделить вывод из mysqldump на файлы меньшего размера?

Но единственным решением для разделения было предложение для некоторых программ Windows. Windows не вариант для меня. Я использую Unix, а именно Mac OS X.

Чтобы дать некоторую предысторию, я хочу сделать так, чтобы у меня возникла ошибка при импорте файла в mySQL. Локализация ошибки является болезненной хотя бы потому, что она занимает много времени, и потому что открытие таких больших текстовых файлов для редактирования не является тривиальным в лучшем случае с большинством текстовых редакторов. Некоторые из моих инструментов SQL даже не сообщают о местонахождении ошибки в файле, что настоятельно рекомендует дихотомический подход к обнулению ошибки путем деления числа раз. Автоматизация этого была бы полезна.

Спасибо за любую идею.

1 Ответ

0 голосов
/ 14 декабря 2010

Не совсем ответ на ваш вопрос, но, возможно, решение вашей проблемы:

Установка Navicat (MySQL GUI) .Он имеет инструмент миграции oracle => mysql, который может вам помочь, потому что, скорее всего, ошибки, которые вы получаете, происходят из-за различий в синтаксисе.Преобразование одного диалекта SQL в другой будет сложной задачей.

...