Мигрируйте от Oracle до MySQL

Мы столкнулись с серьезными проблемами производительности с нашей базой данных Oracle, и мы хотели бы попытаться переместить ее в основанную на MySQL базу данных (или MySQL непосредственно или, более предпочтительно, Infobright).

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

Так, вот наша ситуация:

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

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

Но, и здесь проблема находится, чтобы это работало, у нас должен быть экспорт от базы данных Oracle с согласованным состоянием с одного дня. (Мы не можем экспортировать некоторые таблицы в понедельник и некоторых других во вторник, и т.д.), это означает, это, по крайней мере, экспорт должен быть закончен меньше чем через один день.

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

Таким образом, мой вопрос теперь:

Что мне делать? Там какой-либо инструмент должен импортировать файлы дампа Oracle в MySQL? У кого-либо есть опыт с такой крупномасштабной миграцией?

PS: не предлагайте методы оптимизации производительности для Oracle, мы уже попробовали много :-)

Править: Мы уже попробовали некоторые инструменты ETL прежде, только для обнаружения, что они не были достаточно быстры: Экспорт только одной таблицы уже занял больше чем 4 часа...

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

24
задан Ispirer SQLWays Migrations 25 February 2015 в 13:13
поделиться

3 ответа

Oracle не поставляет готовой утилиты выгрузки.

Помните, что без полной информации о вашем окружении (версия oracle? платформа сервера? сколько данных? какие типы данных?) все здесь YMMV, и вы захотите попробовать это на своей системе для определения производительности и времени.

Мои пункты 1-3 - это просто общие идеи перемещения данных. Пункт 4 - это метод, который сократит время простоя или прерывания до минут или секунд.

1) Существуют утилиты сторонних производителей. Я использовал несколько из них, но лучше всего, если вы сами проверите их для своей цели. Несколько продуктов сторонних производителей перечислены здесь: OraFaq . К сожалению, многие из них работают под Windows, что замедлит процесс выгрузки данных, если только ваш сервер БД не находится под windows и вы не можете запустить утилиту загрузки непосредственно на сервере.

2) Если у вас нет сложных типов данных, таких как LOB, то вы можете использовать SQLPLUS. Если вы делаете таблицу за раз, то вы можете легко распараллелить это. Тема уже не раз поднималась на этом сайте, вот пример: Linky

3) Если вы работаете в 10g+, то внешние таблицы могут быть эффективным способом решения этой задачи. Если вы создадите несколько пустых внешних таблиц с той же структурой, что и ваши текущие таблицы, и скопируете в них данные, то они будут преобразованы в формат внешней таблицы (текстовый файл). И снова OraFAQ в помощь.

4) Если вы должны держать системы параллельно в течение дней/недель/месяцев, используйте инструмент захвата/применения данных об изменениях для практически нулевого времени простоя. Будьте готовы заплатить $$$. Я использовал инструмент компании Golden Gate Software, который может обрабатывать журналы повторных операций Oracle и предоставлять отчеты о вставке/обновлении в базу данных MySQL. Вы можете перенести основную часть данных без простоя за неделю до начала эксплуатации. Затем в период перехода на новую версию закрыть исходную базу данных, попросить Golden Gate подхватить последние оставшиеся транзакции, а затем открыть доступ к новой целевой базе данных. Я использовал этот метод для обновления, и период подхвата составлял всего несколько минут. У нас уже были лицензии на Golden Gate для сайта, так что это не было для нас чем-то из ряда вон выходящим.

И я буду играть здесь роль Cranky DBA и скажу, что если вы не можете заставить Oracle работать хорошо, я бы хотел увидеть описание того, как MySQL устранил ваши конкретные проблемы. Если у вас есть приложение, где вы не можете трогать SQL, все равно есть много возможных способов настроить Oracle. /soapbox

6
ответ дан 29 November 2019 в 00:23
поделиться

да, Oracle работает довольно медленно. :)

Вы можете использовать любое количество инструментов ETL для перемещения данных из Oracle в MySQL. Мне больше всего нравится службы интеграции SQL Server.

Если у вас Oracle9i или выше, вы можете реализовать отслеживание измененных данных. Подробнее здесь http://download-east.oracle.com/docs/cd/B14117_01/server.101/b10736/cdc.htm

Затем вы можете перенести дельту изменений из Oracle в ваш MySQL или Infobright с использованием любых технологий ETL.

3
ответ дан 29 November 2019 в 00:23
поделиться

Я использовал Pentaho Data Integration для миграции с Oracle на MySql (я также перенес те же данные на Postresql, что было примерно на 50% быстрее, что, как я полагаю, в основном связано с использованием различных драйверов JDBC). Я следовал инструкциям Роланда Боумана, почти дословно, и был приятно удивлен тем, насколько это было просто:

Копирование данных таблицы из одной БД в другую

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

1
ответ дан 29 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: