Страница 1 из 2
Сожительство 3-х версий сервера
Добавлено: 13 фев 2006, 12:36
Desdechado
Проштудировал
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-х. Может, можно без реестра обойтись?
Как сделать?
Добавлено: 13 фев 2006, 13:18
kdv
embedded-у все это пофиг, у него firebird.msg должен рядом с ним лежать, и порт ему тоже ни к чему.

Так что его можно исключить из данного вопроса.
Насчет остальных серверов, что они "не видят" - это как то странно, т.к. для одного из серверов обязательно надо instreg запускать. Допустим, FB 1.5 сделать как положено, как будто он один, а для FB 2. прописать в firebird.conf параметр rootDirectory.
Добавлено: 13 фев 2006, 15:37
Desdechado
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 влияет или еще на что-то?
Добавлено: 13 фев 2006, 16:36
kdv
Сама DLL сервера вообще на другом диске лежит вместе с msg.
это как? вообще то он должен лежать рядом с exe. если про embedded.
а если про сервер, то да, рядом с dll. что-то я не пойму - у тебя клиент там же где и серверы, или нет?
Добавлено: 13 фев 2006, 16:58
dimitr
из реестра вообще все убирай, живут без этого сервера. Конфиг не трогать. firebird.msg в руте каждой инсталляции.
Добавлено: 13 фев 2006, 18:07
Desdechado
вообще то он должен лежать рядом с exe. если про embedded.
Допустим, есть IBExpert. И есть моя программка. Через IBExpert я работаю с БД трех FB-серверов, установленных у меня на машине. Из своей программки - только с FB Embedded.
Я положил fbembed.dll и firebird.msg рядом со своей программкой. Но при подключении из IBexpert к Embedded указываю DLL рядом со своей программкой.
Если я положу еще один fbembed.dll, но уже рядом с IBExpert, то ведь при подключении к одной БД они подерутся.
из реестра вообще все убирай, живут без этого сервера
Теперь не-Embedded задышали. Осталось только Embedded "завести".
Благодарю за ответы.
Добавлено: 13 фев 2006, 18:35
kdv
Но при подключении из IBexpert к Embedded
зачем, скажи пожалуйста? ты faq прочитал? embedded осуществляет МОНОПОЛЬНОЕ соединение.
Вообще embedded - это сервер в dll. Exe грузит dll, и получается СЕРВЕР. Один exe - одна база. Два exe - НЕТ. Идея двумя разными embedded подключиться к одной базе - еще круче, хотя по смыслу она не отличается от двух экземпляров одних и тех же exe+dll.
Embedded предназначен ДЛЯ РАСПРОСТРАНЕНИЯ. Не для разработки, потому что ты получишь гемор, изложенный выше - единовременно к базе через embedded может коннектиться ТОЛЬКО ОДИН ПРОЦЕСС (exe).
Указывая клиентскую dll для коннекта ты указываешь НЕ коннект через embedded. Ты указываешь, каким клиентом соединяться С СЕРВЕРОМ. И если эта dll embedded не находится в каталоге ibexpert, то ...
устал я объяснять. ничего тут сложного нет, вообще.
Добавлено: 13 фев 2006, 18:38
kdv
чую, придется мне написать микро-опус в картинках "что такое Embedded". Какая то вечная засада. Вроде объясняешь, а оказывается что человек не въезжает, что такое dll и как оно грузится exe (про тебя не знаю, это я вообще, риторически). В результате - тупик.
Добавлено: 13 фев 2006, 18:47
kdv
писать ничего не стал, просто чуть подредактил и повыделял нужные места жирным шрифтом в
www.ibase.ru/ibfaq.htm#embedded
Добавлено: 13 фев 2006, 18:59
Desdechado
Embedded предназначен ДЛЯ РАСПРОСТРАНЕНИЯ. Не для разработки, потому что ты получишь гемор, изложенный выше.
Уже получил. Просто хотелось в "боевых условиях", так сказать.
при использовании Embedded/Personal сервером является именно ваше приложение, "падение" (по AccessViolation) приложения из-за ошибки в вашем коде может привести к повреждению базы данных
Это плохо

Какие именно AV могут "накрыть" БД тазиком? А то ведь всяких дырок не предусмотришь...
При нормальном сервере падение приложения не страшно, а тут что-то стрёмно очень...
Добавлено: 13 фев 2006, 19:14
kdv
опять двадцать пять

Embedded = DLL. DLL+твой EXE и есть сервер. Не dll сервер, а твой exe, потому что операционка запускает exe, а он грузит dll. И dll работает в адресном пространстве exe.
то есть, любая утечка памяти, кореженье памяти или падение твоего приложения (exe), означает то же самое в отношении сервера. Если твой exe валится по AV, то это почти эквивалент падению сервера по AV ("почти" потому что падение не по его причине, а по причине exe).
понятно?
При нормальном сервере падение приложения не страшно, а тут что-то стрёмно очень...
при нормальном - понятно, потому что сервер ничего кроме обрыва коннекта не увидит. А для embedded падение приложения эквивалентно падению сервера. И как там фишка ляжет - неизвестно.
Добавлено: 13 фев 2006, 19:19
Desdechado
понятно?
Спасибо, что еще раз разжевали про EXE+DLL=сервер. Но это я понял еще постом выше
Меня интересуют именно виды AV, портящие БД. Например, обращение к некоторому объекту, который уже разрушен, или выход за границы массива - это все AV. Но неужели они могут попортить БД?!
Добавлено: 13 фев 2006, 19:45
kdv
смотря что будет дальше после av. если порча памяти, то смотря куда попадет. Если аварийное завершение работы приложения, то это все равно что reset на сервере нажать. А у нас в ремонте баз поломанных из-за ресета (или сбоев по питанию) хватает.
кстати, альтернативный вариант - кривая udf (dll) на сервере, из-за которой падает сервер. Это почти то же самое, что кривой exe + dll.
Добавлено: 13 фев 2006, 19:51
Desdechado
аварийное завершение работы приложения
Т.е. если "особо вумный" юзер из диспетчера задач срубает программу, которая, как ему показалось, зависла (ну, долго что-то считает или в ХП данные ковыряет), то это смерть базе?
А ForcedWrites в этом случае не поможет?
А автооткат транзакций?
Что-то я устрашаюсь все больше и больше

Нафига тогда вообще Embedded? Только для доступа к БД в режиме read-only? Все прочие режимы просто стрёмные какие-то...
Добавлено: 13 фев 2006, 22:00
kdv
то это смерть базе?
смотря чего с этой базой в данный момент делает приложение. Ты меня уже утомил, честное слово, почитай варианты повреждения БД, выбери нужные -
www.ibase.ru/devinfo/db_repair.htm
А ForcedWrites в этом случае не поможет?
уменьшит число возможных проблем.
А автооткат транзакций?
какой-такой "автооткат"???
Все прочие режимы просто стрёмные какие-то...
столь же стремные, как и запуск сервера на win98, не более того.
Непонятно, чего ты пугаешься - пиши приложения лучше. А пользователя, если он захочет рубануть приложение, предупреждай в документации, заставляй делать бэкапы, не допускай в приложении долгих "песочных часов".... Пользовательская машина на самом деле куда более "стрёмная" чем сервер, сама по себе - пользователь может забить весь диск, запустить вирус, случайно стереть файлы и папки, открыть базу word-ом или excel-ем, убить операционку, и т.д., и т.п. Если ты и этого боишься, ну не пиши программы тогда

Добавлено: 13 фев 2006, 22:58
Desdechado
почитай варианты повреждения БД, выбери нужные
Читал, и не раз. И ремонтировал не раз. И больше как-то не хочется. Поэтому "нужных" там нет
какой-такой "автооткат"???
Имеется ввиду, что неподтвержденные транзакции откатываются. При падении сервера они же не подтверждаются, надеюсь.
пиши приложения лучше
Стараюсь. Но когда вдруг мое приложение становится еще и сервером, мера ответственности выше на порядок.
пользователя предупреждай в документации
кто ее читает, интересно
заставляй делать бэкапы
Если программа идет как коробочный продукт для домохозяек, то понятие бэкапа для них нечто из потустороннего мира, имхо. И, как обычно, пока гром не грянет...
Если ты и этого боишься
Лучше быть подготовленным к возможным проблемам заранее. А то есть некоторые пользователи, которые просто "клиника".
Спасибо за помощь.
Добавлено: 14 фев 2006, 09:00
Ivan_Pisarevsky
Если программа идет как коробочный продукт для домохозяек, то понятие бэкапа для них нечто из потустороннего мира, имхо. И, как обычно, пока гром не грянет...
Что мешает включить в свою программу обкртку для gbak.exe и добровольно-принудитьно бэкапить базу (например программа заглядывает в каталог с бэкапами, видит, что последний бэкап сделан больше недели назад, говорит юзеру "Тэк-с, красавица, дальше не едем, пока не забэкапимся, расслабься, погляди в окошко, можно в это время мультик ей какой-нидь показать")

Добавлено: 14 фев 2006, 09:49
kdv
Имеется ввиду, что неподтвержденные транзакции откатываются. При падении сервера они же не подтверждаются, надеюсь.
неподтвержденные транзакции не "откатываются", если придраться к такой терминологии. повреждения БД к "откату" или еще чему отношения не имеют.
Добавлено: 14 фев 2006, 14:02
dimitr
Если в твоей программе нет ошибок, связанных с доступом к "чужой" памяти и если используешь FW=ON, то база повреждаться не должна. Орфаны не считаются.
Добавлено: 14 фев 2006, 22:38
smu
dimitr писал(а):.. Орфаны не считаются.
Прошу прощения за дурацкий вопрос.

Что такое Орфан?