Показать сообщение отдельно
Старый 18.02.2008, 12:06 Вверх   #1
Admin
 
Аватар для RAMZA
RAMZA вне форума
Доп. информация
Лампочка InterBase, Firebird, Yaffil [FAQ]

InterBase, Firebird, Yaffil FAQ

Частые вопросы и ответы по InterBase / Firebird / Yaffil

Вопросы
По версиям InterBase, Firebird, Yaffil
какие версии платные, а какие бесплатные?
Кто такие Firebird, Yaffil и IBPhoenix?
Неужели IB 6 / Firebird бесплатный и в исходниках?
Что такое Firebird Foundation?
Отличается ли Interbase от Firebird?
Какие ошибки и в каких версиях исправлены?
Что такое "диалект"?
Проблема с именами объектов в двойных кавычках в 3-ем диалекте
Как перейти с 5.6 на 6.x или 7.0?
Может-ли база данных быть больше 2-х гигабайт?
Каков средний размер баз данных на InterBase?
Как уменьшить размер базы данных?
Что будет, если отключить Forced Writes?
Какой размер страницы выбрать?
Надо-ли дефрагментировать диск с базой?
Что за версии Embedded или Personal?
InterBase
Что нового в Interbase 6?
Что нового в IB 6.5, почему он не бесплатный?
Что нового в InterBase 7?
Что нового в InterBase 7.1?
Что нового в InterBase 7.1 SP 1?
Что нового в InterBase 7.1 SP 2?
Что нового в InterBase 7.5?
Что нового в InterBase 7.5.1?
Что нового в InterBase 7.5.1 SP 1?
Что нового в InterBase 2007?
Что нового в InterBase 2007 SP1?
Что нового в InterBase 2007 SP2?
Firebird
Что нового в Firebird 1.0x?
Что нового в Firebird 1.5?
Что нового в Firebird 1.5.1?
Что нового в Firebird 1.5.2?
Что нового в Firebird 1.5.3?
перечень всех изменений и исправлений в FB 1.5.x
Yaffil
Что нового в Yaffil?
Вопросы установки
Guardian и Classic или
гвардеец и классик - не работает, меняет реестр, и т.п.
Как установить сервер Interbase или Firebird вместе со своим приложением?
Как сделать свой инсталлятор сервера?
FAQ по установке
можно ли установить 2 разных сервера на один компьютер
после установки Firebird перестали работать кодировки
после установки Yaffil стал падать сервер или udf
не могу открыть базы данных от 5.x из 6.0 или unsupported on-disk structure for x.gdb;found 9, support 10
"Can not attach to password database" после установки
Работа в сети
Не могу подсоединиться к серверу
ошибка unavailable database
не работает или перестал работать Classic (CS)
Не берется база с расшаренного диска
Не удается сделать больше 10, 70, 150 подключений
Как найти сервер Interbase, Firebird, Yaffil в сети?
При отключении клиентов остаются коннекты на сервере
После некоторого времени отключаются клиенты
Сервер не загружен, все жутко тормозит.
UDF - пользовательские функции
Что такое UDF, и где их взять?
Как правильно аллокировать память для UDF с FREE_IT?
Как правильно объявлять функции UDF - stdcall или cdecl?
не могу подключить UDF
после установки Yaffil стал падать сервер или udf
Компоненты доступа
Что такое IBX?
Почему не обновляются данные?
Как выполнять запросы параллельно в приложении? или Как работать с IB/FB из threads?
Где взять ODBC для 6.0?
Русские буквы в InterClient
Поддерживает ли BDE третий диалект (IB6 и выше)?
Как указать роль (ROLE) в BDE ?
Чем можно работать с IB 6?
DBD: ошибка Not enough LongReadLen buffer
dpb constant 0 unknown
Операционные системы
под какие платформы выпускается InterBase, Firebird, Yaffil?
В чем разница между архитектурами SuperServer и Classic?
Клиент от Firebird, Yaffil и IB7 не работает под Win95 (Win98)
Есть ли Interbase 6 или Firebird для Novell Netware?
почему не используются два (четыре) процессора?
хочу шифровать трафик
медленный коннект (и работа) на WinMe/WinXP
медленный (долгий) коннект на Win2003
нет коннекта после установки SP2 на Windows XP
Есть ли хостинг баз Interbase/Firebird/Yaffil?
Общие проблемы
как создать базу данных?
как делать backup (резервную копию)
проблемы с float и double precision
использование генераторов в триггерах
При выполнении запроса выдается "I/O Error for file..."
При долгой работе переполняется память сервера
не удается создать вторичный ключ (FK)
я удалил SYSDBA. Что делать?
что такое rdb$db_key?
как правильно задать SEGMENT SIZE для BLOB?
как работать с BLOB?
как поместить базу на CD?
как в параметр передать несколько значений (where id in (aram)
select DISTINCT выполняется медленно или не использует индексы
после изменения вызывается старая процедура
можно ли отменить insert в триггере
можно ли заменить FK на триггеры, или
проверка целостности на триггерах
Есть ли ограничения на длину запроса
или ограничения на число запросов в процедуре, триггере
Как ограничить выводимое число записей, или
есть ли в InterBase и Firebird аналог limit, top и т.п. ?
update set a=b, b=a теряет значение a
особенности работы INSERT/UPDATE/DELETE с подзапросами в условии
или
delete с first в подзапросе удаляет все записи
зацикливание на insert into table1 select * from table1

Если вы среди вопросов не нашли нужный, то обратитесь к старому FAQ, или на www.borland.com/interbase, или на www.ibphoenix.com. Вопросы и предложения по FAQ направляйте на адрес support@ibase.ru.
Ответы
Какие версии платные, а какие бесплатные?

С момента выпуска 6.0 прошло много времени. За это время у Borland Interbase опять стал платным, а также были выпущены Firebird и Yaffil.

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

InterBase:
5.0, 5.1, 5.5, 5.6 - платный, вопреки распространенному мнению о его бесплатности "за давностью лет".
6.0.0.627 - бесплатный, самый первый релиз. Старье.
6.0.1.0 - бесплатный, более свежий вариант.
6.0.1.6 - платный, требует лицензий (или trial на 90 дней)
6.0.1.6 от mers.com - бесплатный, на базе кода бесплатной 6.0.1.0 от Borland, с мелкими исправлениями
6.0.2 от mers.com - бесплатный, крайне не рекомендуется к использованию (баги)
6.5.0.28 - платный, требует лицензий (или trial на 90 дней)
7.0 - платный, требует лицензий (или trial на 90 дней)
7.1 - платный, требует лицензий (или trial на 90 дней, привязывается к компьютеру)
7.5 - платный, требует лицензий (или trial на 90 дней, привязывается к компьютеру)

Firebird:
все версии бесплатны по лицензии InterBase Public License (внутри дистрибутива)

Yaffil
До билда 876 все версии были платными, кроме Yaffil Personal. С 2 декабря 2003 года продажа Yaffil прекращена, объявлено о слиянии проектов Yaffil и Firebird - см. пресс-релиз.

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

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

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

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

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

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 обратно стать не может.
Что такое Firebird Foundation?

Firebird Foundation - это некоммерческая организация, созданная для поддержки открытого проекта Firebird.

Подробнее - www.firebirdsql.org/ff/foundation/main_ru.html

Если в двух словах, то Firebird Foundation принимает как членские взносы, так и спонсорские вклады, которые затем выделяются в виде грантов на выполнение тех или иных работ с кодом сервера Firebird. Конечно, вы можете использовать Firebird бесплатно, но также можете и

а) вступить в члены Firebird Foundation, содействуя своим денежным вкладом развитию проекта
б) при достаточной квалификации заработать, участвуя в работе над кодом Firebird.

Компания iBase принимает взносы от частных лиц и организаций, как членские (voting и assosiation), так и спонсорские. С вопросами обращайтесь на sales@ibase.ru или по телефону 953-13-34.
Отличается ли Interbase от Firebird?

Да. Базовыми являются возможности InterBase 6.0. Дальше надо смотреть на ReleaseNotes к конкретному продукту. Причем например для Firebird нужно последовательно смотреть RN для 1.0, 1.5, 1.51.

Firebird ReleaseNotes - 1.0, 1.5.0, 1.5.1.

InterBase ReleaseNotes - 6.5, 7.1.

Документация по Yaffil - http://yaffil.ibase.ru.
Какие ошибки и в каких версиях исправлены?

Как правило, каждый дистрибутив сопровождается readme, в котором перечислены исправления ошибок (иногда не все). Например, файл releasenotes.pdf от конкретной версии InterBase в самом конце содержит перечень исправленных ошибок. Исправления Firebird и Yaffil указаны на их сайтах:
исправленное в InterBase 5.6
ReleaseNotes от IB 7.1 (перечислены исправления относительно 6.0, 6.01, 6.5 и 7.0)
Yaffil bugfixes и документация (приведен перечень исправлений с частичными ссылками на багтрекер Firebird)
Firebird bug tracker (общий для всех версий FB, начиная с ошибок IB 6.0, содержит описания и состояния всех зарегистрированных ошибок)
ошибки, исправленные в Firebird 1.0 (относительно IB 6.0.0.627)
ошибки, не исправленные в Firebird 1.0
новая функциональность в Firebird 1.0
что такое "диалект"?

A: В Interbase 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, поддерживающий INT64, 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. Т.е. использование этих ключевых слов в качестве идентификаторов полей, таблиц и других объектов будет приводить к ошибке.

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

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

Более подробно диалекты описаны здесь. Работа с большими NUMERIC и DECIMAL очень подробно описана в документе. Облегчить переход с 5.x на 6.0/7.x или Firebird поможет соответствующий документ. Для облегчения перехода с диалекта 1 на диалект 3 как минимум рекомендуется не использовать строки в двойных кавычках (при использовании IBExpert в свойствах алиаса БД установите "always capitalaise database object names".

В InterBase 6/7, Yaffil и Firebird поддерживаются как 1 так и 3-й диалекты.
Проблема с именами объектов в двойных кавычках в 3-ем диалекте

При работе в инструментах типа IBExpert и других, которые позволяют создавать таблицы и процедуры "автоматизированно", рекомендуется проверить, переводится ли имя объектов автоматически в верхний регистр, или нет. Если да (переводится), то проблем необходимостью именования объектов в двойных кавычках не будет. Если нет, то будут. Пример:

если создавать таблицу в окне SQL Editor IBExpert как
create table MyTable (MyField integer);

то сервер автоматически приведет имена MyTable и MyField в верхний регистр, и сохранит эти имена таблицы и столбца. После чего к таблице можно обращаться как
select myfield from mytable
select MyField from MyTable
select mYfIELD from mYtABLE
select MYFIELD from MYTABLE

имена объектов, указанные без обрамления двойными кавычками, будут также приведены в верхний регистр, и успешно найдены сервером в системных таблицах.

Если же таблица создавалась в "редакторе таблиц" IBExpert, и в настройках псевдонима БД не указано "always capitalaize object names", то "красивое" указание MyTable и MyField будет превращено IBExpert-ом в SQL-оператор
create table "MyTable" ("MyField" integer)

после чего к таблице можно будет обращаться только следующим образом:
select "MyField" from "MyTable"

Если вы ошибетесь в регистре любой буквы имени столбца или таблицы (также процедуры, view и любых других объектов, создаваемых через "редактор" а не через SQL Editor прямым выполнением SQL-операторов DDL), то сервер не найдет указанные объекты в системных таблицах, и выдаст ошибку что конкретный объект не существует. Например, все те варианты, которые были указаны выше без двойных кавычек работать не будут, а также не будет работать
select "myfield" from "mytable"

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

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 базы данных.

При экспериментировании с переходом на альтернативные версии (InterBase>Firebird или обратно) рекомендуется сохранять исходную базу данных, и для нового сервера работать с базой данных, восстановленной из restore.
Может-ли база данных быть больше 2-х (4-х) гигабайт?

А: Да, может. Однако это зависит от многих факторов - от версии сервера, от версии операционной системы, и от типа файловой системы, на которой находится база данных. Понятно, что на FAT16 нельзя сделать логический диск больше 2-х гигабайт. Также известно что при копировании больших файлов с FAT32 на NTFS не копируется более 2-х гигабайт. На Linux ядро системы должно быть версии 2.4 для нормальной работы с файлами таких размеров.

Достаточно сказать, что все самые последние версии InterBase, Firebird и Yaffil могут работать с базой данных любого размера более 4-х гигабайт. Версия Interbase 5.x - повредит БД при переходе за границу в 4 гигабайта. Поэтому, если вы не уверены в версии ОС, файловой системе или версии сервера - используйте многофайловую БД, т.е. базу данных, разбитую на части. Максимальный размер базы данных для многофайловой БД равен 131 терабайт (это не ошибка, именно терабайт).
Каков средний размер баз данных на InterBase?

A: Этот вопрос иногда звучит по другому - "я слышал, что IB не работает нормально с базами больше 200 мегабайт" и т.п., что конечно относится к разряду мифов. Конечно, такой миф может стать реальностью, если в качестве сервера для БД размером 300-500 мегабайт и 10-ти пользователей выбрать компьютер с Windows 95/98 и памятью 32Mb. Хотя на такой конфигурации IB/FB/YA вполне будут работать, для сервера лучше выбирать "серверные" операционные системы, пусть даже и Windows 2000 Professional.

Компания iBase уже два года подряд делает доклады по состоянию дел в области InterBase на ежегодной конференции "Корпоративные Базы Данных", проводимой www.citforum.ru. Вы можете ознакомиться с докладами за 2002 и 2003 год.

По данным на 2005 год мы оцениваем объемы баз данных как
15-300мб : 15%
300мб-1гб : 35%
1-20гб : 40%

20-100гб : 10%

Также есть уникальные случаи (единичные) с объемами баз данных в 180 и 980 гигабайт (ни в одном из упомянутых случаев БД не используется для хранения больших blob).

Сравнить приведенные объемы БД с аналогичными например на MS SQL и Oracle достаточно сложно, т.к. все зависит от самих данных, и степени их упаковки. В базах данных IB упаковка используется во многих местах (индексы, версии update, delete), и сравнивать объем БД для упомянутых серверов нужно включая объем transaction log. По замерам, выполненным 4 года назад, базы IB с тем же объемом "сырых данных" были в 2-3 раза меньше, чем базы MS SQL и Oracle.
Как уменьшить размер базы данных?

Обычно такой вопрос возникает, когда часть каких-то данных (или вообще все тестовые данные) в базе данных удалена.

Файл базы данных внутри похож на файловую систему. То есть, когда вы удаляете файл на логическом диске, размер логического диска не уменьшается, потому что удаленный файл образует кусок свободного пространства в том месте, где он находился. А это не обязательно самый конец файла, чтобы логический диск мог быть просто уменьшен на его размер. Примерно то же самое и в базе данных - освободившееся место будет использовано повторно новыми данными.

Поскольку операция "дефрагментации" базы данных могла бы быть выполнена только в монопольном режиме, возможность "дефрагментации" и уменьшения файла базы данных "на ходу" в Firebird и InterBase отсутствует.
Если требуется сжать файл базы данных, то нужно использовать операции backup/restore (gbak -b .../gbak -c ...).

Кроме того, в версионном движке при удалении записей свободное место не возникает, а наоборот, возникают новые версии, т.е. файл базы данных может увеличиться. Эти версии будут находиться в базе данных до тех пор, пока не будут убраны как мусор. И даже в этом случае файл базы не уменьшится, просто в нем будет больше свободного пространства для новых или измененных данных.

Увеличение размера файла - достаточно затратная по ресурсам операция для файловой системы. Поэтому, новые версии InterBase и Firebird содержат дополнительную функциональность:
InterBase 2007 SP2 имеет средства для задания исходного размера файла БД при создании БД или restore
Firebird 2.1 при необходимости увеличивает размер файла "порциями", которые больше чем размер одной страницы
Что будет, если отключить Forced Writes ?

Forced Writes - это режим записи изменений в файл БД. Управлять этим режимом (включать и выключать) можно через константы dpb (isc_dpb_force_write) или утилитой gfix (gfix db.gdb -write sync/-write async). Увидеть состояние флага можно утилитой gstat (gstat db.gdb -h).

Собственно, при Forced Write = ON файл базы данных открывается в режиме (на Win32 это флаг FILE_FLAG_WRITE_THROUGH функции createfile), когда операционной системе запрещено осуществлять "отложенную запись", т.е. накапливать измененные страницы файла БД в кэше. При этом, как только выполняется commit, все измененные страницы БД пишутся на диск. При FW = OFF сама система решает, когда и в каком порядке записывать измененные страницы в файл БД.

Надежная работа сервера при установленном Forced Writes в ОFF возможна при выполнении следующих условий:
наличие UPS, желательно поддерживающего возможность автоматического завершения работы сервера при длительных сбоях в электросети
стабильная работа операционной системы (т.е. наличие последних сервис-паков)
стабильная работа всех запущенных приложений на сервере (и отсутствие "лишних" приложений)
использование стабильной версии Interbase, Firebird, Yaffil
корректная работа UDF
регулярное выполнение резервного копирования базы данных
отсутствие запросов, приводящих к краху сервера.

Соответственно, если сервер БД установлен на "ненадежной" операционной системе вроде Windows 95/98, или не имеет UPS, любое "зависание" операционной системы или просто отключение питания может привести к повреждениям базы данных при FW=OFF (на Win95/98 повреждения в такой ситуации могут случиться и при FW=ON). Подробнее см. "Как починить БД".

Что касается FW=OFF при выполнении перечисленных выше условий, то это может дать определенное ускорение массовых операций update и delete. Однако, на современных дисках SCSI (и даже некоторых IDE) вы можете вообще не обнаружить разницы.

Разные версии сервера при создании БД могут устанавливать Forced Writes как в ON так и в OFF (например, у IB 6.0.0.627 базы создаются с FW=OFF), поэтому если вы заботитесь о надежности системы - посмотрите состояние данного флага в вашей БД.
Какой размер страницы выбрать?
  Ответить с цитированием
 
Время генерации страницы 0.10469 секунды с 10 запросами