Выбрать главу

ELSE

EXESTRING = EXESTRING || 'FROM ';

EXESTRING = EXESTRING || USR;

IF (GRANTOPT = 1) THEN

EXESTRING = EXESTRING || ' WITH GRANT OPTION';

EXECUTE STATEMENT EXESTRING;

END

END

END ^

SET TERM ;^

Если вы сами хотите поэкспериментировать с этими скриптами и изменить их для ваших потребностей, вы можете найти исходные тексты в разделе Download на http://www.apress.com, в файле permscripts.sql.

Пора дальше

Следующая (и последняя) глава этой части содержит множество тем, связанных с архитектурными вариантами сервера, включая раздел по инсталляции и использованию встроенного Суперсервера под Windows. Установки файла конфигурации в firebird.conf или isc config/ibconfig могут быть найдены в этой главе вместе с темой безопасности параметров конфигурации, связанных с использованием в Firebird внешних выполняемых и других файлов.

ГЛАВА 36. Конфигурация и специальные возможности.

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

Сначала описываются архитектурные отличия между моделями Firebird Классический сервер и Суперсервер. Затем обсуждаются различные параметры конфигурации сервера и некоторые руководящие принципы разработки для встроенного сервера под Windows.

В заключение мы рассмотрим коды пользовательских внешних модулей, которые вы можете писать для использования на серверной стороне, чтобы выполнять специальные вычисления и преобразования (внешние функции), конвертирование BLOB из одного формата в другой (фильтры BLOB) и реализовывать международные наборы символов. В конце этой темы содержатся подробности по конфигурированию доступа к файловой системе сервера для этих и других внешних объектов.

Сравнение архитектуры Суперсервера и Классического сервера

Хотя Суперсервер и Классический сервер имеют много общих характеристик - действительно, они созданы из одного базового кода, - они представляют совершенно различные модели внутренних операций.

Выполняемые программы и процессы

Классический сервер выполняется как один серверный процесс на каждое соединение (рис. 36.1). Когда клиент пытается соединиться с базой данных Firebird, экземпляр исполняемого модуля fb inet_server инициализируется и продолжает оставаться предназначенным для этого клиентского соединения в течение всего времени этого соединения. Когда клиент отсоединяется от базы данных, экземпляр серверного процесса завершается.

Суперсервер выполняется как один вызов выполняемого модуля fbserver (рис. 36.2). fbserver запускается один раз системным загрузочным скриптом или системным администратором и остается запущенным, ожидая запросов на соединение. Процесс завершается явным остановом.

Рис. 36.1. Сеть Классического сервера и модель процесса

Управление блокировками

При Классическом сервере каждый клиентский процесс сервера имеет свой собственный, связанный с базой данных кэш, и множество процессов борются за доступ к базе данных. Подсистема управления блокировками, fb lockrngr, использует методы внутреннего процесса связи (Inner-Process Communication, IPC) для управления и синхронизации доступа параллельных процессов к страницам.

В Суперсервере менеджер блокировок реализован как поток процесса fbserver и использует механизмы внутрипоточной связи вместо механизма сигнализации POSIX.

Подробности внутреннего управления блокировками см. в главе 40.

Использование ресурсов

В Классическом сервере каждый экземпляр fb_inet_server выделяет в своей области памяти статический кэш для страниц базы данных. Поэтому использование ресурсов линейно возрастает с каждым дополнительным клиентским соединением. Однако, когда количество одновременных соединений относительно мало, Классический сервер использует меньше ресурсов.

Рис. 36.2. Сеть Суперсервера и модель процесса

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

Локальный доступ

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

За исключением встроенного сервера Суперсервер требует, чтобы приложения использовали сетевые методы для запросов ввода/вывода, и удовлетворяет эти запросы по сети. В Linux Суперсервер не поддерживает локальный прямой доступ.

* На платформах, отличающихся от Windows (и также рекомендовано для Windows), локальные соединения с Суперсервером через сервер localhost (с адресом IP по соглашению 127.0.0.1).

* Сервер Windows и локальный клиент могут имитировать сетевое соединение через совместно используемое пространство IPC. Этот механизм, называемый локальным доступом, не может безопасно обрабатывать множество соединений. После Firebird 1.5 он замещается локальным методом доступа с использованием подсистемы XNET.

Встроенный сервер может использовать только "локальный для Windows" метод доступа и поддерживает одно и только одно соединение с каждой локальной базой данных. Встроенный клиент может единолично соединяться с множеством локальных баз данных и получать к ним доступ через встроенный сервер. Встроенный клиент может также соединяться как обычный сетевой клиент с базами данных на других серверах.

Файл конфигурации Firebird

Firebird не требует постоянных серьезных изменений конфигурации, как это делает большинство других мощных реляционных СУБД. Однако доступен большой диапазон режимов конфигурации для настройки сервера Firebird и хост-системы, на которой он запущен.

Файл конфигурации Firebird имеет имя firebird.conf во всех версиях Firebird, начиная с 1.5. В предыдущих версиях его имя зависит от операционной системы:

* в Linux/UNIX это файл isc config;

* в Windows его имя ibconfig.

Некоторые новые параметры были добавлены в версию 1.5.

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

Файл конфигурации может быть отредактирован любым текстовым редактором, например, vim (Linux) или Блокнот (Windows). Не копируйте этот файл с машины Windows на Linux и наоборот, поскольку две системы по-разному хранят символ перевода строки.

Параметры

Записи имеют форму.

имя-параметра = значение

имя-параметра является строкой, которая не содержит пробелов и именует конфигурируемое свойство сервера.

Значение является числом, логическим значением (1 = True, 0 = False) или строкой, что задает значение параметра.

Для установления значения любого параметра в значение не по умолчанию удалите маркер комментария (#) и отредактируйте значение.

Имена параметров Firebird 1.0.* в ibconfig/iscconfig и их синтаксис не являются равнозначными параметрам в firebird.conf. Формат, размер и количество параметров являются более ограниченными.

Формат в ibconfig/isc_config:

имя-параметра значение

Здесь пробелами между именем и его значением могут быть символы табуляции или пробелы - по желанию, что больше радует глаз. Каждая строка в файле ограничена 80 символами. Неиспользуемые параметры и значения инсталляции по умолчанию закомментированы символом #.