Подключение к нескольким базам.

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

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

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Подключение к нескольким базам.

Сообщение Akella » 17 окт 2006, 11:11

Вопрос, конечно, избитый. Знаю, что можно как-то через BDE.
НО... вот прочитав книгу Хелен Борри, узнал, что FireBird может подключаться к нескольким базам одновременно в пределах одной транзакции. К сожалению нет описания, нет примеров в книге.

вот цитирую
стр. 537 "Одна транзакция - много запросов"
стр. 580 "Транзакция для нескольких баз данных"
FireBird. Руководство разработчика баз данных. Наиболее полное руководство. В подленнике (Хелен Борри).
Одна транзакция, много запросов
Одна транзакция в своих границах может включать один или много клиентских запросов и ответов сервера. Одна транзакция может использовать более одной базы данных, осуществляя операции чтения и записи во многих базах данных в процессе решения задачи.
Глава 27. Программирование с транзакциями 581
Транзакции для нескольких баз данных
Firebird поддерживает операции над несколькими базами данных под управлением одной транзакции. Он автоматически реализует двухфазное подтверждение (Two-Phase Commit, 2PC), чтобы гарантировать, что транзакция не подтвердит работу в одной базе данных, пока не будет возможности подтвердить работу в других базах данных. Данные никогда не будут частично подтвержденными.
На первой фазе двухфазного подтверждения или отката Firebird подготавливает к подтверждению (или откату) работу в каждой базе данных, разделяя транзакцию на подтранзакции, по одной для каждой базы данных, и посылает (post) изменения в каждую базу данных. В этот момент все подтранзакции имеют "переходное" состояние. Если первая фаза завершается, то на второй фазе каждая подтранзакция отмечается для подтверждения или отката в том же порядке, в котором каждые части были подготовлены.
? Если это операция подтверждения и какая-нибудь подтранзакция не может быть
подтверждена, возникает исключение. Все подтранзакции, отмеченные для под
тверждения, переводятся в "переходное" состояние, а состояние базы данных не
изменяется ни при каких условиях.
- Если подтверждение везде выполнилось успешно, то все подтранзакции перево
дятся в состояние "подтвержденные", а изменения базы данных становятся посто
янными.
- Если это операция отката, то подтранзакции переводятся в состояние отмены.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 окт 2006, 11:21

А где собственно вопрос?

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 11:31

WildSery писал(а):А где собственно вопрос?
не умничай. :(
Вот тебе ворос: как средствами сервера сделать выборку из двух баз данных? У меня есть IBExpert. Что и где нуна написать, чтобы выбрать данные из двух аблиц разных баз данных?
И вопрос в догонку: есть fibPlus2006, как с помощью этих компонентов в своём приложении (BDS2006) можно вывести результаты в грид?
думаю, что вопросы понятны. :idea:

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 17 окт 2006, 12:09

Akella писал(а): не умничай. :(
Вот тебе ворос: как средствами сервера сделать выборку из двух баз данных? У меня есть IBExpert. Что и где нуна написать, чтобы выбрать данные из двух аблиц разных баз данных?
Два коннекта к разным базам, например, но сомневаюсь, что это можно сделать в IBExpert
Akella писал(а): И вопрос в догонку: есть fibPlus2006, как с помощью этих компонентов в своём приложении (BDS2006) можно вывести результаты в грид?
думаю, что вопросы понятны. :idea:
Почитать хелп по данным компонентам и сделать, как там сказано.
связка самая обычная
TpFIBDatabase - TpFIBDataSet - TDataSource - TDBGrid
и не забыть про TpFIBTransaction

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 17 окт 2006, 12:15

Akella писал(а):
WildSery писал(а):А где собственно вопрос?
не умничай. :(
Вот тебе ворос: как средствами сервера сделать выборку из двух баз данных? У меня есть IBExpert. Что и где нуна написать, чтобы выбрать данные из двух аблиц разных баз данных?
И вопрос в догонку: есть fibPlus2006, как с помощью этих компонентов в своём приложении (BDS2006) можно вывести результаты в грид?
думаю, что вопросы понятны. :idea:
Выборку из двух БД делать нельзя, не такой возможности. Двухфозное подтверждение/откат - это совсем другая песня.
По второму вопросу - какие проблемы. Берешь связку DataSet - DataSource - DBGrid и наслаждайся.

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 12:19

Почитать хелп по данным компонентам и сделать, как там сказано.
связка самая обычная
TpFIBDatabase - TpFIBDataSet - TDataSource - TDBGrid
и не забыть про TpFIBTransaction
TpFIBDatabase ведь подключается к одной базе :(

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 12:22

А как бы Кузьменко привлечь в эту тему? Он же переводил эту книгу? Мог бы сделать примечание. :idea:

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 окт 2006, 12:32

Akella писал(а):А как бы Кузьменко привлечь в эту тему? Он же переводил эту книгу? Мог бы сделать примечание.
Ты не понял, что прочитал, и обвиняешь в этом автора. Двухфазный коммит не имеет никакого отношения к чтению данных одновременно из двух баз.
Работать одновременно с несколькими базами можно, но соединений и транзакций будет как минимум по числу баз. И JOIN из нескольких баз сделать нельзя, только на клиенте их можно объединить.

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 12:44

т.е. кидаем на форму 2 компоненты Database, одну транзакцию, и присваиваем эту одну транзакцию обеим Database?, так?
или опять не понял?
Пожалуйста, объясните популярно. И зачем мне делыть двухфазное поддтверждение, если я не могу добраться до таблиц вообще :( ??

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 окт 2006, 12:54

2 Database, 2 Transaction, 2 компонента чтения.
Не лепи к своей (пока непонятной) задаче двухфазный коммит.

Наткнувшись на какой-то новый для себя инструмент, не надо пытаться обязательно его куда-нибудь применить, "чтобы было".
Когда у тебя возникнет задача связанного изменения данных в двух и более базах - вот тогда к нему и вернёшься.

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 12:59

Не лепи к своей (пока непонятной) задаче двухфазный коммит.
пока ещё не совсем въехал, где и как его можно применить.
Наткнувшись на какой-то новый для себя инструмент, не надо пытаться обязательно его куда-нибудь применить, "чтобы было".
сначало что-то нужно изучить, понять, чтобы вообще знать где "это что-то" можно было бы применить.

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

Сообщение Dimitry Sibiryakov » 17 окт 2006, 13:02

Все именно так и есть: бросаешь на форму две базы, одну транзакцию и два запроса. Один запрос к одной базе, другой - к другой. Но в пределах одной транзакции. Вот ты и обратился к двум базам в одной транзакции, поздравляю.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 17 окт 2006, 13:07

Akella писал(а):
Не лепи к своей (пока непонятной) задаче двухфазный коммит.
пока ещё не совсем въехал, где и как его можно применить.
Самое главное - ни в коем разе не читать http://www.ibase.ru/devinfo/ibtrans.htm , а то там даже картинка нарисована, неинтересно станет. Тока обратиться к двум базам в одном запросе это не поможет.

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

Сообщение kdv » 17 окт 2006, 13:31

двухфазный коммит описан тут
www.ibase.ru/devinfo/ibtrans.htm#2pc

это именно то, про что ты спрашиваешь.
про гетерогенные запросы есть в конце www.ibase.ru/devinfo/bde.htm
гетерогенные запросы к IB/FB умеет выполнять только BDE. никакие другие компоненты этого не умеют. Потому что в них нет собственного парсера и "выполнятора" SQL. См. статью, там описано КАК делаются гетерогенные запросы.

p.s. в IBExpert есть сервисные вещи типа insert into select from, позволяющие брать данные из одной БД и класть в другую. Но это спецфишка IBExpert, которая программируется точно таким же образом - 2 IBDatabase и вперед, отдельными запросами...

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 14:05

Вроде дошло, что имела ввиду автор книги под понятием "Транзакции для нескольких баз данных ".

Это, конечно, не моё дело, но я бы на месте автора в следующем издении книги немного переписал эту тему хотябы для того, чтобы разъяснить ещё в начале темы ДЛЯ ЧЕГО вообще нужно оперировать над двумя разными БД. Мало того в книге ничего нет о том, что можно "оперировать" не только над двумя базами одного сервера, а даже над разными серверами.

Всем большое спасибо. Вроде розобрался.
Будем ждать следующее издение книги. В целом мне она очень нравиться. :)

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

Сообщение kdv » 17 окт 2006, 14:12

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

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 15:50

kdv писал(а):
Мало того в книге ничего нет о том, что можно "оперировать" не только над двумя базами одного сервера, а даже над разными серверами.
какая, собственно, разница? В книге написано что только одного сервера? Вряд-ли.
Нет в книге вообще не говориться о серверах, говориться о базах.
Прочитав Вашу документацию (с рисунком :)), тогда лишь понял, что можно к разным серверам даже, а не только к разным базам одного сервера

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

Сообщение kdv » 17 окт 2006, 16:00

так я и говорю - при чем тут сервер? Для сервера что одна база, что 100 - без разницы. Для клиента то же самое в отношении баз на одном или разных серверах. Двухфазный коммит осуществляется между "коннектами". А какие базы на каких серверах в них открыты, значения не имеет.

Akella
Сообщения: 95
Зарегистрирован: 13 дек 2005, 12:07

Сообщение Akella » 17 окт 2006, 16:17

Двухфазный коммит осуществляется между "коннектами".
О! Вот так бы и сразу написала бы(имею ввиду автора книги).
Большое спасибо Вам и автору книги.
И конечно большое спасибо всем, кто ответил на мои вопросы в этой теме.

sallerman

Сообщение sallerman » 18 ноя 2006, 02:34

Akella писал(а):А как бы Кузьменко привлечь в эту тему? Он же переводил эту книгу? Мог бы сделать примечание. :idea:
А что, этот товарисч реально прошарен:?: Мне надобно тут одну штуку спросить. Как сформулирую напишу...:wink:

Ответить