Страница 1 из 2
Подключение к нескольким базам.
Добавлено: 17 окт 2006, 11:11
Akella
Вопрос, конечно, избитый. Знаю, что можно как-то через BDE.
НО... вот прочитав книгу Хелен Борри, узнал, что FireBird может подключаться к нескольким базам одновременно в пределах одной транзакции. К сожалению нет описания, нет примеров в книге.
вот цитирую
стр. 537 "Одна транзакция - много запросов"
стр. 580 "Транзакция для нескольких баз данных"
FireBird. Руководство разработчика баз данных. Наиболее полное руководство. В подленнике (Хелен Борри).
Одна транзакция, много запросов
Одна транзакция в своих границах может включать один или много клиентских запросов и ответов сервера. Одна транзакция может использовать более одной базы данных, осуществляя операции чтения и записи во многих базах данных в процессе решения задачи.
Глава 27. Программирование с транзакциями 581
Транзакции для нескольких баз данных
Firebird поддерживает операции над несколькими базами данных под управлением одной транзакции. Он автоматически реализует двухфазное подтверждение (Two-Phase Commit, 2PC), чтобы гарантировать, что транзакция не подтвердит работу в одной базе данных, пока не будет возможности подтвердить работу в других базах данных. Данные никогда не будут частично подтвержденными.
На первой фазе двухфазного подтверждения или отката Firebird подготавливает к подтверждению (или откату) работу в каждой базе данных, разделяя транзакцию на подтранзакции, по одной для каждой базы данных, и посылает (post) изменения в каждую базу данных. В этот момент все подтранзакции имеют "переходное" состояние. Если первая фаза завершается, то на второй фазе каждая подтранзакция отмечается для подтверждения или отката в том же порядке, в котором каждые части были подготовлены.
? Если это операция подтверждения и какая-нибудь подтранзакция не может быть
подтверждена, возникает исключение. Все подтранзакции, отмеченные для под
тверждения, переводятся в "переходное" состояние, а состояние базы данных не
изменяется ни при каких условиях.
- Если подтверждение везде выполнилось успешно, то все подтранзакции перево
дятся в состояние "подтвержденные", а изменения базы данных становятся посто
янными.
- Если это операция отката, то подтранзакции переводятся в состояние отмены.
Добавлено: 17 окт 2006, 11:21
WildSery
А где собственно вопрос?
Добавлено: 17 окт 2006, 11:31
Akella
WildSery писал(а):А где собственно вопрос?
не умничай.
Вот тебе ворос: как средствами сервера сделать выборку из двух баз данных? У меня есть IBExpert. Что и где нуна написать, чтобы выбрать данные из двух аблиц разных баз данных?
И вопрос в догонку: есть fibPlus2006, как с помощью этих компонентов в своём приложении (BDS2006) можно вывести результаты в грид?
думаю, что вопросы понятны.

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

Добавлено: 17 окт 2006, 12:22
Akella
А как бы Кузьменко привлечь в эту тему? Он же переводил эту книгу? Мог бы сделать примечание.

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

??
Добавлено: 17 окт 2006, 12:54
WildSery
2 Database, 2 Transaction, 2 компонента чтения.
Не лепи к своей (пока непонятной) задаче двухфазный коммит.
Наткнувшись на какой-то новый для себя инструмент, не надо пытаться обязательно его куда-нибудь применить, "чтобы было".
Когда у тебя возникнет задача связанного изменения данных в двух и более базах - вот тогда к нему и вернёшься.
Добавлено: 17 окт 2006, 12:59
Akella
Не лепи к своей (пока непонятной) задаче двухфазный коммит.
пока ещё не совсем въехал, где и как его можно применить.
Наткнувшись на какой-то новый для себя инструмент, не надо пытаться обязательно его куда-нибудь применить, "чтобы было".
сначало что-то нужно изучить, понять, чтобы вообще знать где "это что-то" можно было бы применить.
Добавлено: 17 окт 2006, 13:02
Dimitry Sibiryakov
Все именно так и есть: бросаешь на форму две базы, одну транзакцию и два запроса. Один запрос к одной базе, другой - к другой. Но в пределах одной транзакции. Вот ты и обратился к двум базам в одной транзакции, поздравляю.
Добавлено: 17 окт 2006, 13:07
Merlin
Akella писал(а):Не лепи к своей (пока непонятной) задаче двухфазный коммит.
пока ещё не совсем въехал, где и как его можно применить.
Самое главное - ни в коем разе не читать
http://www.ibase.ru/devinfo/ibtrans.htm , а то там даже картинка нарисована, неинтересно станет. Тока обратиться к двум базам в одном
запросе это не поможет.
Добавлено: 17 окт 2006, 13:31
kdv
двухфазный коммит описан тут
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 и вперед, отдельными запросами...
Добавлено: 17 окт 2006, 14:05
Akella
Вроде дошло, что имела ввиду автор книги под понятием "Транзакции для нескольких баз данных ".
Это, конечно, не моё дело, но я бы на месте автора в следующем издении книги немного переписал эту тему хотябы для того, чтобы разъяснить ещё в начале темы ДЛЯ ЧЕГО вообще нужно оперировать над двумя разными БД. Мало того в книге ничего нет о том, что можно "оперировать" не только над двумя базами одного сервера, а даже над разными серверами.
Всем большое спасибо. Вроде розобрался.
Будем ждать следующее издение книги. В целом мне она очень нравиться.

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

), тогда лишь понял, что можно к разным серверам даже, а не только к разным базам одного сервера
Добавлено: 17 окт 2006, 16:00
kdv
так я и говорю - при чем тут сервер? Для сервера что одна база, что 100 - без разницы. Для клиента то же самое в отношении баз на одном или разных серверах. Двухфазный коммит осуществляется между "коннектами". А какие базы на каких серверах в них открыты, значения не имеет.
Добавлено: 17 окт 2006, 16:17
Akella
Двухфазный коммит осуществляется между "коннектами".
О! Вот так бы и сразу написала бы(имею ввиду автора книги).
Большое спасибо Вам и автору книги.
И конечно большое спасибо всем, кто ответил на мои вопросы в этой теме.
Добавлено: 18 ноя 2006, 02:34
sallerman
Akella писал(а):А как бы Кузьменко привлечь в эту тему? Он же переводил эту книгу? Мог бы сделать примечание.

А что, этот товарисч реально прошарен

Мне надобно тут одну штуку спросить. Как сформулирую напишу...
