замена DB link

bastrakov
Дата: 29.05.2006 18:37:44
привет всем.

есть задача периодически брать данные из удаленной базы.
до сих пор брали по DB link. дальше все стандартно.

теперь задача: надо попробовать реализовать то же самое, без использования db link.
было предложено:
1) javaSP -> jdbc -> connection к другой базе.
2) dbms_util -> directory на нашем серваке -> на файл смотрим как на внешнюю таблицу.

поругайте/похвалите плиз. особенно интересует мнение людей, которые реально работали с подобным. сами попробовали - получили некоторые проблемы - решили спросить.

заранее спасибо.
во
andrey_anonymous
Дата: 29.05.2006 18:42:09
- transportable tablespace
- sql*plus COPY command.
Scott Tiger
Дата: 29.05.2006 21:13:47
Хотелось бы знать, зачем всё это надо? Что не устраивает в дблинках?
testicles
Дата: 29.05.2006 21:54:35
Те же яйца, только в профиль.
bastrakov
Дата: 30.05.2006 09:18:50
привет всем.

каюсь. неправильно сформулированный вопрос исключает получение правильного ответа. :-(

вводные:
данные периодически, раз в сутки, забираются job-ом через db-link.
доступа до сервера базы (железа) нет.
есть стандартный доступ клиента к схеме.
требование:
надо сделать то же самое решение, но без использования db-link.

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

кроме перечисленых рассматриваются:
3) написать промежуточное по, которое будет заниматься только перекачкой данных. .net
4) стандартный exp-imp.

почему решили отказаться - сказать не могу. потому что:
1) еще не решили (хотя все идет к тому).
2) решение принимал не я, иннициатива идет из соображений не относящихся к проекту.

если у кого есть подобный опыт - готов внимательно выслушать.

во
aZm
Дата: 30.05.2006 11:54:17
ну не все так страшно :) автоматизировать очень даже можно. тебе же известно, откуда берешь и куда ложишь? дык и сделай некую табличку, с указанием откуда брать и куда класть, +доп. параметры. и потом - цикл по курсору и execute immediate для заливки. и потом шедулиш через dbms_job следующую заливку. а дальше - любые навароты по логированию и тп. и никакого доп по, все средствами сервера ;)
bastrakov
Дата: 30.05.2006 12:50:05
привет.

не понял. можно поподробнее?..

во
aZm
Дата: 30.05.2006 13:51:09
все просто.
есть 2 сервера:
А и Б
пусть нужно переливать

t1@A -> t1@B
t2@A -> t2@B
t3@A -> t3@B

делаешь некую табличку, где будут 2 поля - CopyFrom CopyTo
заполняешь соответственно. даешь гранты и тп.

потом что то вроде:

...
for cTbls in (select CopyFrom, CopyTo from sometable)
loop
  execute immediate 'insert into '||cTbls.CopyTo||' select * from '||cTbls.CopyFrom;
  commit;
end loop;
...
dbms_job.submit(...эту вот процедуру на след. время загрузки);
commit;
...
это чисто идея, скелетик.

стало яснее, олег?
andrey_anonymous
Дата: 30.05.2006 14:00:43
aZm
все просто.
стало яснее, олег?

aZm, перечитайте пост.
"теперь задача: надо попробовать реализовать то же самое, без использования db link."

Без использования dblink означает внешнюю утилиту либо самопальную реализацию dblink средствами java/extproc.
Из внешних утилит наиболее простой, доступной, надежной и достаточно функциональной является sql*plus (я уже говорил - команда COPY).
Автоматизировать sql*plus - это не задача. Это просто как 2+2х2.
Вторям приоритетом можно назвать exp/imp. Немножко сложнее (надо аккуратно учесть все особенности и ограничения данной утилиты) и требует доступного промежуточного хранилища под dump. Зато позволяет делать перенос даже если целевая БД в момент экспорта недоступна. Автоматизация также не представляет никаких проблем.
Далее идут специализированные утилиты. Но они стоят денег и могут иметь собственные ограничения.
В последнюю очередь можно рассматривать самопал - если все вышеизложенное не отвечает конкретным потребностям.
softwarer
Дата: 30.05.2006 14:01:39
Думаю, оптимальный вариант диктуется в основном дополнительными требованиями . В качестве предложения по умолчанию - я бы предложил cron-ить на вашем сервере скрипт с imp/exp; для простого случая абсолютный минимум работы, и достаточно надежно (если озаботиться проверкой нормального завершения утилит). Единственно, придется кроме exp/imp запускать через sqlplus скрипт с очисткой получаемых таблиц.

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