Используя дамп базы данных из Oracle в формате .sql и импортируйте его в MySQL? [Дубликат]

Это очень распространенная проблема, с которой мы сталкиваемся, борясь с «таинствами» JavaScript.

Давайте начнем с простой функции JavaScript:

function foo(){
// do something 
 return 'wohoo';
}

let bar = foo(); // bar is 'wohoo' here

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

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

function foo(){
 setTimeout( ()=>{
   return 'wohoo';
  }, 1000 )
}

let bar = foo() // bar is undefined here

Итак, вы идете, эта задержка просто сломала функциональность, которую мы ожидали! Но что именно произошло? Ну, на самом деле это довольно логично, если вы посмотрите на код. функция foo() после выполнения ничего не возвращает (таким образом, возвращаемое значение равно undefined), но оно запускает таймер, который выполняет функцию после 1s, чтобы вернуть «wohoo». Но, как вы можете видеть, значение, присвоенное бару, является немедленно возвращенным материалом из foo (), а не что-либо еще, что приходит позже.

Итак, как мы решаем эту проблему?

Давайте попросим нашу функцию для ОБЕЩАНИЯ. Обещание действительно о том, что это означает: это означает, что функция гарантирует, что вы предоставите любой результат, который он получит в будущем. поэтому давайте посмотрим на это в нашей маленькой проблеме выше:

function foo(){
   return new Promise( (resolve, reject) => { // I want foo() to PROMISE me something
    setTimeout ( function(){ 
      // promise is RESOLVED , when exececution reaches this line of code
       resolve('wohoo')// After 1 second, RESOLVE the promise with value 'wohoo'
    }, 1000 )
  })
}

let bar ; 
foo().then( res => {
 bar = res;
 console.log(bar) // will print 'wohoo'
});

Таким образом, резюме - для решения асинхронных функций, таких как вызовы на основе ajax и т. д., вы можете использовать обещание resolve значение (которое вы намерены вернуть). Таким образом, короче говоря, вы разрешаете значение вместо возврата в асинхронных функциях.

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

6 ответов

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

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

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

6
ответ дан Community 25 August 2018 в 12:12
поделиться

Вы можете использовать сценарии Python, SQL * Plus и mysql.exe (MySQL client) для копирования всей таблицы только результатов запроса. Он будет переносимым, потому что все эти инструменты существуют в Windows и Linux.

Когда я должен был это сделать, я реализовал следующие шаги с помощью Python:

  1. Извлечь данные в CSV-файл, используя SQL * Plus.
  2. Загрузите файл дампа в MySQL с помощью mysql.exe.

Вы можете повысить производительность за счет параллельной загрузки с использованием таблиц / разделов / подраздел.

Раскрытие: Oracle-to-MySQL-Data-Migrator - это сценарий, который я написал для интеграции данных между Oracle and MySQL в ОС Windows.

0
ответ дан Alex B 25 August 2018 в 12:12
поделиться

Я использую для передачи больших данных между различными базами данных, где-то между 10-250 миллионами записей. Например, когда я использую Pentaho, Talend, Java и Ruby для передачи 30 миллионов записей, мои переводы всегда занимали более 5 часов. Когда я попробовал Perl, время передачи было значительно сокращено до 20 минут.

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

Pentaho, Talend, Ruby, Java делают слишком много проверки типов данных, конвертируют типы, создают слишком много объектов, которые создают потребность в памяти для ОС и делают сборщика мусора сходящими с ума, и вот где медленность начинается, когда я имею дело с миллионами записей.

Обычно я запускаю 8 процессов Perl на 8-процессорном сервере, которые разделяют позицию последней полученной записи и там вы идете. Я получил уродливый Perl ETL MONSTER, который никто не может победить в производительности. В этом случае производительность зависит только от исходных и целевых баз данных. Сколько записей вы можете запрашивать и вставлять в секунду,

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

Я разработчик Java, но иногда даже уродство Perl можно использовать в тех местах, где ни один другой современный язык программирования не может конкурировать. Если вам нравится видеть некоторые из моих собственных работ о том, о чем я говорил, вы можете посетить мою вторую поисковую систему, в которой хранится почти 500 миллионов записей в базе данных MySQL, и вы можете искать свое имя.

http://find1friend.com/
http://myhealthcare.com/
2
ответ дан Kevin Duraj 25 August 2018 в 12:12
поделиться

Да, Oracle довольно медленная. :)

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

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

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

3
ответ дан Raj More 25 August 2018 в 12:12
поделиться

Я создал приложение C #, которое может читать файл дампа Oracle (.dmp) и перекачивать его таблицы данных в базу данных SQL Server.

Это приложение используется каждую ночь на производственной основе для миграции базу данных PeopleSoft для SQL Server. База данных PeopleSoft имеет 1100+ таблиц базы данных, а файл дампа Oracle больше 4,5 ГБ.

Это приложение создает базу данных и таблицы SQL Server, а затем загружает все данные объемом 4,5 ГБ менее чем за 55 минут работающий на двухъядерном сервере Intel.

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

5
ответ дан STLDeveloper 25 August 2018 в 12:12
поделиться

Недавно я опубликовал etlalchemy для выполнения этой задачи. Это решение с открытым исходным кодом, которое позволяет осуществлять миграцию между любыми 2 базами данных SQL с 4 строками Python и первоначально предназначалось для миграции из Oracle в MySQL. Поддержка была добавлена ​​для MySQL, PostgreSQL, Oracle, SQLite и SQL Server.

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

Для установки:

$ pip install etlalchemy

На El Capitan : pip install --ignore-installed etlalchemy

Для запуска:

from etlalchemy import ETLAlchemySource, ETLAlchemyTarget

orcl_db_source = ETLAlchemySource("oracle+cx_oracle://username:password@hostname/ORACLE_SID")

mysql_db_target = ETLAlchemyTarget("mysql://username:password@hostname/db_name", drop_database=True)
mysql_db_target.addSource(orcl_db_source)
mysql_db_target.migrate()

Что касается производительности, этот инструмент использует инструменты импорта BULK для различных СУБД, таких как mysqlimport и COPY FROM ( postgresql ) для эффективного выполнения миграции. Я смог перенести базу данных SQL Server объемом 5 ГБ с 33,105,951 строк в MySQL за 40 минут и базу данных Oracle объемом до 3 000 000 байт в MySQL за 13 минут.

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

(Чтобы установить драйвер «cx_Oracle» Python, следуйте этим инструкциям )

0
ответ дан The Aelfinn 25 August 2018 в 12:12
поделиться
Другие вопросы по тегам:

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