Меню

Firebird синхронизация двух баз



Firebird синхронизация двух баз

Вопрос вот в чём: надо сделать запрос (хота бы select) к двум таблицам, находящимся в разных базах. Запрос должен выполняться из хранимой процедуры в одной из баз. Возможно ли это.


Игорь Шевченко © ( 2004-08-26 15:57 ) [1]

Скорее всего, нет. За дополнительной информацией на www.ibase.ru


Труп Васи Доброго © ( 2004-08-26 16:04 ) [2]


> Скорее всего, нет.

Это твоё мнение, или точно (в смысле про это ты слышал).

> За дополнительной информацией на www.ibase.ru

Да там как то туго с информацией 🙁


DSKalugin © ( 2004-08-26 16:07 ) [3]

а не проще ли слить 2е базы в одну и не морочить голову?


Труп Васи Доброго © ( 2004-08-26 16:10 ) [4]


> а не проще ли слить 2е базы в одну и не морочить голову?

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

Труп Васи Доброго © (26.08.04 16:04) [2]
Это твоё мнение, или точно (в смысле про это ты слышал).

это абсолютно точно. IB не поддерживает запросы к нескольким базам адновременно(гетерошенные запросы..Так что ли называется?)

> Да там как то туго с информацией 🙁

Не смеши, пожалуйста. На ibase есть практически вся необходимая информация про IB + ссылки на доку. Больше нечего не надо..


Игорь Шевченко © ( 2004-08-26 16:12 ) [6]

Труп Васи Доброго © (26.08.04 16:04) [2]


> Это твоё мнение, или точно (в смысле про это ты слышал).

Скажем так — я не видел документированных способо реализации таких запросов. Может быть, конкретно в Firebird что-то и придумали, не знаю. Потому и отсылаю на сайт, там есть раздел «для разработчика», обычно там полезная информация.


Труп Васи Доброго © ( 2004-08-26 16:18 ) [7]


> это абсолютно точно.

Я спрашиваю потому, что в IBExperte при создании таблицы есть строка External file. Вот и размечтался!


Piter © ( 2004-08-26 16:28 ) [8]

Труп Васи Доброго © (26.08.04 16:10) [4]
Нет, не проще! Зачем мешать мух с котлетами.

если в одном запросе участвуют сразу две базы данных. не очевидно ли, что эти базы служат одной цели, одной программе и как-то переплетены (иначе и быть не может, раз в одном запросе участвуют). Я могу понять если против того, чтобы не вносить все поля в одну ТАБЛИЦУ. Чтобы там не дублировать записи. ну вообще много причин. Но вот раносить именно по разным базам — это имхо приложения, которые вообще не должны знать друг о друге. Имхо.


Труп Васи Доброго © ( 2004-08-26 16:42 ) [9]


> Piter © (26.08.04 16:28) [8]

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


> Я спрашиваю потому, что в IBExperte при создании таблицы
> есть строка External file. Вот и размечтался!

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


jack128 © ( 2004-08-26 16:52 ) [11]

Игорь Шевченко © (26.08.04 16:45) [10]
Это просто файл, преимущественно, текстовый


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


Труп Васи Доброго © ( 2004-08-26 16:59 ) [12]


> если все это используется вместе, то нужно просто в одну
> базу вс данные залить и не париться..

Блин, не ну чёго-же так туго проходит?! Я же говорю например.
Меня не интересует что можно вместе слить, меня интересует запрос из одной базы в другую.


Игорь Шевченко © ( 2004-08-26 17:21 ) [13]


> меня интересует запрос из одной базы в другую.

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


Piter © ( 2004-08-26 17:32 ) [14]

Тебе уже вроде ответили, что нельзя? Или ты не заметил?

А теперь тебе говорят о том, как сделать ПРАВИЛЬНО. Не хочешь — не надо. Нам то что?

Читайте также:  Как синхронизировать медиатеку айтюнс и айфона

На forums.demo.ru есть конференция epsylon.public.interbase.
Ты бы лучше туда спрашивал — сразу все расскажут.


Rule © ( 2004-08-26 17:57 ) [16]

Категорически сделать так нельзя, тем более из хранимых процедур, можно сделать распределенный запрос только через BDE к интребейзу и то не средствами интербейза а благодряря локал SQL BDEшному, как это сделать лежит на том же ibase.ru
если ты такой ленивый что не можешь найти на тебе ссылку:
http://ibase.ru/devinfo/bde.htm
предпоследняя глава

там и написано все доходчиво что и как и почему . а если ты допустил ситуацию чтоб разнести данные по двум базам, то тебе надо ещё почитать учебник по организации БД, есть пару штук на сайте Подгоретского
podgoretsky.com


Анонимщик © ( 2004-08-26 17:59 ) [17]

Rule ©
А вот и нифига. В базе данных должна быть только одна таблица, понятно?


Rule © ( 2004-08-26 18:01 ) [18]

Анонимщик © (26.08.04 17:59) [17]
А вот и нифига. В базе данных должна быть только одна таблица, понятно?
Не понял замечания, в какой базе и для чего ?


Анонимщик © ( 2004-08-26 18:09 ) [19]


Piter © ( 2004-08-26 18:12 ) [20]

Анонимщик © (26.08.04 18:09) [19]
В любой.


Piter © ( 2004-08-26 18:13 ) [21]

А это интересная точка зрения — что в одной базе должна быть только одна таблица :)))


Игорь Шевченко © ( 2004-08-26 18:13 ) [22]


> А это интересная точка зрения — что в одной базе должна
> быть только одна таблица :)))

А в этой таблице — одно поле. Символьное. Из одного символа.


Анонимщик © ( 2004-08-26 18:14 ) [23]


nikkie © ( 2004-08-26 18:16 ) [24]

не вижу особых причин против того, чтобы иметь 2 базы.
только почему такое желание работать на уровне sp?
пишешь приложение, где и реализуешь работу с двумя базами.
если так принципиально на уровне бд — можно сделать udf


Piter © ( 2004-08-26 18:16 ) [25]

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


Piter © ( 2004-08-26 18:17 ) [26]

nikkie © (26.08.04 18:16) [24]

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


Игорь Шевченко © ( 2004-08-26 18:19 ) [27]


> если так принципиально на уровне бд — можно сделать udf

С этого места подробнее можно ?


Piter © ( 2004-08-26 18:21 ) [28]

Чую, сейчас Шевченко докажет Nikkie что тот не прав :)Или наоборот 🙂


jack128 © ( 2004-08-26 18:22 ) [29]


> можно сделать udf

в смысле из удф подключаться к другой базе? Что то как то не очень идея..Как ты себе это представляешь??


nikkie © ( 2004-08-26 18:40 ) [30]

>Игорь Шевченко
>С этого места подробнее можно ?

>jack128
>Как ты себе это представляешь??

это была гипотетическая идея, я не проверял работоспособность, конечно. а что, у вас сведения, что это невозможно? IB накладывает какие-то ограничения на функциональность udf?


jack128 © ( 2004-08-26 18:56 ) [31]


> IB накладывает какие-то ограничения на
> функциональность udf

официально нет. А не официально этого делать очень не рекомендуется(на эпсилоновской конфе этот вопрос поднимался в свое время, врооде какие то глюки вылазили.. точно уже не помню, но то что такие лудше не делать — в память отлажилось).

И с производительностью наверника будут проблемы (если каждый раз при вызове удф открывать коннект и закрыть его, то сам понимаешь..)
А если например написать дополнительно пару udf OpenConnect/CloseConnect, то а) придется отказаться от компонентов — писать все на апи. б) вызвать эти udf придется с клиента, а тогда вообще теряется смысл выноса всей этой логики на сервер..


Desdechado © ( 2004-08-26 21:32 ) [32]

1. через UDF, имхо, не стоит. Хотя бы потому, что они рассчитаны на малое время выполнения. А подключение к какой-то БД, обработка ошибок при этом, отключение и прочее — слишком ресурсоемко.
2. в разных БД хранить связанные данные неверно хотя бы потому, что не поддержать ссылочной реляционной целостности. А если без нее, то никакой нормализацией пахнуть не будет. А это уже будет не БД, а свалка.
3. можно попробовать через External Tables. При этом хитро замутить так — в одной БД создается такая таблица и заполняется из главной. В другой тоже создается с аналогичными полями и, самое главное, направленная на ТОТ ЖЕ внешний файл. И во второй же можно из ХП ее обрабатывать. Не уверен, что такой вариант работоспособен (по крайней мере, если сервер открыл обе базы разом). Но даже если получится, все равно изврат. См. пункт 2.

Читайте также:  Все функции синхронизация 1с


Zacho © ( 2004-08-26 21:49 ) [33]

Может ему репликация нужна ? Так статьи на эту тему есть на www.ibase.ru


megabyte © ( 2004-08-26 23:42 ) [34]


> В любой.


> А в этой таблице — одно поле. Символьное. Из одного символа.


> И запись одна.

Я плакаль. 🙂
Мечтаю об этом.


nikkie © ( 2004-08-27 00:38 ) [35]

хорошо, убедили, не стоит через udf.

но общее отторжение идеи работы с двумя базами мне все-таки не понятно. упоминание машин напомнило мне про известную технологию поиска угнанных машин. недавно показывали по телику мужика из Самары, кажется — он способен обнаружить тысячи угнанных машин, не выходя из дома, сличая несколько баз — базу vin-номеров от производителей, базу машин, числящихся в угоне и базу зарегистрированных машин по России. техника простая, но использовать ее те, кто должен был бы заниматься поиском угнанных машин, не хотят — слишком многие гаишники попадут под статью.

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

что-то автор пропал куда-то. я его тут защищаю, а может зря? может с этими базами никто кроме одной-единственной его программы не работает?


jack128 © ( 2004-08-27 00:53 ) [36]

nikkie © (27.08.04 0:38) [35]
но общее отторжение идеи работы с двумя базами мне все-таки не понятно.

нету полного отторжения. Я, когда говорил о необходимости объединения баз исходил из того примера с автомодилистами. Просто слова «пример» не заметил..Твой рассказ — вот пример когда можно и нужно использовать несколько БД. Понятно, что объединить базу гаи»цев и автопроизводителей нереально..


Rule © ( 2004-08-27 08:43 ) [37]

А где автор то собственно, вот я не понял .
тут дебаты а он уплыл, значит надо оно ему .


Труп Васи Доброго © ( 2004-08-27 14:44 ) [38]


> Rule © (27.08.04 08:43) [37]

У автора инет и комп только на работе, а она в 17:00 заканчивается.
Вот перечитал я все заметания и предложения, пока выхода из тупика не нашёл.
Неужели никто не думал о том, что это надо (работать с двумя базами).
Странно как то!


Труп Васи Доброго © ( 2004-08-27 14:53 ) [39]

Может какие идеи у кого появились как выйти из этой ситуации, мыслишки мож какие?


Danilka © ( 2004-08-27 15:28 ) [40]

[39] Труп Васи Доброго © (27.08.04 14:53)
Перейти на СУБД, которая позволяет так делать 🙂
А вообще, см [32] Desdechado © (26.08.04 21:32) п.2
:))

[35] nikkie © (27.08.04 00:38)
> недавно показывали по телику мужика из Самары, кажется —
> он способен обнаружить тысячи угнанных машин, не выходя
> из дома, сличая несколько баз — базу vin-номеров от производителей,
> базу машин, числящихся в угоне и базу зарегистрированных
> машин по России.

Ты уверен, что у него не в одной базе все? Самое простое, сделать экспорт в одну базу необходимых табличек, и уже по ним искать.


nikkie © ( 2004-08-27 15:49 ) [41]

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

типа, все, выступавшие выше, просто трепом занимались. блин.

>Danilka
>Ты уверен, что у него не в одной базе все?

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

Самое простое, сделать экспорт в одну базу необходимых табличек, и уже по ним искать.
не думаю, что это самое простое. реализация join двух таблиц из разных баз на уровне приложения — дело 5 минут.

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


Игорь Шевченко © ( 2004-08-27 15:50 ) [42]


> Перейти на СУБД, которая позволяет так делать 🙂

Например, на Oracle. Он позволяет

Читайте также:  Ошибка при синхронизации звуков на айфон


Esu ( 2004-08-27 15:56 ) [43]

MSSQL тоже позволяет.


jack128 © ( 2004-08-27 15:59 ) [44]


> реализация join двух таблиц из разных баз на уровне
> приложения — дело 5 минут.

select Mens.FIO
from Mens, Auto
where Mens.AutoId = Auto.Id and Auto.Mark = «Волга»
таблица Mens — в одной базе, Auto — в другой. Волг в базе пара тысяч. И как? Выберем мы все Id волг, а дальше что? Что то мне кажется, что запрос «select Mens.FIO from Mens where Mens.AutoId in (тут список из пары тысяч чисел)» не очень быстро будет выполняться.


nikkie © ( 2004-08-27 16:06 ) [45]

>jack128
избалован народ sql-ем. а подумать если? как до sql join делали? открываем два согласованных индекса и синхронно по ним движемся. для sql базы — 2 запроса с одинаковыми order by.


Danilka © ( 2004-08-27 16:16 ) [46]

[41] nikkie © (27.08.04 15:49)
> а представь, что у тебя есть 2 живых системы, которые активно
> обновляют разными базами. ты будешь постоянно эти две базы
> в одну сливать или предпочтешь работать с двумя разными?

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

[42] Игорь Шевченко © (27.08.04 15:50)
> Например, на Oracle. Он позволяет

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


jack128 © ( 2004-08-27 16:24 ) [47]

nikkie © (27.08.04 16:06) [45]
как до sql join делали? открываем два согласованных индекса и синхронно по ним движемся. для sql базы — 2 запроса с одинаковыми order by

До SQL — это когда по земле бродили динозавры? Меня тогда еще не было.. Сенкс.


Danilka © ( 2004-08-27 16:27 ) [48]

[45] nikkie © (27.08.04 16:06)
Тащить все на клиента — не лучший вариант. Конечно, если он один с этими базами работает, и сервер на его машине, то.. :))


nikkie © ( 2004-08-27 17:04 ) [49]

>Danilka
>Тащить все на клиента — не лучший вариант. Конечно, если он один с этими базами работает, и сервер на его машине, то.. 🙂

никто не мешает запускать приложение на сервере. можно средним уровнем сделать.

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

я бы сказал, что клиент-сервер и вообще sql базы — это не панацея. и прежде, чем бросаться заливать все в свой любимый , стоит подумать.


Игорь Шевченко © ( 2004-08-27 17:08 ) [50]

nikkie © (27.08.04 17:04) [49]

И не размещать нужные одновременно данные в двух разных базах 🙂


nikkie © ( 2004-08-27 17:32 ) [51]

>И не размещать нужные одновременно данные в двух разных базах 🙂

даешь одну Универсальную Базу (УБ)! 🙂

а потом на основе УБ Дм.О.-чу будет легче Матрицу сделать. :))

кстати, хорошо бы, чтобы новая версия конвектора форматов умела данные в УБ заливать.


Игорь Шевченко © ( 2004-08-27 17:33 ) [52]


> а потом на основе УБ Дм.О.-чу будет легче Матрицу сделать.
> :))

Да она глючить будет.


Труп Васи Доброго © ( 2004-08-27 17:35 ) [53]

Сервер один, баз две (пока две) и приложений, которые работают с этими базами два (каждое со своей)(Т.е. два различных приложения на нескольких клиентах), но вот в каждой базе есть одна одинаковая(. ) таблица, по которой надо делать запрос к обеим базам из третьего приложения.
Пока никаких реальных предложений нет 🙁


Игорь Шевченко © ( 2004-08-27 17:37 ) [54]

Пока не поздно переделать.


Труп Васи Доброго © ( 2004-08-27 17:44 ) [55]


> Пока не поздно переделать.

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


nikkie © ( 2004-08-27 17:51 ) [56]

>надо делать запрос к обеим базам из третьего приложения
не вижу проблем.


Desdechado © ( 2004-08-27 18:52 ) [57]

>надо делать запрос к обеим базам из третьего приложения.
так из ХП или из приложения? определись-таки .

>Пока никаких реальных предложений нет
а как тебе вариант 3 из [32]? пробовал? или просто лень?

Источник

Adblock
detector