Реклама:

info.krc.karelia.ru

win -:|:- koi -:|:- iso -:|:- dos -:|:- mac

Start -:|:- Проекты -:|:- О нас

Interbase 6 / Firebird FAQ

Частые вопросы и ответы по Interbase / Firebird / Yaffil
последнее обновление - 31.10.2002

Внимание! В данный FAQ не включены вопросы, которые присуствовали в старом FAQ по IB 4.x и 5.x. Поэтому данный FAQ можно считать продолжением старого (http://www.ibase.ru/devinfo/ibfaq.htm).

Автор - Кузьменко Дмитрий, http://www.ibase.ru/


Вопросы

Что нового в Interbase 7?
Что нового в Interbase 6?
какие версии платные, а какие бесплатные?
что нового в IB 6.5, почему он не бесплатный?
неужели IB 6 / Firebird бесплатный и в исходниках? и
кто такие Firebird, Yaffil и IBPhoenix?
отличается ли Interbase от Firebird?
после установки Firebird перестали работать кодировки
под какие платформы выпускается IB 6 и Firebird?
что такое "диалект"?
что такое IBX?
Как выполнять запросы параллельно в приложении? или Как работать с IB из threads?
будет ли FIBC поддерживать IB6?
где взять ODBC для 6.0?
русские буквы в InterClient
поддерживает ли BDE IB 6?
чем можно работать с IB 6?
как перейти с 5.6 на 6.x или 7.0?
не могу открыть базы данных от 5.x из 6.0 или unsupported on-disk structure for x.gdb;found 9, support 10
в чем разница между архитектурами SuperServer и Classic?
не могу подключить UDF
"Can not attach to password database" после установки
"...license file is missing or corrupt..." при запуске
select DISTINCT выполняется медленно или не использует индексы
что такое "сертифицированные билды"?
dpb constant 0 unknown
Клиент от Firebird, Yaffil и IB7 не работает под Win95
Есть ли Interbase 6 или Firebird для Novell Netware?
DBD: ошибка Not enough LongReadLen buffer
почему не используются два (четыре) процессора?
хочу шифровать трафик
медленный коннект (и работа) на WinMe/WinXP
не удается создать вторичный ключ (FK)
я удалил SYSDBA. Что делать?
что такое rdb$db_key?
как указать роль (ROLE) в BDE ?
Есть ли хостинг баз Interbase/Firebird/Yaffil?

Если вы среди вопросов не нашли нужный, то обратитесь к старому FAQ, или на http://www.interbase.com/, или на http://www.ibphoenix.com/. Вопросы и предложения по FAQ направляйте на адрес mailto:ib@demo.ru?Subject=FAQ.

Ответы

что нового в IB7?

A: Interbase 7 объявлен 29 октября 2002 года. Вот общий список новой функциональности:

поддержка многопроцессорных компьютеров (SMP)
тип данных BOOLEAN
новый JDBC драйвер (без InterServer)
имена объектов до 68 символов
временные системные таблицы для мониторинга статистики и управления сервером.

Подробнее см. http://www.ibase.ru/ib7.htm

что нового в IB6?

A: Вот сокращенный список наиболее существенных новых возможностей:

Более подробно - см. документ.

Со времени выпуска 6.0 Firebird, Yaffil и в т.ч. Borland Interbase 6.5 имеют дополнительную функциональность. См. соответствующую информацию.

Какие версии платные, а какие бесплатные?

С момента выпуска 6.0 прошло много времени. За это время у Borland Interbase стал платным.

Номер версии можно получить, запустив ibserver.exe с ключом -a, и наведя мышь на иконку на таскбаре - в результате будет выведен хинт с точной версией сервера.
Еще версию можно проверить, подсоединившись к IB при помощи IBConsole, IBExpert и другими средствами.

Итак:

При этом все версии Firebird - бесплатны. Yaffil - пока тоже бесплатны. Все версии от Borland начиная с 6.0.1.6 - платные, и бесплатных больше не будет.

Список дистрибутивов находится на http://www.ibase.ru/ib6.htm. Обратите внимание, что Borland в мае 2002 года обновил сайт, и убрал с download все платные и бесплатные версии, оставив только триал 6.5.

Для платных версий Borland использует старую лицензионную схему. Т.е. trial на 90 дней, серверная лицензия + 5 клиентских. Для постоянной работы требуется покупать лиценззии - серверную, и N клиентских, пакетами по 1, 10 или 20. Для разных ОС лицензии разные, и не заменяют друг друга. Для 6.0 и 6.5 используются одни и те же лицензии, поэтому в прайс-листе они помечены как 6.x.

Что нового в IB 6.5, почему он не бесплатный?

A: Для начала на второй вопрос - 6.5, как и было обещано Borland, является сертифицифицированным билдом, и не будет выпускаться в "бесплатном" виде. Бесплатная OpenSource-версия будет содержать только исправления ошибок, но не новую функциональность 6.5. Это было давно объявлено в FAQ по сертифицированным билдам.
Триал 6.5 доступен для скачки на http://www.borland.com/interbase/downloads/ib65_steps.html (38 мегабайт для Win, и 22 для Linux и Solaris), однако не содержит полного комплекта документации, как IB 6.5 MediaKit (только Operations Guide, Getting Started и Tutorial).

Теперь на второй вопрос - новое в 6.5:

неужели Interbase 6 бесплатный и в исходниках?
кто такие Firebird, Yaffil и IBPhoenix?

A: На первый вопрос можно ответить и да и нет. У Borland есть как бесплатный, так и платный IB6. Платный является сертифицированным (т.е. протестированным), и не поставляется в исходных текстах. См. faq по сертифицированным билдам. по крайней мере 6.5 в бесплатном виде не существует. Кроме IB6 существуют "клоны", forks, или проще говоря "альтернативные версии" - Firebird, Yaffil. Они бесплатны.

На второй вопрос: лицензия на исходные тексты Interbase допускает их изменение и выпуск под другим названием. Поэтому

Firebird - проект, образовавшийся как только исходные тексты стали доступными (июль 2000 года). Состоит из ряда бывших сотрудников группы Interbase, исходных разработчиков Interbase и большого числа сторонних разработчиков. Группой исправлено большое количество ошибок (масса серьезных, некоторые до сих пор не исправлены в 6.5) и добавлена новая функциональность.

Yaffil - проект, имевший начальной целью выпуск экспериментальных версий сервера на базе кода Firebird. Название переводится как "зеленый дятел" (Yaffle, Green Woodpecker). В настоящее время имеет идентичную Firebird функциональность плюс массу настроечных параметров (файловое кэширование, коэф. сжатия записей, управление памятью сортировок и т.п.) а также увеличенную производительность в определенных случаях (например при массовой вставке записей, при работе с индексами). Также выпускает версию Classic для Windows.

IBPhoenix - компания, занимающаяся техническим сопровождением Interbase и Firebird в Англии и США. Была организована в момент выпуска IB 6 в OpenSource, с целью передачи ей исходных текстов IB от Borland, и имела "возрожденное" название Interbase Software Corp. Весной 2000 года, после отказа Borland от сотрудничества, была переименована в IBPhoenix.

Бесплатные IB 6, Firebird и Yaffil могут неограниченно использоваться и распространяться в коммерческих или некоммерческих целях. Платным по отношению к ним является только техническое сопровождение, дистрибутивы на компактах, печатная документация и т.п.
Исходные тексты (кроме Yaffil) доступны на sourceforge.net (с подробным описанием - в разделе IB6 сайта www.ibase.ru).

Лицензия на модификацию исходных текстов и бесплатное использование находится здесь, а также входит в виде файла license.txt или license.htm в каждый бесплатный дистрибутив Interbase или Firebird. При распространении бесплатных дистрибутивов Interbase, Firebird и Yaffil данный текст лицензии обязан быть включен в дистрибутив. Наличия лицензии достаточно для обоснования бесплатности, а также неограниченного использования бесплатных версий в коммерческих целях.

примечание: по лицензии платным бесплатный IB 6 обратно стать не может.

Отличается ли Interbase от Firebird?

Да. Firebird имеет большее количество исправленных багов, чем Interbase, причем есть ряд исправлений багов, которые приводят к порче базы данных. До сих пор эти баги не исправлены даже в сертифицированных версиях Borland Interbase.

В настоящий момент Firebird (как минимум билд 1.0.0.338) имеет следующую дополнительную функциональность:

Полный список новой функциональности в релизе Friebird доступен по адресу
http://www.ibase.ru/v6/Firebird_v1_ReleaseNotes.pdf (eng)

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

Отличия Yaffil от Firebird см. по адресу http://www.private.peterlink.ru/rcav/dtla.htm.

после установки Firebird перестали работать кодировки

A: Скорее всего вы поставили не все файлы Firebird - дело в том, что в FB в районе билда 400 нашли ошибку, которая не позволяла в бесплатных версиях Interbase 6 и Firebird создавать собственные кодировки при помощи CollateKit. Исправление этой ошибки привело к несовместимости нового ibserver.exe со старыми gdsintl. Поэтому при установке новых версий Firebird (или файлов из архивов snapshot) нужно обновлять все файлы dll, exe (или соответствующие для unix), а не только ibserver.exe. Это же правило относится и к Yaffil.

под какие платформы выпускается InterBase 6 и Firebird?

A: Windows (95/98/ME/NT/W2K), Linux ( Red Hat 6.2,7, Mandrake 7.2, SuSe 7.0, TurboLinux 6.0), Solaris (SPARC 2.6/7 и Intel) , FreeBSD, AIX, Darwin (Mac OS), HP-UX. Под Linux могут быть проблемы с установкой и работой, если libc имеет версию ниже 2.1.3.

Под W2K Interbase 6.0 работает нормально, однако иногда могут появляться сообщения об "overlapped IO". Никаких проблем в работе это не вызывает. Для Windows NT 4.0 рекомендуется наличие SP 6a, для W2K - SP1.

Вообще список портов для разных платформ у Interbase и Firebird разный. Например, дистрибутив для FreeBSD есть только FireBird (также эти исходники можно скомпилировать под NetBSD). Borland кроме Windows, Linux (все упомянутые выше разновидности Linux) и Solaris (SPARC) никаких платформ больше не поддерживает.

Поскольку исходные тексты IB одинаковы для всех платформ (общий код с ifdef), то вы сами можете попробовать портировать IB под желаемую платформу.

что такое "диалект"?

A: В IB 6 появилось несколько расширений, как SQL так и типов данных, которые поддерживаются при помощи диалектов.

Таблица отличий диалектов (by Dave Shnepper)

SQL Item Dialect 3 Dialect 2 * Dialect 1 **
DATE Только дата Сообщение об ошибке Дата и время (Timestamp)
TIMESTAMP Дата и время Дата и время Дата и время (для v.6.x только)
TIME только время сообщение об ошибке? Ошибка
"<quoted item>" имя поля, таблицы, и т.п. сообщение об ошибке строковая константа
Точность: 1/3 = 0 0 (с предупреждением ?) 0.3333333... (double precision)
NUMERIC(11,*) 64 bit int 64 bit int (с предупреждением ?) double precision

Диалект 1 в версии 6 отличается от версии 5.x поддержкой следующих ключевых слов: TIMESTAMP, TIME, EXTRACT, YEAR, MONTH, DAY, WEEKDAY, HOUR, MINUTE, SECONDS, ?TYPE?, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP. Т.е. использование этих ключевых слов в качестве идентификаторов полей, таблиц и других объектов будет приводить к ошибке.

примечание: Firebird имеет расширенный список зарезервированных слов. Список отличий Firebird от Interbase см. выше.

Кроме этого в диалекте 3 не поддерживается автоматическая конвертация типов в выражениях. Например, если раньше в SQL можно было написать 1+'3' и получить ответ 4, то в диалекте 3 будет выдано сообщение об ошибке.

Более подробно диалекты описаны здесь. Работа с большими NUMERIC и DECIMAL очень подробно описана в документе. Облегчить переход с 5.x на 6.0 поможет соответствующий документ. Для облегчения перехода с диалекта 1 на диалект 3 как минимум рекомендуется не использовать строки в двойных кавычках.

что такое IBX?

A: IBX - это набор компонент для Delphi и C++Builder, позволяющий работать с серверами IB 4.x, 5.x, 6.x напрямую. Поддерживает диалекты 1-3 для IB 6. Содержит компоненты Services API IB6, позволяющие управлять серверами IB, их параметрами, делать удаленный backup/restore, проверять базы данных и др.
IBX "унаследован" от FreeIBComponents (FIBC), но кроме общих черт содержит массу design-time редакторов свойств, упрощающих выбор типов транзакций, параметров подсоединения, запросов и т.п.

Самое последнее обновление IBX 4.62 находится на codecentral.borland.com, или здесь. Также можно взять исходные тексты IBX с sourceforge.net/projects/ibx, но обновляются они достаточно редко.

Services API IBX работает только с серверами архитектуры SuperServer. Services API в серверах архитектуры Classic не поддерживается.

Как выполнять запросы параллельно в приложении?
Как работать с IB из threads?

A: Начиная с IB 4.2 клиентская часть IB поддерживает параллельное выполнение операций в разных коннектах. Т.е. для того чтобы работать параллельно из приложения, надо в каждом thread приложения (там где это нужно) открыть свое соединение (TIBDatabase для IBX, для BDE см. пример BKQUERY в поставке Delphi и C++Builder).
Кроме того, желательно открытие коннекта (IBDatabase.Connected:=True) выполнять монопольно, т.е. в отсутствие других параллельно выполняющихся операций.

Пример работы с thread в IBX - ibx_mt.zip.

Для параллельной работы существует еще одно требование - коннект к БД не должен быть локальным. При локальном коннекте (c:\dir\data.gdb, это часто используют при размещении приложений на сервере БД - web, midas и т.п.) невозможно подключение из сервисов (например IIS, Baikonur и т.п.), а если и возможно, то такие коннекты не будут работать параллельно - пока выполняется запрос в одном коннекте, все остальные коннекты будут "висеть". Поэтому коннект к БД у таких приложений должен быть localhost:c:\dir\data.gdb.
Будьте внимательны! В вышеуказанных примерах ошибочно используется подключение к БД через локальный коннект, что приведет к невозможности параллельной работы threads.

будет ли FIBC поддерживать IB6?

A: по сообщению автора, нет. Из компонент диалекты и особенности IB 6 сейчас полностью поддерживают IBX, FIBPlus и IBObjects.
Сами компоненты FIBC в чистом виде поддерживать IB 6 не будут, т.к. их автор фактически отказался от дальнейших модификаций FIBC. При этом FIBPlus содержит больше функциональности, чем IBX.

где взять ODBC для 6.0?

A: ODBC-драйверы для 6.0 появляются как грибы после дождя. См. ссылки на ODBC в IB6.

русские буквы с InterClient

A: С разрешения Сергея Астахова, владельца страницы http://people.comita.spb.ru/users/sergeya/java/ruschars.html#db, приводится часть раздела, описывающая работу с русскими буквами в InterClient:

InterBase (interbase.interclient.Driver)

Для этого драйвера работает параметр "charSet":

// Параметры соединения с базой
Properties connInfo = new Properties();

connInfo.put("user", username);
connInfo.put("password", password);
connInfo.put("charSet", "Cp1251");

// Устанавливаем соединение
Connection db = DriverManager.getConnection(dataurl, connInfo);

Однако не забудьте при создании БД и таблиц указать кодировку символов. Для русского языка можно использовать значения "UNICODE_FSS" или "WIN1251" (см. http://www.ibase.ru/devinfo/ibrusfaq.htm)

В версии 2.01 InterClient присутствует ошибка - классы ресурсов с сообщениями для русского языка там неправильно скомпилированы. Скорей всего разработчики просто забыли указать кодировку исходников при компиляции. Есть два пути исправления этой ошибки:

Но даже настроив JDBC-драйвер на нужную кодировку в некоторых случаях можно нарваться на неприятности. Например, при попытке использования новых замечательных скролируемых курсоров стандарта JDBC 2 в мосте JDBC-ODBC из JDK 1.3.x довольно быстро можно обнаружить, что русские буквы там просто не работают (метод updateString()).

поддерживает ли BDE IB 6?

A: Да. Вот кусочек из readme.txt от Delphi 6 (туда входит BDE 5.2)

Для работы в диалекте 3 необходимо добавить в registry в ветке

HKEY_LOCAL_MACHINE\SOFTWARE\
Borland\Database Engine\Settings
\Drivers\Intrbase\Db Open\

строку (string) SQLDIALECT и установить ее значение в "3" (без кавычек).

Эта настройка действует только для вновь создаваемых алиасов BDE, т.е. существующие алиасы надо ПЕРЕСОЗДАТЬ.
Для работы с серверами 5.6 необходимо установить значение этого параметра в алиасе BDE в 1.

В Delphi 6 и Kylix кроме IBX (InterBase eXpress) есть компоненты dbExpress. Это библиотека доступа к данным более низкого уровня и функциональности, чем IBX, и уж тем более чем BDE.

чем можно работать с IB 6?

A: Если база данных в диалекте 1, то к ней можно обращаться из программ, поддерживающих IB4 или IB5. Если БД перенесена в диалект 3 (или создана в нем), то пока вариантов немного:

как перейти с 5.6 на 6.x или 7.0?

A: Этот процесс более сложен, чем при переходе от 4.x к 5.x. Как минимум нужно сделать backup в 5.x и restore в 6.x (7.0), и прочитать Migration Guide (или секцию по миграции в Getting Started). На русском языке есть документ по переходу с 5.x на 6.x (на 7.0 переход ничем не отличается).
При переходе с 6.x на 7.0 достаточно сделать backup/restore базы данных.

не могу открыть базы данных от 4/5.x из 6.0 или
unsupported on-disk structure for x.gdb;found 9(8), support 10

A: Сообщение гласит о том, что используемая версия IB не поддерживает базы данных старого формата (от 5.x). Для работы надо в 5.x сделать backup базе данных, и restore в 6.0. Или использовать другой билд (например FireBird), который поддерживает старый формат баз данных.

Основная проблема в том, что 6.0 поддерживает новую версию BLR (Binary Language Representation, формат скомпилированных процедур и триггеров), которая несовместима с использовавшейся в 5.x. В результате поддержка старых баз данных то появлялась, то пропадала. Например, бета-версия IB 6 не поддерживала формат ODS9. Также не поддерживают старые базы билд Borland InterBase 6.0.1 от 10 января 2000 (версий 6.0.1 было несколько). Наоборот, все версии FireBird поддерживают старые базы данных, и также обещают подобную поддержку в сертифицированных билдах Borland InterBase. См. FAQ от Borland.

в чем разница между архитектурами SuperServer и Classic?

A: Если в двух словах, то Classic создает процесс для каждого пользовательского коннекта, а SuperServer - один процесс, который обрабатывает запросы клиентов в разных threads (этого же процесса). Архитектура Classic надежнее, но SuperServer - производительнее (на уровне ~10 одновременно работающих пользователей. Если пользователей больше, то Classic на Unix работает лучше и быстрее). Более подробно читайте документ.

В Windows архитектура SuperServer была введена с версии 4.2. С тех пор (1995 год) версия Classic для Windows не выпускается. Для Linux (Unix) большинство портов были Classic, однако порт SuperServer также существует. Firebird выпускается, как правило, для всех вариантов Unix как в архитектуре Classic, так и SuperServer.

Сейчас проходит тестирование Yaffil Classic for Windows.
Borland в версии 6.5 прекратил выпуск Classic для всех платоформ.

не могу подключить UDF

A: В IB 6 изменились правила подключения UDF - теперь подключаемые библиотеки должны лежать только в подкаталоге udf установленного сервера. Это сделано для обеспечения безопасности. Кроме того, в Firebird введен параметр ibconfig
EXTERNAL_FUNCTION_DIRECTORY
при помощи которого можно указать несколько дополнительных каталогов для хранения UDF.

Есть еще сообщения о том, что UDF, компилируемые Delphi 6 Update Pack 2 "не видны" сервером под WinNT 4.0. При этом якобы проблему можно устранить установкой SP6 на WinNT.

"Can not attach to password database" после установки

A: Данный вопрос касается только бета-версий IB 6 и самого последнего релиза IB 6.01 от Borland. FireBird может работать с БД от 5.x.

Скорее всего вы поставили IB 6 в каталог, где ранее был установлен IB 5 или 4. При установке инсталлятор не переписывает базу данных паролей пользователей (isc4.gdb), т.е. он ее сохраняет, предполагая что вы могли забыть сделать резервную копию этой БД. А поскольку бета IB6 не может работать с базами данных предыдущего формата (только после backup/restore), то и не может подсоединиться к isc4.gdb для получения пароля SYSDBA (или любого другого пользователя).
Если вам нужен isc4.gdb, то скопируйте его в isc4copy.gdb и положите в сторонку. Потом возьмите isc4.gdb из дистрибутива IB 6, и поместите на место старого. После этого подсоединиться можно как SYSDBA и masterkey. Для восстановления списка пользователей необходимо сделать backup isc4copy.gdb на IB версии 5, затем восстановить этот backup под IB6, остановить сервер IB6 и переименовать isc4copy.gdb в isc4.gdb.
Можно обойтись и без такой процедуры, если откопировать данные из старой базы данных в новый isc4.gdb каким-нибудь инструментом вроде datapump (см. Tools Downloads).

"...license file is missing or corrupt..." при запуске

A: Дело в том, что в существующие дистрибутивы бета-версии IB 6 "зашита" лицензия, работающая до 23 мая (см. файл ib_license.dat). Таким образом ISC ограничивает срок действия лицензии, чтобы пользователи брали более свежую версию с сайта.
В релизе IB 6 лицензий или ограничений на количество коннектов нет. Для использования беты IB нужно эту лицензию продлить.

Первый способ: Если вас устраивает лицензия на 5 клиентов, то сделать это можно в любой момент запустив утилиту license registration tool, и введя там -key eval -id eval. Это продлит работу IB еще на 90 дней.

Второй способ: установить лицензию сроком до 31 августа. Взять ее с сайта, либо отсюда:

(обратите внимание, что текст лицензии должен быть прописан в ib_license.dat в одну строку, т.е. точно так же как и предыдущая, до 23 мая, лицензия).

Windows License
PRODUCT INTERBASE, OPTIONS ACDEILQRSW3, VERSION WI-B6.0, CERTIFICATE 100, USERS 100, UNTIL 31-AUG-2000, ID VAR-12446, KEY c5-fd-b7-14, COMMENT extended beta license

Linux License
PRODUCT INTERBASE, OPTIONS ACDEILQRSW3, VERSION LI-B6.0, CERTIFICATE 100, USERS 100, UNTIL 31-AUG-2000, ID VAR-12445, KEY 77-fe-b7-14, COMMENT extended beta license

Solaris License
PRODUCT INTERBASE, OPTIONS ACDEILQRSW3, VERSION SO-B6.0, CERTIFICATE 100, USERS 100, UNTIL 31-AUG-2000, ID VAR-12447, KEY 2-fd-b7-14, COMMENT extended beta license

select DISTINCT выполняется медленно или не использует индексы

В IB 6.0 оптимизатор использует сортировку (PLAN SORT) вместо использования индекса, как это было в 5.x.

что такое "сертифицированные билды"?

"Сертифицированные билды" - означает дистрибутивы Interbase/Firebird, тщательно протестированные на определенной версии какой либо ОС (Windows, Linux, Solaris и т.д.). Причем как правило сертифицированные билды являются ПЛАТНЫМИ (см. например faq по сертифицированным билдам от Borland). Конечно, в любом случае в лицензии написано, что не дается никаких гарантий, однако такие версии работают намного более надежно, чем просто скомпилированные и выложенные на web.

dpb constant 0 unknown

Это ошибка одной из самых древних версий IBConsole. У Вас однозначно слишком старый дистрибутив Interbase, а возможно даже и бета-версия 1999 года. Немедленно удалите эту версию с диска, и возьмите более свежую версию Interbase или Firebird с http://www.ibase.ru/ib6.htm.

Клиент от Firebird, Yaffil и IB7 не работает под Win95

Во всех последних версиях IB в клиентской и серверной части используется только WinSock2 (например в Firebird начиная с билда 682). Windows 95 в этом плане уже устарела (в базовом комплекте есть только WinSock1), ей требуется обновление:

http://www.microsoft.com/windows/downloads/bin/W95ws2setup.exe

! Вполне возможно, что когда вы читаете этот пункт FAQ, компания Microsoft уже прекратила поддержку Windows 95 на своем сайте.

Есть ли Interbase 6 или Firebird для Novell Netware?

Нет и не будет. Вообще данная операционная система плохо предназначена для работы в качестве сервера и в настоящее время является достаточно экзотической. Даже существовавшие версии Interbase (5.6, 4.2) для Netware не рекомендуется использовать по этим же причинам. Подробнее см. http://www.ibase.ru/devinfo/0108.htm

DBD: ошибка Not enough LongReadLen buffer

Прислал Alex Maximenko:

Из справки по DBI: нужно устанавливать для $dbh аттрибут LongReadLen, который заведомо больше любого читаемого блоба. Это можно сделать как при коннекте к базе, так и на лету: $dbh->{LongReadLen} = ... /В принципе установка LongReadLen вроде лишнюю память не отнимает, так что установить этот параметр можно в DBI::connect.

почему не используются два (четыре) процессора?

Начнем с того, что существует две архитектуры IB/FB - SuperServer и Classic. Вначале IB был только Classic, и первым SuperServer-ом стала версия 4.2 для Windows. Далее Classic оставался на Unix, а на Windows остался только SuperServer.

Различие Classic и SuperServer состоит в том, что Classic - старая технология, когда на каждого пользователя (коннект) создается процесс. Кэш БД у каждого процесса раздельный, и занимает он минимум 3 мегабайта памяти (в реальной жизни в среднем 10-20 мегабайт, бывает и 35). Поэтому в Classic при большом количестве пользователей требуется большое количество RAM.
SuperServer - это один процесс, где пользователи обрабатываются в threads (несколько пользователей могут обрабатываться одним thread-ом). В данном случае кэш БД общий, поэтому много пользователей не требуют много памяти.

Однако в случае падений сервера, если в Classic "погибает" только один пользовательский процесс, SuperServer "падает" весь.

При выпуске 6.0 Borland хотел отказаться от выпуска Classic, поэтому Services API в Classic фактически не реализовано. В 6.5 Classic вообще отсутствует, есть только SuperServer для Windows, Linux и Solaris. Однако, Firebird выпускает почти для всех ОС как Classic, так и SuperServer, и даже есть ОС на которых существует только Classic (FreeBSD). Более того, в настоящее время происходит тестирование Yaffil Classic for Windows.

SuperServer не может использовать несколько процессоров в силу своей архитектуры. Конечно, загружены будут оба процессора, но из-за нераспараллеливания операций ввода-вывода каждый процессор будет загружен не более чем на 50% (при двух. При четырех - на 25%). Для решения этой проблемы в Firebird и позже в Interbase 6.5 был добавлен параметр IBCONFIG - CPU_AFFINITY. Это битовая маска, в которой указываются номера процессоров, которые необходимо задействовать. Например, 1 означает работу на первом процессоре, 2 - на втором, 3 - на первых двух и так далее. Освободившийся процессор можно занять другими задачами.

Самое оптимальное решение масштабирования при работе на многопроцессорных машинах - использование архитектуры Classic для Linux (или других Unix).

хочу шифровать трафик

IB, FB или Yaffil не поддерживают шифрование трафика. Если вы хотите этого, то имеет смысл воспользоваться например
http://www.winton.org.uk/zebedee/ см. статью по использованию ZeBeDee для IB/FB/Yaffil
http://www.stunnel.org/
http://www.nothingbutnet.co.nz/ibeproxy.htm

При более серьезных требованиях, например сертификации средств шифрования, следует обратить взгляд на аппаратно-программные средства, например http://www.ancud.ru/.

Скорее всего, никакие средства шифрования трафика в IB/FB/Yaffil в ближайшее время встроены не будут.

медленный коннект (и работа) на WinMe/WinXP

Причина в том, что Me и XP содержат т.н. систему восстановления файлов. В соответствии со списком расширений любой файл, который изменяется, копируется системой в специальное место для возможного восстановления в дальнейшем. В этом списке есть расширение gdb, что приводит для IB к долгому коннекту и очень медленной работе.
Данную особенность можно выключить целиком:

На XP: System Properties | System Restore | Turn off System Restore on all drives.

На Me:

либо убрать из списка расширение gdb, отредактировав файл
на XP: $WINNT$\system32\Restore\filelist.xml

на Me:

p.s. не нужно при этом упрекать MS в нелюбви к IB. Это просто случайность, т.к. расширения файлов в большинстве состоят из трех букв, количество комбинаций которых ограничено.

не удается создать вторичный ключ (FK)

при ALTER TABLE X ADD [constraint FK_X] FOREIGN KEY (ID) REFERENCES Y (ID);

выдается сообщение

"unsuccessful metadata update, STORE RDB$REF_CONSTRAINTS failed,
action cancelled by trigger (1) to preserve data integrity,
Name of Referential Constraint not defined in constraints table."

A: в IB 6.0 (например 6.0.0.627) не удается сделать FK, если у таблицы Y к этому моменту уже есть FK по ID от любой другой таблицы, или просто индекс по полю ID, название которого начинается с буквы меньше S. Либо нужно сменить версию (в Firebird RC2 такой ошибки нет, как ее нет и в IB 5.6), либо располагать создание FK отдельно, в порядке detail-master, после чего создавать индексы (если по этим полям они вообще нужны).

Я удалил SYSDBA. Что делать?

A: пока что в IB/FB/Yaffil все пользователи хранятся в файле ISC4.GDB. Это обычная база данных. В дальнейшем, возможно какой-либо из серверов будет поддерживать пользователей прямо в базах данных, без необходимости ISC4.GDB, но пока это только в планах.

Следовательно, нужно сделать следующее:

  1. остановить сервер IB
  2. скопировать isc4.gdb например в isccopy.gdb
  3. взять isc4.gdb из того самого дистрибутива, версия которого установлена, подсунуть на место isc4.gdb
  4. запустить сервер IB. теперь логиниться сможет только SYSDBA с паролем masterkey
  5. подсоединиться к isccopy.gdb, и например IBExpert-ом извлечь данные из таблицы users в скрипт
  6. применить скрипт к новой isc4.gdb
  7. не забыть сменить пароль masterkey у SYSDBA, продолжить работу.

Что такое rdb$db_key?

A: Это "номер записи". Для таблиц он имеет длину 8 байт (для view - 8 байт умножить на количество таблиц в запросе, если запрос содержит явный или неявный join), которые представлены в виде строки, содержащей двоичные значения. Поэтому в ряде инструментов запрос

select rdb$db_key, t.* from table t

будет возвращать "мусор" в первом столбце.

rdb$db_key можно использовать в качестве уникального идентификатора записи, так же как и ее поле первичного ключа. Однако rdb$db_key по ходу работы может меняться. Физически он представляет собой номер таблицы, номер страницы и смещение на запись (причем не на конкретную версию, а вообще на пакет версий этой записи, если они есть).

По использованию rdb$db_key можно почитать следующие документы:

Удаление или поиск дубликатов записей в таблице
http://www.ibase.ru/devinfo/deldupes.htm

Update данными из других таблиц
http://www.ibase.ru/devinfo/updsame.htm

немного о db_key (eng)
http://www.ibase.ru/mail/dbkey1.txt и http://www.ibase.ru/mail/dbkey2.txt

"Practical use of rdb$db_key" на английском:
http://www.cvalde.com/document/practical_use_of_the_rdb.htm

The mistery of rdb$db_key, на английском, в 4-х частях
http://www.cvalde.com/document/mysteriousDbKey.htm

как указать роль (ROLE) в BDE?

ROLE поддерживаются начиная с BDE 5.01, однако был момент когда существовало несколько версий 5.01 (см. архив). Поэтому лучше всего использовать версии BDE выше, чем 5.01 (версию можно узнать посмотрев properties/version файла idapi32.dll).

Причем параметр ROLE NAME будет виден только для новых алиасов, а не для старых. Т.е. для появления новых параметров нужно пересоздать алиас. Если при этом параметр роли не появился, то следует взять файл sql_int.zip, распаковать его, и в BDE Administrator подключить этот файл через меню Object/Merge Configuration. После этого вновь создаваемые алиасы будут иметь параметры ROLE NAME для указания роли, WAIT ON LOCK для указания параметров транзакций wait/nowait (см. статью по транзакциям), и COMMIT RETAINING для явных транзакций (см. статью по транзакциям).

В Login Dialog параметр роли все равно выводиться не будет, поэтому нужно создавать свой собственный диалог логина для TDatabase.

Есть ли хостинг баз Interbase/Firebird/Yaffil?

Да, есть, но пока только за рубежом:

www.kylixhost.com/ahosting.php

www.datamarkenterprises.com/Packages.htm

http://www.yournewhosting.com/


http://www.ibase.ru/, (c) KDV

 

Rambler's Top100 Service Яндекс цитирования