Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil
Шрифт:
Новая структура данных на диске: ODS11
Для поддержки нововведений базы данных, созданные (или восстановленные) в InterBase 7, имеют новую версию внутренней структуры базы данных - On-Disk Structure (ODS). Новая версия ODS несовместима с прежними ODS. Это значит, что старые версии InterBase и клоны InterBase Open Source (Firebird и Yaffil) не будут работать с базами данных, имеющими ODS11.
Миграция баз данных на новую ODS возможна только через backup/restore - по тому же самому принципу, что описан в главе "Миграция". Следует также отметить, что в InterBase 7 все же поддерживаются базы данных 1-го диалекта, хотя при выпуске 6-й версии объявлялось, что далее диалект 1 поддерживаться
Ниже мы коротко рассмотрим остальные нововведения, напрямую ответственные за появление 11-й версии On-Disk Structure.
Новый тип данных: BOOLEAN
InterBase теперь поддерживает тип данных BOOLEAN в соответствии со стандартом SQL99. Поля и переменные типа BOOLEAN могут принимать значения TRUE/FALSE/UNKNOWN (да-да, и здесь используется трехзначная логика, как и везде, где есть понятие неопределенного значения). Размер BOOLEAN - 32 бита.
Чтобы создать в таблице поле типа BOOLEAN, достаточно написать что-то вроде этого: CREATE TABLE Tab!el(MyBOOL BOOLEAN)
Возможным значениям типа BOOLEAN - TRUE, FALSE и UNKNOWN соответствуют целые значения 0, 1 и неопределенное значение NULL.
Новые ключевые слова
В Interbase 7 появились новые ключевые слова, связанные с вышеупомянутым типом BOOLEAN:
BOOLEAN, TRUE, FALSE, UNKNOWN
Хочется отметить, что в предыдущей версии (6.5) были добавлены следующие ключевые слова:
ROWS, TIES, PERCENT
Их значение разъяснено в документации к InterBase 6.5.
Имена объектов длиной 68 символов
Возможная длина имен объектов в InterBase 7 теперь равна 67 символов вместо 31 символа ранее. Да, именно 67 - хотя в заголовке этого раздела написано 68. фактически хранится лишь 67 символов, а последний символ представляет собой завершающий 0.
Очевидно, чтобы воспользоваться данной возможностью, необходимо обновить версию клиентской библиотеки gds32.dll (а Java-разработчики должны использовать Туре 4 драйвер).
Чтобы поддержать данное изменение длины имен объектов, была изменена структура XSQLDA. Надо сказать, что данное изменение весьма неприятно сказалось на клиентских библиотеках доступа к InterBase, таких, как IBX, FIBPlus, dbExpress и т. д. Теперь, чтобы перевести ваше программное обеспечение под InterBase 7, понадобится перекомпилировать существующие клиентские приложения с новыми версиями клиентских библиотек.
Новые функции API для работы с Blob и массивами
Были добавлены 10 новых функций InterBase API для поддержки длинных имен объектов. Ниже представлены новые вызовы API:
isc_array_gen_sd!2
isc_array_get_slice2
isc_array_lookup_bounds2
isc_array_lookup_desc2
isc_array_set_desc2
isc_array_put_slice2
isc_blob_default_desc2
isc_blob_gen_bpb2
isc_blob_lookup_desc2
isc_blob_set_desc2
Другие изменения в 7-й версии InterBase
SET TERM больше не нужен в isql
Как вы знаете из главы "Хранимые процедуры", для создания хранимых процедур и триггеров с помощью SQL-скриптов и интерпретатора isql необходимо предварять и завершать команды создания и изменения процедур и триггеров специальной командой смены разделителя.
В 7-й версии ликвидирована нужда в команде SET TERM - теперь интерпретатор SQL корректно обрабатывает указанные выше команды и не выдает ошибку, которая ранее являлась просто ночным кошмаром для начинающих (во всяком случае, для тех из них,
что не любят читать документацию).Определение версии клиента
Некоторые клиентские библиотеки и драйверы могут иметь необходимость определять версию клиентской библиотеки Interbase. Для этого введены три новые функции API:
isc_get_client_version,
isc_get_client_major_version,
isc_get_client_minor_version.
Безопасность внешних таблиц. Параметр EXTERNAL FILE DIRECTORY
В определенных условиях внешние таблицы (external table) могут быть источником проблем в безопасности. Известно, что в предыдущих версиях InterBase, используя механизм внешних таблиц, можно было выкрасть всю базу целиком, от первого до последнего байта!
Здесь мы. конечно, не будем приводить этот способ, но скажем, что в InterBase 7 наконец разрешили эту серьезную проблему путем введения ограничений на возможное расположение системных таблиц. Теперь внешние таблицы должны удовлетворять следующим условиям:
* Внешние таблицы должны находиться в каталоге <interbase_hoine>/ext. InterBase будет сначала искать внешние таблицы в этом каталоге.
* Если внешняя таблица находится не в каталоге /ext, то путь к каталогу, где она находится, нужно указать в ibconfig при помощи параметра EXTERNAL_FELE_DIRECTORY Параметр можно указывать несколько раз для всех каталогов, где могут находиться внешние таблицы.
* Введение этих ограничений позволяет значительно ограничить доступ злоумышленника к данным внутри базы данных.
Единое имя файла параметров InterBase
Теперь файл параметров InterBase 7 имеет единое имя как для платформы Windows, так и для Linux - ibconfig.
Рекомендуемое расширение для файлов баз данных - *.ib
Теперь рекомендуемым разрешением для файлов баз данных становится ib - вместо привычного gdb. Прежде всего эта смена расширения связана с тем, что при использовании InterBase на Windows XP эта операционная система распознает файлы с расширением gdb как нечто системное и пытается при любых его изменениях сделать резервную копию. В результате чего производительность колоссально снижается. Конечно, можно эту функцию Windows XP отключить с помощью определенных манипуляций, однако для предупреждения проблем с тиражируемыми приложениями, которые должны ставиться автономно, было принято решение изменить расширение.
Конечно, InterBase 7 по-прежнему будет работать с базами данных, имена файлов которых имеют расширения любых видов и вообще не имеют расширения, но рекомендуется все же использовать *.ib.
Новое имя базы данных пользователей
Отныне база данных пользователей isc4.gdb отходит в прошлое, и вместо нее по умолчанию будет использоваться база данных admin.ib. По сути, она выполняет идентичные функции.
Правда, наименование базы данных пользователей теперь не является жестко заданным - используя параметр ADMIN_DB, вы можете задать любое приятное вашему слуху имя базы данных пользователей InterBase.
Заключение
Выход InterBase 7 показал всем, что у компании Borland есть еще "порох в пороховницах", и отказываться от этой СУБД она не намерена.
Нельзя сказать, что InterBase 7 поразил воображение пользователей своими нововведениями, но он сделал очень хороший задел на будущее - прежде всего, благодаря эффективной поддержке многих процессоров. Можно ожидать, что в дальнейших версиях InterBase, ближайшая из которых (может быть, 8 или 7.5) ожидается в 2003 году, будут проведены кардинальные изменения в структуре оптимизатора SQL-запросов, которыми ныне щеголяют "братья-СУБД" Firebird 1.5 и Yaffil 1.0.