Подгрузить данные из одной базы в другую

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
DS
Сообщения: 41
Зарегистрирован: 17 фев 2005, 16:54

Подгрузить данные из одной базы в другую

Сообщение DS » 28 мар 2009, 16:26

FB2.1, delphi.
Привет, вот выросла такая задача:
Есть работающая программа с базой FB (db1). Заказчик хочет расширить функционал: задача написать отдельную прогу с новой базой(db2).
В db1 таблица tb1(id, fio, tel, adr...)
В db2 таблица tb2(id, fld1, fld2, fld3...)
Между 2 базами имеется логическая связь по id.
Ну и соответственно, надо во второй программе получить id, fio, tel, adr, fld1, fld2, fld3...

Пробовал с External File, почти то что надо, только как его очистить/удалить ??? Я так понял там дропаются только ссылки на файл, а сам он остается.
Посмотрел на GLOBAL TEMPORARY TABLES, но они вроде глобальные только в пределах базы данных.

Ощущение, что изобретаю велосипед.
Просьба пнуть в нужном направлении.

...
вот написано :
Global Temporary Tables - предопределенные глобальные временные таблицы, не привязанные к каким-то базам. Например, подходят для хранения временных данных на время сессии или транзакции, после чего автоматически будут удалены;
Вроде то, что мне нужно, а как заюзать - непонятно :(

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Подгрузить данные из одной базы в другую

Сообщение Dimitry Sibiryakov » 29 мар 2009, 13:24

Во-первых, если во второй БД поля действительно называются fld1, fld2, fld3, то ну-ка её нафиг, такую базу.
Во-вторых, в топку вторую БД в любом случае - добавь нужные таблицы в первую БД и пусть оба приложения работают с одной базой.
В-третьих, если первые два пути не для тебя - добавь таблицу tb1 во вторую БД и перенеси в неё данные из первой БД. Разово или любым репликатором.

DS
Сообщения: 41
Зарегистрирован: 17 фев 2005, 16:54

Re: Подгрузить данные из одной базы в другую

Сообщение DS » 29 мар 2009, 14:23

Dimitry Sibiryakov писал(а):Во-первых, если во второй БД поля действительно называются fld1, fld2, fld3, то ну-ка её нафиг, такую базу.
Ну, нет конечно :D так написал чтоб быстрее было.
Dimitry Sibiryakov писал(а):Во-вторых, в топку вторую БД в любом случае - добавь нужные таблицы в первую БД и пусть оба приложения работают с одной базой.
Да я бы тоже за такой путь - правильнее и проще, попробую убедить заказчика.
Dimitry Sibiryakov писал(а):В-третьих, если первые два пути не для тебя - добавь таблицу tb1 во вторую БД и перенеси в неё данные из первой БД. Разово или любым репликатором.
Пока (до разговора с заказчиком) на нем и остановился. Создал в БД2 GTT, в которую клиентом и закачиваю нужную выборку.
Дмитрий, может подскажете как понимать/использовать глобальность GTT (с ее временностью все понятно).

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Подгрузить данные из одной базы в другую

Сообщение kdv » 29 мар 2009, 14:36

может подскажете как понимать/использовать глобальность GTT (с ее временностью все понятно).
для начала стоит подумать, кто такой opennet, и почему он написал такую херню про GTT.
Это скорее всего "вольная интерпретация" того, что GTT просто не хранятся в базе, и физически размещаются сервером вне файла БД.

Короче, не читайте "советских газет", и все будет ок.

DS
Сообщения: 41
Зарегистрирован: 17 фев 2005, 16:54

Re: Подгрузить данные из одной базы в другую

Сообщение DS » 29 мар 2009, 15:01

kdv писал(а):Короче, не читайте "советских газет", и все будет ок.
Спасибо, Дмитрий.
А развейте мои сомнения про External Tables:
1. Внешний файл создается сервером (в разрешенной в cfg директории сервера)
2. В него можно только инсертить (пардон) и потом селектить. DELETE и UPDATE не поддерживаются.
3. DROP TABLE для такой таблицы убивает только ссылку в БД на данный файл, а сам файл остается.
4. Исходя из 2 и 3 средствами сервера ни удалить файл, ни почистить нельзя.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Подгрузить данные из одной базы в другую

Сообщение kdv » 29 мар 2009, 20:07

А развейте мои сомнения про External Tables:
как бы, в документации по IB 6.0 все изложено...
1. нет. файл создается если начать туда вставлять данные.
2. да
3. да
4. да.
еще в external table нельзя работать с блобами (фиксированный размер записи).

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Подгрузить данные из одной базы в другую

Сообщение Dimitry Sibiryakov » 30 мар 2009, 13:09

DS писал(а):Создал в БД2 GTT, в которую клиентом и закачиваю нужную выборку.
А нахрена GTT? Я же сказал - нормальную таблицу. Как ты FK поддерживать будешь (как тебе уже сказал ДК)?

Ответить