Сожительство 3-х версий сервера
Модераторы: kdv, Alexey Kovyazin
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Сожительство 3-х версий сервера
Проштудировал 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-х. Может, можно без реестра обойтись?
Как сделать?
Установил FB1.5.2, FB2.0, FB1.5.2 Embedded.
Выкинул из общих папок gds32.dll, разнес по портам. Все вроде работает (подключаюсь с указанием конкретных библиотек у каждого сервера).
Но терзает одно неудобство. Firebird.msg не видит ни один сервер. А ведь у каждого свой должен быть. Как их настроить для ОДНОВРЕМЕННОЙ работы серверов. Этого не нашел.
В SOFTWARE\Firebird Project\Firebird Server\Instances\DefaultInstance прописывается только для какого-то одного. А мне нужно сразу для 3-х. Может, можно без реестра обойтись?
Как сделать?
embedded-у все это пофиг, у него firebird.msg должен рядом с ним лежать, и порт ему тоже ни к чему. Так что его можно исключить из данного вопроса.
Насчет остальных серверов, что они "не видят" - это как то странно, т.к. для одного из серверов обязательно надо instreg запускать. Допустим, FB 1.5 сделать как положено, как будто он один, а для FB 2. прописать в firebird.conf параметр rootDirectory.
Насчет остальных серверов, что они "не видят" - это как то странно, т.к. для одного из серверов обязательно надо instreg запускать. Допустим, FB 1.5 сделать как положено, как будто он один, а для FB 2. прописать в firebird.conf параметр rootDirectory.
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Лежит. Но получаю сообщения вида: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".
Код: Выделить всё
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".
А можно ли для обоих серверов так сделать, не трогая реестр? И этот параметр rootDirectory - он только на поиск .msg влияет или еще на что-то?для FB 2 прописать в firebird.conf параметр rootDirectory
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Допустим, есть IBExpert. И есть моя программка. Через IBExpert я работаю с БД трех FB-серверов, установленных у меня на машине. Из своей программки - только с FB Embedded.вообще то он должен лежать рядом с exe. если про embedded.
Я положил fbembed.dll и firebird.msg рядом со своей программкой. Но при подключении из IBexpert к Embedded указываю DLL рядом со своей программкой.
Если я положу еще один fbembed.dll, но уже рядом с IBExpert, то ведь при подключении к одной БД они подерутся.
Теперь не-Embedded задышали. Осталось только Embedded "завести".из реестра вообще все убирай, живут без этого сервера
Благодарю за ответы.
зачем, скажи пожалуйста? ты faq прочитал? embedded осуществляет МОНОПОЛЬНОЕ соединение.Но при подключении из IBexpert к Embedded
Вообще embedded - это сервер в dll. Exe грузит dll, и получается СЕРВЕР. Один exe - одна база. Два exe - НЕТ. Идея двумя разными embedded подключиться к одной базе - еще круче, хотя по смыслу она не отличается от двух экземпляров одних и тех же exe+dll.
Embedded предназначен ДЛЯ РАСПРОСТРАНЕНИЯ. Не для разработки, потому что ты получишь гемор, изложенный выше - единовременно к базе через embedded может коннектиться ТОЛЬКО ОДИН ПРОЦЕСС (exe).
Указывая клиентскую dll для коннекта ты указываешь НЕ коннект через embedded. Ты указываешь, каким клиентом соединяться С СЕРВЕРОМ. И если эта dll embedded не находится в каталоге ibexpert, то ...
устал я объяснять. ничего тут сложного нет, вообще.
писать ничего не стал, просто чуть подредактил и повыделял нужные места жирным шрифтом в
www.ibase.ru/ibfaq.htm#embedded
www.ibase.ru/ibfaq.htm#embedded
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Уже получил. Просто хотелось в "боевых условиях", так сказать.Embedded предназначен ДЛЯ РАСПРОСТРАНЕНИЯ. Не для разработки, потому что ты получишь гемор, изложенный выше.
Это плохо Какие именно AV могут "накрыть" БД тазиком? А то ведь всяких дырок не предусмотришь...при использовании Embedded/Personal сервером является именно ваше приложение, "падение" (по AccessViolation) приложения из-за ошибки в вашем коде может привести к повреждению базы данных
При нормальном сервере падение приложения не страшно, а тут что-то стрёмно очень...
опять двадцать пять
Embedded = DLL. DLL+твой EXE и есть сервер. Не dll сервер, а твой exe, потому что операционка запускает exe, а он грузит dll. И dll работает в адресном пространстве exe.
то есть, любая утечка памяти, кореженье памяти или падение твоего приложения (exe), означает то же самое в отношении сервера. Если твой exe валится по AV, то это почти эквивалент падению сервера по AV ("почти" потому что падение не по его причине, а по причине exe).
понятно?
Embedded = DLL. DLL+твой EXE и есть сервер. Не dll сервер, а твой exe, потому что операционка запускает exe, а он грузит dll. И dll работает в адресном пространстве exe.
то есть, любая утечка памяти, кореженье памяти или падение твоего приложения (exe), означает то же самое в отношении сервера. Если твой exe валится по AV, то это почти эквивалент падению сервера по AV ("почти" потому что падение не по его причине, а по причине exe).
понятно?
при нормальном - понятно, потому что сервер ничего кроме обрыва коннекта не увидит. А для embedded падение приложения эквивалентно падению сервера. И как там фишка ляжет - неизвестно.При нормальном сервере падение приложения не страшно, а тут что-то стрёмно очень...
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
смотря что будет дальше после av. если порча памяти, то смотря куда попадет. Если аварийное завершение работы приложения, то это все равно что reset на сервере нажать. А у нас в ремонте баз поломанных из-за ресета (или сбоев по питанию) хватает.
кстати, альтернативный вариант - кривая udf (dll) на сервере, из-за которой падает сервер. Это почти то же самое, что кривой exe + dll.
кстати, альтернативный вариант - кривая udf (dll) на сервере, из-за которой падает сервер. Это почти то же самое, что кривой exe + dll.
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Т.е. если "особо вумный" юзер из диспетчера задач срубает программу, которая, как ему показалось, зависла (ну, долго что-то считает или в ХП данные ковыряет), то это смерть базе?аварийное завершение работы приложения
А ForcedWrites в этом случае не поможет?
А автооткат транзакций?
Что-то я устрашаюсь все больше и больше
Нафига тогда вообще Embedded? Только для доступа к БД в режиме read-only? Все прочие режимы просто стрёмные какие-то...
смотря чего с этой базой в данный момент делает приложение. Ты меня уже утомил, честное слово, почитай варианты повреждения БД, выбери нужные - www.ibase.ru/devinfo/db_repair.htmто это смерть базе?
уменьшит число возможных проблем.А ForcedWrites в этом случае не поможет?
какой-такой "автооткат"???А автооткат транзакций?
столь же стремные, как и запуск сервера на win98, не более того.Все прочие режимы просто стрёмные какие-то...
Непонятно, чего ты пугаешься - пиши приложения лучше. А пользователя, если он захочет рубануть приложение, предупреждай в документации, заставляй делать бэкапы, не допускай в приложении долгих "песочных часов".... Пользовательская машина на самом деле куда более "стрёмная" чем сервер, сама по себе - пользователь может забить весь диск, запустить вирус, случайно стереть файлы и папки, открыть базу word-ом или excel-ем, убить операционку, и т.д., и т.п. Если ты и этого боишься, ну не пиши программы тогда
-
- Сообщения: 19
- Зарегистрирован: 02 авг 2005, 18:53
Читал, и не раз. И ремонтировал не раз. И больше как-то не хочется. Поэтому "нужных" там нетпочитай варианты повреждения БД, выбери нужные
Имеется ввиду, что неподтвержденные транзакции откатываются. При падении сервера они же не подтверждаются, надеюсь.какой-такой "автооткат"???
Стараюсь. Но когда вдруг мое приложение становится еще и сервером, мера ответственности выше на порядок.пиши приложения лучше
кто ее читает, интереснопользователя предупреждай в документации
Если программа идет как коробочный продукт для домохозяек, то понятие бэкапа для них нечто из потустороннего мира, имхо. И, как обычно, пока гром не грянет...заставляй делать бэкапы
Лучше быть подготовленным к возможным проблемам заранее. А то есть некоторые пользователи, которые просто "клиника".Если ты и этого боишься
Спасибо за помощь.
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Что мешает включить в свою программу обкртку для gbak.exe и добровольно-принудитьно бэкапить базу (например программа заглядывает в каталог с бэкапами, видит, что последний бэкап сделан больше недели назад, говорит юзеру "Тэк-с, красавица, дальше не едем, пока не забэкапимся, расслабься, погляди в окошко, можно в это время мультик ей какой-нидь показать")Если программа идет как коробочный продукт для домохозяек, то понятие бэкапа для них нечто из потустороннего мира, имхо. И, как обычно, пока гром не грянет...