Миграция данных между разными СУБД - PullRequest
4 голосов
/ 07 марта 2011

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

Программа будет написана на Delphi.

Необходим экспорт / импорт данных между Oracle / Informix / Msserver, очень важно здесь проблема с производительностью, так как эта программа будет работать на базах данных объемом 1-2 ГБ. Помимо обычных данных в базе данных есть BLOB-объекты, которые необходимо скопировать.

Мы думали о данных Xml-Data или данных, разделенных запятыми, поскольку оба они прозрачны (что приятно иметь), но здесь нужно рассмотреть BLOB-объекты. Формат Paradox в этом случае не является опциональным.

Кто-нибудь может порекомендовать некоторые форматы исполнения?

Любые другие идеи для достижения той же цели приветствуются.

Заранее спасибо.

Ответы [ 7 ]

4 голосов
/ 21 марта 2011

Я использую отличную программу под названием OmegaSync для своих резервных копий, но она будет обрабатывать Informix только через ODBC, а не напрямую. Если вы обнаружите, что можете использовать OmegaSync, вы обнаружите, что его производительность превосходна, потому что он сначала сравнивает базы данных, а затем синхронизирует только различия. Возможно, вы захотите использовать эту идею, если решите заняться программированием самостоятельно, если эффективность - ваша цель номер один.

Но программирование преобразования базы данных очень сложно, как сказали другие ответы на ваш вопрос. Так почему бы просто не разработать необходимый SQL-код и выполнить преобразование таким образом. Например, см .: Преобразование схемы Informix в схему Oracle или любую другую СУБД Для перемещения данных проверьте источники, такие как: Перемещение неинформационных данных между компьютерами и пространствами баз данных

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

3 голосов
/ 07 марта 2011

DbUnit - это популярный инструмент, который может извлекать и загружать данные в формате XML, см.

http://www.dbunit.org/faq.html#extract

    // partial database export
    QueryDataSet partialDataSet = new QueryDataSet(connection);
    partialDataSet.addTable("FOO", "SELECT * FROM TABLE WHERE COL='VALUE'");
    partialDataSet.addTable("BAR");
    FlatXmlDataSet.write(partialDataSet, new FileOutputStream("partial.xml"));

    // full database export
    IDataSet fullDataSet = connection.createDataSet();
    FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));
1 голос
/ 22 марта 2011

Вы должны использовать свой собственный двоичный формат, интегрированный с помощью (xml для текста / потоков для BLOB-объектов).

1 голос
/ 16 марта 2011

Новая структура DBExpress предоставляет возможность экспорта / импорта данных между многими базами данных. Вы можете проверить этот сеанс CodeRage Глубокое погружение в dbExpress Джона Кастера

1 голос
/ 07 марта 2011

Проверяли ли вы ODI (Oracle Data Integrator). Он поддерживает множество исходных баз данных.Он может собирать изменения из исходных баз данных и интегрировать их в целевую базу данных.Это производительный, но имеет цену.

Рональд.

0 голосов
/ 23 марта 2011

Вы можете дать Жабе (Quest Software) попытку.

Он поддерживает все упомянутые вами платформы и может выполнять такие операции, как «Экспорт данных таблицы в операторы INSERT» на исходной платформе, которые затем можно запустить на целевой платформе. Во IIRC есть даже некоторый внутренний формат резервного копирования, который может быть кроссплатформенным.

Сообщества жаб:

Несколько видео об экспорте, импорте:

0 голосов
/ 18 марта 2011

Если вам нужно экспортировать и метаданные, а не только данные, это может быть очень сложно.Существует много тонких (и не очень тонких различий) между базами данных, которые вы собираетесь использовать, что такой формат должен быть достаточно общим, а код экспорта / импорта должен быть в состоянии транслировать и отображать метаданные между базами данных, и потомуПриложение не может записывать напрямую во внутренние структуры базы данных, оно должно было бы генерировать соответствующий DDL БД для создания структур данных.Поскольку это проприетарный формат, ИМХО его дизайн - это наименьшая из ваших проблем, если важны размер и производительность, а файл читается последовательно, проектировать двоичный формат не составит труда.В любом случае импорт / экспорт и резервное копирование - это две разные задачи.Если вам нужно сделать резервную копию базы данных, используйте ее возможности.Они обычно позволяют гораздо больше контроля, то есть восстановления на момент времени.Если вам нужно перемещать данные между базами данных, это еще одна проблема - я бы написал только код для перемещения данных, а не метаданные, предварительно создав необходимую структуру в целевой базе данных.

...