Объединение информации между базами данных DB2 и Oracle. Лучшие практики - PullRequest
1 голос
/ 03 апреля 2009

Мы разрабатываем довольно большое приложение для «коричневых полей» и столкнулись с небольшой проблемой.

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

Мы должны выполнить операцию типа «JOIN» для таблиц. Прямо сейчас я думал о том, чтобы вытащить информацию из таблицы DB2 в List <> и затем перебрать ее в SQL-выражении для базы данных Oracle, например:

select * from accounts where accountnum in (...)

Есть ли какой-нибудь более простой способ взаимодействия между базами данных или, по крайней мере, какова наилучшая практика для такого рода действий?

Ответы [ 6 ]

1 голос
/ 06 апреля 2009

Это должны быть данные в реальном времени? Если так, то есть продукты, доступные для гетерогенного соединения, особенно реляционное соединение db2, которое является частью федеративного сервера. Если задержка принята, вы можете настроить сценарии для репликации данных в oracle, используя которые вы можете сделать нативное объединение. Вы получите низкую производительность при передаче данных в клиентское приложение. Если это единственный вариант, попробуйте создать хранимую процедуру db2 для возврата данных, что несколько повысит производительность.

1 голос
/ 04 апреля 2009
  1. Вы можете экспортировать данные из DB2 в формате плоского файла и использовать этот плоский файл в качестве внешней таблицы или использовать загрузчик SQL, это пакетный процесс.

  2. Существует также то, что называется гетерогенной связностью. Здесь вы создаете ссылку на базу данных от Oracle к DB2. Это позволяет запрашивать базу данных DB2 в режиме реального времени, и вы можете объединить таблицу Oracle с таблицей DB2.

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

Существуют различные виды разнородных соединений, поэтому внимательно прочитайте документацию.

1 голос
/ 03 апреля 2009

Я сделал это двумя способами.

Имея две базы данных Sybase на разных компьютерах, я настроил процедуры хранения и затем вызывал подобные функции для отправки данных туда и обратно. Это дополнительно позволило sprocs провести аудит / запись в журнал, чтобы убедить клиента, что в процессе не было потеряно никаких данных.

В Oracle для Sybase одним способом я использовал представление для маршалинга данных и библиотек C каждого производителя, вызываемых из программы C ++, которая давала API-интерфейсам C общий интерфейс.

В настройках MySQL и DB2, где, как и в вашей ситуации, Db2 был «устаревшим, но живым», я использовал настройку, аналогичную описанной вами: извлечение данных в клиентскую программу (Java).

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

Если их станет много ко многим, я могу вернуться к обработке по одному элементу за раз (хотя вы можете использовать поиск по HashSet).

Однако, в основном, вы выбираете sprocs (для которого вам потребуется и уровень клиента) или просто делаете это на клиенте.

0 голосов
/ 29 января 2014

Обратите внимание, что если у вас DB2 Advanced Enterprise Server Edition (AESE), сервер Infosphere Federation Server включен.

Оба продукта позволят вам использовать один запрос на соединение, отправленный в одну БД, который возвращает данные из обеих БД. Продукт Oracle действительно хорош тем, что позволяет Oracle видеть базу данных DB2 как другую базу данных Oracle, а DB2 - базу данных Oracle как другую базу данных DB2. (Благодаря тому, что IBM опубликовала спецификации как для клиентской, так и для серверной части протокола DRDA, который использует DB2. Жаль, что ни один другой поставщик не желает этого делать, хотя у них нет проблем воспользоваться преимуществом того факта, что IBM сделала это.)

Ни один из этих продуктов я бы не назвал дешевым. Дешево, вы можете воспользоваться Oracle Database Gateway для ODBC
http://docs.oracle.com/cd/E16655_01/gateways.121/e17936/toc.htm

0 голосов
/ 03 апреля 2009

Если вы спросите поставщиков, вероятно, лучше всего купить другой продукт.

Со стороны IBM существует IBM Federation Server , который может «объединять данные из разнородных источников, таких как DB2, Oracle и SQL Server, в одно виртуальное представление». Я думаю, что есть и один из Oracle, но я менее знаком с их продуктами.

0 голосов
/ 03 апреля 2009

Если возможно скопировать данные из устаревшей базы данных в базу данных, которой вы управляете, вы можете подумать о задании по извлечению данных, которое копирует один раз в день (или как можно чаще) новые записи из устаревшей БД в БД Oracle. Это может быть не так просто, если вы не можете определить новые записи, созданные в устаревшей базе данных с момента последней загрузки данных.

Затем вы можете выполнять объединения в вашем экземпляре Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...