From: Кузьменко Дмитрий, <http://ib.demo.ru>
Subject: Частые вопросы и ответы по Interbase 6 / Firebird
Interbase 6 / Firebird FAQ
Частые вопросы и ответы по Interbase 6 / Firebird
последнее обновление - 6.02.2002
Внимание! В данный FAQ не включены вопросы, которые присуствовали в
старом FAQ по IB 4.x и 5.x. Поэтому данный FAQ можно считать
продолжением старого (http://ib.demo.ru/devinfo/ibfaq.htm).
Автор - Кузьменко Дмитрий, http://ib.demo.ru
______________________________________________________________________
Вопросы и предложения по FAQ направляйте на адрес ib@demo.ru.
Ответы
что нового в IB6?
A: Вот сокращенный список наиболее существенных новых возможностей:
* новые типы данных - INT64, DATE, TIME, TIMESTAMP, константы для
дат и времени.
* хранение NUMERIC(11,x) в INT64 (т.е. нет проблем округления)
* Функция EXTRACT с поддержкой YEAR, MONTH и т.п.
* Изменение типа столбца (или домена) командой ALTER COLUMN x TYPE,
изменение позиции поля в таблице командой ALTER COLUMN x POSITION
y.
* БД с возможностью записи на read-only носители (CD-R)
* Services API для удаленного управления серверами, параметрами,
базами данных и т.п.
Более подробно - см. документ http://www.interbase.com/open/research/60feature_list.html
Что нового в IB 6.5, почему он не бесплатный?
A: Для начала на второй вопрос - 6.5, как и было обещано Borland,
является сертифицифицированным билдом, и не будет выпускаться в
"бесплатном" виде. Бесплатная OpenSource-версия будет содержать только
исправления ошибок, но не новую функциональность 6.5. Это было давно
объявлено в FAQ по сертифицированным билдам http://ib.demo.ru/V6/ib6_faq_bor.html
Триал 6.5 доступен для скачки на http://www.borland.com/interbase/ (38
мегабайт для Win, и 22 для Linux и Solaris), однако не содержит
полного комплекта документации, как IB 6.5 MediaKit (только Operations
Guide, Getting Started и Tutorial).
Теперь на второй вопрос - новое в 6.5:
* Возможность снятия долгих запросов (из параллельного thread) через
IB API
* Вывод данных в XML (две функции IB API, компоненты в IBX. В общем
аналогично ClientDataSet.SaveAsXML).
* ограничители ROWS для SELECT, UPDATE, DELETE, позволяющий
ограничить выборку или обновление данных запросом. пример
синтаксиса:
SELECT * FROM TABLE
[ROWS <lower_value> [TO <upper_value>] [BY <step_value>] [PERCENT]
[WITH TIES]
* Поддержка размера одного файла БД более 2/4 гигабайта на Windows и
Solaris
* Безопасность метаданных. Изменены права по умолчанию для всех
системных таблиц. Кроме того, в поставку добавлено три скрипта,
которые позволяют a) дать права на модификацию объектов для
public; b) дать права на все объекты для public только на чтение;
c) сделать все объекты базы данных невидимыми для public.
неужели Interbase 6 бесплатный и в исходниках?
кто такие Firebird, Yaffil и IBPhoenix?
A: На первый вопрос можно ответить и да и нет. У Borland есть как
бесплатный, так и платный IB6. Платный является сертифицированным
(т.е. протестированным), и не поставляется в исходных текстах. См.
faq по сертифицированным билдам http://ib.demo.ru/V6/ib6_faq_bor.html.
по крайней мере 6.5 в бесплатном
виде не существует. Кроме IB6 существуют "клоны", forks, или проще
говоря "альтернативные версии" - Firebird, Yaffil. Они бесплатны.
На второй вопрос: лицензия на исходные тексты Interbase допускает их
изменение и выпуск под другим названием. Поэтому
Firebird (http://firebird.sourceforge.net/) - проект,
образовавшийся как только исходные тексты стали
доступными (июль 2000 года). Состоит из ряда бывших сотрудников группы
Interbase, исходных разработчиков Interbase и большого числа сторонних
разработчиков. Группой исправлено большое количество ошибок (масса
серьезных, некоторые до сих пор не исправлены в 6.5) и добавлена
новая функциональность.
Yaffil (http://www.private.peterlink.ru/rcav/) - проект, имевший начальной
целью выпуск экспериментальных
версий сервера на базе кода Firebird. Название переводится как
"зеленый дятел" (Yaffle, Green Woodpecker). В настоящее время имеет
идентичную Firebird функциональность плюс массу настроечных параметров
(файловое кэширование, коэф. сжатия записей, управление памятью
сортировок и т.п.) а также увеличенную производительность в
определенных случаях (например при массовой вставке записей, при
работе с индексами). Также выпускает версию Classic для Windows.
IBPhoenix (http://www.ibphoenix.com/) - компания, занимающаяся техническим сопровождением
Interbase и Firebird в Англии и США. Была организована в момент
выпуска IB 6 в OpenSource, с целью передачи ей исходных текстов IB от
Borland, и имела "возрожденное" название Interbase Software Corp.
Весной 2000 года, после отказа Borland от сотрудничества, была
переименована в IBPhoenix.
Бесплатные IB 6, Firebird и Yaffil могут неограниченно использоваться
и распространяться в коммерческих или некоммерческих целях. Платным по
отношению к ним является только техническое сопровождение,
дистрибутивы на компактах, печатная документация и т.п.
Исходные тексты (кроме Yaffil) доступны на sourceforge.net (с
подробным описанием - в разделе IB6 сайта http://ib.demo.ru).
Лицензия на модификацию исходных текстов и бесплатное использование
http://www.interbase.com/IPL.html, а также входит в виде файла license.txt или
license.htm в каждый бесплатный дистрибутив Interbase или Firebird.
При распространении бесплатных дистрибутивов Interbase, Firebird и
Yaffil данный текст лицензии обязан быть включен в дистрибутив.
Наличия лицензии достаточно для обоснования бесплатности, а также
неограниченного использования бесплатных версий в коммерческих целях.
примечание: по лицензии платным бесплатный IB 6 обратно стать не
может.
Отличается ли Interbase от Firebird?
Да. Firebird имеет большее количество исправленных багов, чем
Interbase, причем есть ряд исправлений багов, которые приводят к порче
базы данных. До сих пор эти баги не исправлены даже в
сертифицированных версиях Borland Interbase.
В настоящий момент Firebird (как минимум билд 1.0.0.338) имеет
следующую дополнительную функциональность:
* поддержка размера страницы 16К при создании БД или restore
* размер одного файла БД больше 2Гб под Windows
* вставка строки в blob-поле при insert (только в диалекте 3)
* group by UDF
* глобальные переменные CURRENT_USER, CURRENT_ROLE
* RECREATE TABLE/PROCEDURE - создает таблицу/процедуру если ее нет,
или удаляет и пересоздает, если есть.
* DROP GENERATOR
* Команда PLANONLY для ISQL, чтобы смотреть только план запроса
* ключи -r и -t TableName для GSTAT, выдает информацию по кол-ву
версий записей
* новые функции SubStrLen и SubStr теперь возвращает null в случае
входного null
* новая встроенная функция SUBSTRING(fieldname FROM n FOR m),
соответствующая стандарту ANSI SQL02, не требующая декларирования
как UDF.
* клиент (gds32.dll) и сервер по умолчанию используют порт 3050 (не
требуется запись в services)
* клиент (gds32.dll) может указать порт в строке коннекта -
server/3050:c:dirdata.gdb
* параметры функций by descriptor с возможностью передачи и
получения NULL
* возможность деактивации индекса Foreign Key
* сообщение COLUMN UNKNOWN при компиляции триггеров и процедур
выдает имя неопознанного столбца
* Ограничители выборки FIRST и SKIP для SELECT.
* однострочные комментарии -- (два тире) в дополнение к стандартным
/* */
Также в FireBird идет работа по реализации оператора LIMIT для SELECT,
идентичного синтаксису PostgeSQL.
Разумеется, если вы попытаетесь использовать указанные выше
конструкции в триггерах и процедурах, то такая база данных не будет
работать с Interbase. В остальном Interbase и Firebird совместимы на
уровне базы данных.
Отличия Yaffil от Firebird см. по адресу
http://www.private.peterlink.ru/rcav/dtla.htm.
после установки Firebird перестали работать кодировки
A: Скорее всего вы поставили не все файлы Firebird - дело в том, что в
FB в районе билда 400 нашли ошибку, которая не позволяла в бесплатных
версиях Interbase 6 и Firebird создавать собственные кодировки при
помощи CollateKit (http://www.brookstonesystems.com/). Исправление этой ошибки привело к
несовместимости нового ibserver.exe со старыми gdsintl. Поэтому при
установке новых версий Firebird (или файлов из архивов snapshot) нужно
обновлять все файлы dll, exe (или соответствующие для unix), а не
только ibserver.exe.
под какие платформы выпускается 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 так и типов данных,
которые поддерживаются при помощи диалектов.
* Диалект 1 - базы данных 4.x или 5.x, "импортированные" в 6.0
посредством backup в 4.x/5.x и restore в 6.0. Не содержат никаких
отличий от 5.x.
* Диалект 2 - предназначен для проверки возможности перевода баз
данных диалекта 1 в диалект 3.
* Диалект 3 - "родной" формат IB 6, поддерживающий INT6, DATE, TIME,
TIMESTAMP и прочие расширения.
Таблица отличий диалектов (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 имеет расширенный список зарезервированных слов.
Кроме этого в диалекте 3 не поддерживается автоматическая конвертация
типов в выражениях. Например, если раньше в SQL можно было написать
1+'3' и получить ответ 4, то в диалекте 3 будет выдано сообщение об
ошибке.
Более подробно диалекты описаны здесь (http://www.interbase.com/open/research/art_60dialects.html).
Работа с большими NUMERIC и DECIMAL очень подробно описана в
документе (http://www.ibphoenix.com/ibp_60_exact_num_fs.html). Облегчить переход с
5.x на 6.0 поможет соответствующий документ (http://ib.demo.ru/migration.htm).
Для облегчения перехода с диалекта 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 находится на
http://codecentral.borland.com . Также можно взять исходные
тексты IBX с http://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 - http://ib.demo.ru/V6/ibx_mt.zip
Для параллельной работы существует еще одно требование - коннект к БД
не должен быть локальным. При локальном коннекте (c:dirdata.gdb, это
часто используют при размещении приложений на сервере БД - web, midas
и т.п.) невозможно подключение из сервисов (например IIS, Baikonur и
т.п.), а если и возможно, то такие коннекты не будут работать
параллельно - пока выполняется запрос в одном коннекте, все остальные
коннекты будут "висеть". Поэтому коннект к БД у таких приложений
должен быть localhost:c:dirdata.gdb.
Будьте внимательны! В вышеуказанных примерах ошибочно используется
подключение к БД через локальный коннект, что приведет к невозможности
параллельной работы trheads.
будет ли FIBC поддерживать IB6?
A: по сообщению автора, нет. Из компонент диалекты и особенности IB 6
сейчас полностью поддерживает только IBX и IBObjects. Также
полностью поддерживает IB 6 надстройка над FIBC - FIBPlus http://ib.demo.ru/d_fibc.htm
Сами компоненты 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();
// Устанавливаем соединение
Connection db = DriverManager.getConnection(dataurl, connInfo);
Однако не забудьте при создании БД и таблиц указать кодировку
символов. Для русского языка можно использовать значения "UNICODE_FSS"
или "WIN1251" (см. http://ib.demo.ru/devinfo/ibrusfaq.htm)
В версии 2.01 InterClient присутствует ошибка - классы ресурсов с
сообщениями для русского языка там неправильно скомпилированы. Скорей
всего разработчики просто забыли указать кодировку исходников при
компиляции. Есть два пути исправления этой ошибки:
* Использовать interclient-core.jar вместо interclient.jar. При этом
русских ресурсов просто не будет, и автоматом подхватятся
английские.
* Перекомпилировать файлы в нормальный Unicode. Разбор class-файлов
- дело неблагодарное, поэтому лучше воспользоваться JAD-ом. К
сожалению JAD, если встречает символы из набора ISO-8859-1,
выводит их в 8-ричной кодировке, так что воспользоваться
стандартным перекодировщиком native2ascii не удастся - придётся
написать свой (программа Decode). Если Вам не хочется
заморачиваться с этими проблемами - можете просто взять готовый
файл с ресурсами (пропатченый jar с драйвером - interclient.jar,
отдельные классы ресурсов - interclient-rus.jar).
Но даже настроив 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_MACHINESOFTWARE
BorlandDatabase EngineSettings
DriversIntrbaseDb 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
(или создана в нем), то пока вариантов немного:
* IBConsole. не очень удобный инструмент. Не рекомендуется
делать им backup/restore в бете IB 6 и в релизе IB 6 (IBConsole
build 308 и 309). IBConsole есть как для Windows, так и для Linux
* IB_SQL. Поддерживает 6.0, диалекты 1 и 3.
* Другие, намного более удобные инструменты третьих фирм, см. раздел
http://ib.demo.ru/download.htm.
как перейти с 5.6 на 6.0?
A: Этот процесс более сложен, чем при переходе от 4.x к 5.x. Как
минимум нужно сделать backup в 5.x и restore в 6.0, и прочитать
Migration Guide (http://ib.demo.ru/V6/interbase60_MigrationGuide.zip)
(или секцию по миграции в Getting Started). На русском языке есть документ
по переходу с 5.x на 6.x. (http://ib.demo.ru/migration.htm)
не могу открыть базы данных от 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 (http://ib.demo.ru/V6/ib6_faq_bor.html).
в чем разница между архитектурами SuperServer и Classic?
A: Если в двух словах, то Classic создает процесс для каждого
пользовательского коннекта, а SuperServer - один процесс, который
обрабатывает запросы клиентов в разных threads (этого же процесса).
Архитектура Classic надежнее, но SuperServer - производительнее (на
уровне ~10 одновременно работающих пользователей. Если пользователей
больше, то Classic на Unix работает лучше и быстрее). Более подробно
читайте документ http://www.ibphoenix.com/ibp_ss_vs_classic.html
В Windows архитектура SuperServer была введена с версии 4.2. С тех пор
(1995 год) версия Classic для Windows не выпускается. Для Linux (Unix)
большинство портов были Classic, однако порт SuperServer также
существует. Firebird выпускается, как правило, для всех вариантов Unix
как в архитектуре Classic, так и SuperServer.
не могу подключить UDF
A: В IB 6 изменились правила подключения UDF - теперь подключаемые
библиотеки должны лежать только в подкаталоге udf установленного
сервера. Это сделано для обеспечения безопасности.
"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.
"...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 августа. Взять ее с
сайта http://www.interbase.com/open/community/extended_beta_license.html
(обратите внимание, что текст лицензии должен быть прописан в
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://ib.demo.ru/ib6.htm.
Клиент от Firebird RC2 не работает под Win95
В RC2 для решения проблемы соединения под WinXP было принято решение в
клиентской и серверной части безусловно использовать только WinSock2
(точнее в Firebird начиная с билда 682). Windows 95 в этом плане уже
устарела (в базовом комплекте есть только WinSock1), ей требуется
обновление:
Есть ли Interbase 6 или Firebird для Novell Netware?
Нет и не будет. Вообще данная операционная система плохо предназначена
для работы в качестве сервера и в настоящее время является достаточно
экзотической. Даже существовавшие версии Interbase (5.6, 4.2) для
Netware не рекомендуется использовать по этим же причинам. Подробнее
см. http://ib.demo.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).
______________________________________________________________________
http://ib.demo.ru, (c) KDV
1753 Прочтений • [Частые вопросы и ответы по Interbase 6 / Firebird (interbase sql faq database)] [08.05.2012] [Комментариев: 0]