Сожительство 3-х версий сервера

Совместимость InterBase, Firebird, Yaffil между собой и по версиям

Модераторы: kdv, Alexey Kovyazin

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сожительство 3-х версий сервера

Сообщение Desdechado » 13 фев 2006, 12:36

Проштудировал http://www.ibase.ru/devinfo/inst_manual.htm
Установил FB1.5.2, FB2.0, FB1.5.2 Embedded.
Выкинул из общих папок gds32.dll, разнес по портам. Все вроде работает (подключаюсь с указанием конкретных библиотек у каждого сервера).
Но терзает одно неудобство. Firebird.msg не видит ни один сервер. А ведь у каждого свой должен быть. Как их настроить для ОДНОВРЕМЕННОЙ работы серверов. Этого не нашел.
В SOFTWARE\Firebird Project\Firebird Server\Instances\DefaultInstance прописывается только для какого-то одного. А мне нужно сразу для 3-х. Может, можно без реестра обойтись?
Как сделать?

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

Сообщение kdv » 13 фев 2006, 13:18

embedded-у все это пофиг, у него firebird.msg должен рядом с ним лежать, и порт ему тоже ни к чему. :) Так что его можно исключить из данного вопроса.

Насчет остальных серверов, что они "не видят" - это как то странно, т.к. для одного из серверов обязательно надо instreg запускать. Допустим, FB 1.5 сделать как положено, как будто он один, а для FB 2. прописать в firebird.conf параметр rootDirectory.

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 13 фев 2006, 15:37

embedded-у все это пофиг, у него firebird.msg должен рядом с ним лежать
Лежит. Но получаю сообщения вида:

Код: Выделить всё

can't format message 13:197 -- message file C:\Program Files\IB Expert\firebird.msg not found.
violation of PRIMARY or UNIQUE KEY constraint "PK_LOCALES" on table "LOCALES".
Сама DLL сервера вообще на другом диске лежит вместе с msg. Если подсунуть по пути в тексте ошибки необходимый firebird.msg, то текст уже другой:

Код: Выделить всё

Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK_LOCALES" on table "LOCALES".
Что не так с определением места msg?
для FB 2 прописать в firebird.conf параметр rootDirectory
А можно ли для обоих серверов так сделать, не трогая реестр? И этот параметр rootDirectory - он только на поиск .msg влияет или еще на что-то?

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

Сообщение kdv » 13 фев 2006, 16:36

Сама DLL сервера вообще на другом диске лежит вместе с msg.
это как? вообще то он должен лежать рядом с exe. если про embedded.

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

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 13 фев 2006, 16:58

из реестра вообще все убирай, живут без этого сервера. Конфиг не трогать. firebird.msg в руте каждой инсталляции.

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 13 фев 2006, 18:07

вообще то он должен лежать рядом с exe. если про embedded.
Допустим, есть IBExpert. И есть моя программка. Через IBExpert я работаю с БД трех FB-серверов, установленных у меня на машине. Из своей программки - только с FB Embedded.
Я положил fbembed.dll и firebird.msg рядом со своей программкой. Но при подключении из IBexpert к Embedded указываю DLL рядом со своей программкой.
Если я положу еще один fbembed.dll, но уже рядом с IBExpert, то ведь при подключении к одной БД они подерутся.
из реестра вообще все убирай, живут без этого сервера
Теперь не-Embedded задышали. Осталось только Embedded "завести".

Благодарю за ответы.

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

Сообщение kdv » 13 фев 2006, 18:35

Но при подключении из IBexpert к Embedded
зачем, скажи пожалуйста? ты faq прочитал? embedded осуществляет МОНОПОЛЬНОЕ соединение.
Вообще embedded - это сервер в dll. Exe грузит dll, и получается СЕРВЕР. Один exe - одна база. Два exe - НЕТ. Идея двумя разными embedded подключиться к одной базе - еще круче, хотя по смыслу она не отличается от двух экземпляров одних и тех же exe+dll.

Embedded предназначен ДЛЯ РАСПРОСТРАНЕНИЯ. Не для разработки, потому что ты получишь гемор, изложенный выше - единовременно к базе через embedded может коннектиться ТОЛЬКО ОДИН ПРОЦЕСС (exe).

Указывая клиентскую dll для коннекта ты указываешь НЕ коннект через embedded. Ты указываешь, каким клиентом соединяться С СЕРВЕРОМ. И если эта dll embedded не находится в каталоге ibexpert, то ...
устал я объяснять. ничего тут сложного нет, вообще.

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

Сообщение kdv » 13 фев 2006, 18:38

чую, придется мне написать микро-опус в картинках "что такое Embedded". Какая то вечная засада. Вроде объясняешь, а оказывается что человек не въезжает, что такое dll и как оно грузится exe (про тебя не знаю, это я вообще, риторически). В результате - тупик.

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

Сообщение kdv » 13 фев 2006, 18:47

писать ничего не стал, просто чуть подредактил и повыделял нужные места жирным шрифтом в
www.ibase.ru/ibfaq.htm#embedded

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 13 фев 2006, 18:59

Embedded предназначен ДЛЯ РАСПРОСТРАНЕНИЯ. Не для разработки, потому что ты получишь гемор, изложенный выше.
Уже получил. Просто хотелось в "боевых условиях", так сказать.
при использовании Embedded/Personal сервером является именно ваше приложение, "падение" (по AccessViolation) приложения из-за ошибки в вашем коде может привести к повреждению базы данных
Это плохо :( Какие именно AV могут "накрыть" БД тазиком? А то ведь всяких дырок не предусмотришь...
При нормальном сервере падение приложения не страшно, а тут что-то стрёмно очень...

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

Сообщение kdv » 13 фев 2006, 19:14

опять двадцать пять :-)
Embedded = DLL. DLL+твой EXE и есть сервер. Не dll сервер, а твой exe, потому что операционка запускает exe, а он грузит dll. И dll работает в адресном пространстве exe.

то есть, любая утечка памяти, кореженье памяти или падение твоего приложения (exe), означает то же самое в отношении сервера. Если твой exe валится по AV, то это почти эквивалент падению сервера по AV ("почти" потому что падение не по его причине, а по причине exe).

понятно? :)
При нормальном сервере падение приложения не страшно, а тут что-то стрёмно очень...
при нормальном - понятно, потому что сервер ничего кроме обрыва коннекта не увидит. А для embedded падение приложения эквивалентно падению сервера. И как там фишка ляжет - неизвестно.

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 13 фев 2006, 19:19

понятно?
Спасибо, что еще раз разжевали про EXE+DLL=сервер. Но это я понял еще постом выше :)

Меня интересуют именно виды AV, портящие БД. Например, обращение к некоторому объекту, который уже разрушен, или выход за границы массива - это все AV. Но неужели они могут попортить БД?!

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

Сообщение kdv » 13 фев 2006, 19:45

смотря что будет дальше после av. если порча памяти, то смотря куда попадет. Если аварийное завершение работы приложения, то это все равно что reset на сервере нажать. А у нас в ремонте баз поломанных из-за ресета (или сбоев по питанию) хватает.

кстати, альтернативный вариант - кривая udf (dll) на сервере, из-за которой падает сервер. Это почти то же самое, что кривой exe + dll.

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 13 фев 2006, 19:51

аварийное завершение работы приложения
Т.е. если "особо вумный" юзер из диспетчера задач срубает программу, которая, как ему показалось, зависла (ну, долго что-то считает или в ХП данные ковыряет), то это смерть базе?
А ForcedWrites в этом случае не поможет?
А автооткат транзакций?

Что-то я устрашаюсь все больше и больше :(
Нафига тогда вообще Embedded? Только для доступа к БД в режиме read-only? Все прочие режимы просто стрёмные какие-то...

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

Сообщение kdv » 13 фев 2006, 22:00

то это смерть базе?
смотря чего с этой базой в данный момент делает приложение. Ты меня уже утомил, честное слово, почитай варианты повреждения БД, выбери нужные - www.ibase.ru/devinfo/db_repair.htm
А ForcedWrites в этом случае не поможет?
уменьшит число возможных проблем.
А автооткат транзакций?
какой-такой "автооткат"???
Все прочие режимы просто стрёмные какие-то...
столь же стремные, как и запуск сервера на win98, не более того.

Непонятно, чего ты пугаешься - пиши приложения лучше. А пользователя, если он захочет рубануть приложение, предупреждай в документации, заставляй делать бэкапы, не допускай в приложении долгих "песочных часов".... Пользовательская машина на самом деле куда более "стрёмная" чем сервер, сама по себе - пользователь может забить весь диск, запустить вирус, случайно стереть файлы и папки, открыть базу word-ом или excel-ем, убить операционку, и т.д., и т.п. Если ты и этого боишься, ну не пиши программы тогда :)

Desdechado
Сообщения: 19
Зарегистрирован: 02 авг 2005, 18:53

Сообщение Desdechado » 13 фев 2006, 22:58

почитай варианты повреждения БД, выбери нужные
Читал, и не раз. И ремонтировал не раз. И больше как-то не хочется. Поэтому "нужных" там нет :)
какой-такой "автооткат"???
Имеется ввиду, что неподтвержденные транзакции откатываются. При падении сервера они же не подтверждаются, надеюсь.
пиши приложения лучше
Стараюсь. Но когда вдруг мое приложение становится еще и сервером, мера ответственности выше на порядок.
пользователя предупреждай в документации
кто ее читает, интересно :x
заставляй делать бэкапы
Если программа идет как коробочный продукт для домохозяек, то понятие бэкапа для них нечто из потустороннего мира, имхо. И, как обычно, пока гром не грянет...
Если ты и этого боишься
Лучше быть подготовленным к возможным проблемам заранее. А то есть некоторые пользователи, которые просто "клиника".

Спасибо за помощь.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 14 фев 2006, 09:00

Если программа идет как коробочный продукт для домохозяек, то понятие бэкапа для них нечто из потустороннего мира, имхо. И, как обычно, пока гром не грянет...
Что мешает включить в свою программу обкртку для gbak.exe и добровольно-принудитьно бэкапить базу (например программа заглядывает в каталог с бэкапами, видит, что последний бэкап сделан больше недели назад, говорит юзеру "Тэк-с, красавица, дальше не едем, пока не забэкапимся, расслабься, погляди в окошко, можно в это время мультик ей какой-нидь показать") :)

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

Сообщение kdv » 14 фев 2006, 09:49

Имеется ввиду, что неподтвержденные транзакции откатываются. При падении сервера они же не подтверждаются, надеюсь.
неподтвержденные транзакции не "откатываются", если придраться к такой терминологии. повреждения БД к "откату" или еще чему отношения не имеют.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 14 фев 2006, 14:02

Если в твоей программе нет ошибок, связанных с доступом к "чужой" памяти и если используешь FW=ON, то база повреждаться не должна. Орфаны не считаются.

smu
Сообщения: 39
Зарегистрирован: 29 окт 2005, 10:12

Сообщение smu » 14 фев 2006, 22:38

dimitr писал(а):.. Орфаны не считаются.
Прошу прощения за дурацкий вопрос. :( Что такое Орфан?

Ответить