
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Хелен Борри
Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями. Для разработчиков баз данныхХелен Борри
Firebird
РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Введение
Об авторе
Хелен Борри (Helen Borrie) работает по контракту инженером по программному обеспечению, по совместительству писательница и технический редактор. Она занимается разработкой баз данных более 20 лет, а с Firebird и его предшественниками работает с 1996 года.
Хелен - активный участник сообщества онлайновой поддержки Firebird и одна из основателей FirebirdSQL Foundation Inc.
Хелен живет в Австралии и общается через Интернет из своей домашней студии, расположенной среди эвкалиптов на живописном берегу Нового Южного Уэльса.
О техническом редакторе
Джефф Ворбойз (Geoff Worboys) занимается проектированием и разработкой приложений, связанных с базами данных, около 15 лет. В течение последних более 10 лет он использует Firebird, а перед этим применял его предшественника InterBase в качестве системы управления реляционными базами данных в разработке приложений, инструментов управления и компонентов для Delphi, С и C++ в зависимости от ситуации.
Сейчас он работает в укромном офисе в Новом Южном Уэльсе, Австралия, разрабатывая приложения как для клиентов из Австралии, так и для клиентов из других стран. Он наблюдает кенгуру и других обитателей дикой природы из своего окна, размышляя над проблемами проектирования баз данных и приложений - Интернет замечательная штука.
О научном редакторе перевода на русский язык
Кузьменко Дмитрий занимается проектированием и разработкой приложений баз данных уже 16 лет. С InterBase начал работать в 1994 году. В 2002 году Дмитрий основал фирму iBase (www.ibase.ru), которая занимается техническим сопровождением InterBase и Firebird, а также обучением, консультациями и продажей программных продуктов.
Дмитрий живет и работает в Москве, видел кенгуру только в зоопарке и по каналу Discovery и не откажется при удобном случае посетить Австралию.
Благодарности
Вот, наконец, мы с книгой по Firebird в руках! Ее написание избавило меня от других рискованных занятий в течение почти года. Я постоянно беспокоила моих хороших друзей из сообщества Firebird, так что я должна вначале поблагодарить всех их, даже если я не назову каждого по имени. У нас есть наша книга, спасибо вам.
Павел Цизар (Pavel Cisar), мой давнишний друг по онлайновой поддержке из Kingdom of Geek, уделял мне свое время и опыт, выходящие за рамки его обязанностей. Павел был опорой издательской группы, он также давал отдельные неоценимые советы на основании опыта написания своей собственной книги по Firebird и InterBase в прошлом году (в Чехии) и его исследований внутренней работы оптимизатора запросов. Анна Харрисон (Ann Harrison)- "мать InterBase", превосходный специалист в большинстве премудростей сервера Firebird. Иван Преносил (Ivan Prenosil) щедро делился полученным им практическим опытом, а проницательность Дмитрия Серебрякова избавила меня от многих оплошностей. Клавдио Валдеррама (Claudio Valderrama Cortes) делился своим пониманием секретов RDB$DB_KEY. Спасибо также Дэвиду Брукстоуну Шнепперу (David Brookestone Schnepper) за полезные комментарии о наборах символов и Грегори Дицу (Gregory Deatz) за предоставление мне документа по внешним функциям FreeUDFLib в приложении 1.
Моему другу Джеффу Ворбойзу особая благодарность за огромную заботу и терпение, которые он проявил при техническом просмотре содержания книги и многих деталей. Мы не всегда были согласны друг с другом, но книга по Firebird стала лучше благодаря ему. Спасибо также Дугу Чамберлину (Doug Chamberlin) и Иоане Пирте (Ioana Pirtea) за их просмотр "читательскими глазами".
Я также благодарна директорам компании IBPhoenix Полу Бигу (Paul Beach) и Анне Харрисон, а также моим сотрудникам за то, что помогли мне в вопросах временных задержек и финансирования книги.
Предложения по книге о Firebird на английском языке получали в издательствах отказ на протяжении более трех лет, пока Apress не взяла на себя риск и не выпустила в свет книгу по Firebird. Apress, сообщество Firebird благодарит вас за то, что услышали нас.
И, наконец, я должна от всего сердца от имени всех нас сказать "спасибо" разработчикам Firebird, чьи увлеченность, умения и самоотверженность дали нам Firebird.
Kia ora! Kia manawa!
Хелен Борри
Апрель 2004
Введение в Firebird
Что такое Firebird?
Firebird - это мощная, компактная реляционная система управления базами данных (РСУБД) с архитектурой клиент-сервер. Она может выполняться на разнообразных серверных и клиентских платформах, включая Windows, Linux и на некоторых других платформах UNIX, включая FreeBSD и Mac OS X. Это РСУБД промышленного применения, чьи возможности имеют высокий уровень соответствия стандартам SQL, при этом она реализует некоторые мощные расширения языка процедурного программирования конкретного производителя.
Кому нужна эта книга?
Разработчики с некоторым опытом работы с базами данных, которые, возможно, переходят на платформу клиент-сервер впервые, найдут в этой книге все необходимое, чтобы стать более продуктивными в Firebird. Несмотря на то, что это руководство не является начальным учебником по SQL или по проектированию баз данных, в нем делается акцент на практику проектирования хороших приложений на базе клиент- серверных реляционных СУБД; оно также содержит документацию по языку SQL для Firebird - определения, манипуляция, язык программирования - с большим количеством деталей, советов и примеров.
Firebird - серьезный программный продукт, созданный для установки в малых и больших сетях, он также обладает некоторыми полезными возможностями для автономных конфигураций. Его небольшой размер дает возможность одиночным разработчикам легко выполнять большие производственные разработки в домашнем офисе. Для администратора базы данных или системного проектировщика книга дает основные сведения по инсталляции, конфигурированию, настройке, безопасности и инструментам. Мощь и высокий уровень соответствия стандартам делает Firebird привлекательной средой для изучения информационных технологий в университетах. Эта книга даст достаточный материал для студентов второго и третьего года обучения компьютерным наукам для работы с Firebird.
Тех кто использовал до настоящего момента Firebird 1.0.x или InterBase, книга по Firebird знакомит с расширениями языка, безопасностью и возможностями оптимизатора, которые были добавлены в версию 1.5.
Где найти нужную вам информацию?
Часть I является "учебным лагерем" для новичков в Firebird. Здесь вы найдете основные сведения по инсталляции программного обеспечения, созданию и запуску клиента сети и некоторые полезные установки конфигурации. Эта часть завершается главой по самым основным операциям: соединение с базой данных примера и создание вашей первой собственной базы данных с использованием утилиты isql, входящей в состав Firebird. В этой части вводятся различные инструменты командной строки для администратора и рассказывается, как запустить и остановить сервер.
Часть II содержит обзор концепций и моделей архитектуры клиент-сервер и описание того, насколько им соответствует реализация Firebird. Финальная глава этой части содержит некоторые общие практические инструкции по использованию клиентских библиотек Firebird.
В части III вы найдете детальное описание каждого типа данных SQL, поддерживаемого Firebird. Существует отдельная глава для каждого класса типа данных - числа, тип дата/время, символьные типы и т.д. - с множеством советов по их использованию.
Часть IV исследует объекты базы данных в подробностях, начиная с самой базы данных и переходя к таблицам, индексам и другим типам объектов. Синтаксис и использование операторов языка определения данных (Data Definition Language, DDL) представлены в этой части.
Часть V содержит документацию по языку манипулирования данными (Data Manipulation Language, DML), используемому в SQL Firebird.
Часть V1 описывает транзакции: как они работают, как их конфигурировать, и содержит советы по их использованию в ваших прикладных программах.
Часть VII описывает программирование на стороне сервера в Firebird: написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в вашем коде на сервере.
Часть VIII посвящена вопросам безопасности, архитектуры и конфигурации.
Последняя часть IX документирует инструменты командной строки и их оболочки для администрирования.
Приложения и глоссарий
В приложениях и глоссарии представлены следующие материалы и детали.
Приложение 1 содержит имена, описания и примеры внешних функций (UDF, User- defined functions, Определенные пользователем функции), поставляемых в библиотеках fb_udf и ib_udf для платформ POSIX (Portable Operating System Interface for UNIX, Интерфейс переносимых операционных систем) и в свободно распространяемой Грегори Дитцем FreeUDFLib.dll для Windows.
Приложение 2 является собранием советов по устранению ошибок; к нему вы можете обратиться, когда встречаются проблемы соединения удаленных клиентов с сервером Firebird.
Приложение 3 суммирует информацию о некоторых основных драйверах и средствах программного интерфейса, доступных в Firebird. Содержит адреса сайтов загрузки и поддержки этих материалов.
Приложение 4 описывает пошаговую процедуру, которой вы должны следовать, если обнаружили логические ошибки в базе данных Firebird.
Приложение 5 описывает множество графических инструментов, доступных для работы с вашими базами данных Firebird. Содержит ссылки на адреса загрузки инструментов.
Приложение 6 содержит некоторые замечания о базе данных employee.fdb (employee.gdb в версии 1.0.x), которую инсталлятор Firebird устанавливает в подкаталоге examples вашего корневого каталога Firebird.
Приложение 7 перечисляет различные физические ограничения, применимые к базам данных Firebird 1.0.x и 1.5.
Приложение 8 является полным справочником по интернациональным наборам символов и связанным с языками порядкам сортировки, поставляемым с Firebird 1.5.
Приложение 9 содержит спецификации описания данных для таблиц схемы, поддерживаемых сервером Firebird внутри каждой базы данных. Включает листинги исходных кодов отдельных полезных просмотров, которые вы можете создавать для просмотра системных таблиц.
Приложение 10 содержит полный список в виде таблицы кодов исключений (SQLCODE и GDSCODE), определенных в Firebird 1.5, вместе с соответствующими символическими константами и текстами сообщений на английском языке.
Приложение 11 содержит список всех ключевых слов, которые Firebird 1.0.x и 1.5 трактует как зарезервированные слова.
Приложение 12 - собрание ресурсов, доступных пользователям Firebird. Содержит книги и другие документированные рекомендации и описания, а также ссылки на форумы поддержки.
Глоссарий содержит детальные описания терминологии и концепций, которые вы, скорее всего, встретите при вашем путешествии по Firebird. Данные были получены из опросов опытных и не слишком опытных членов сообщества Firebird, которых попросили предоставить "список пожеланий" для глоссария.
Происхождение Firebird
Созданный как проект с открытыми исходными кодами, Firebird является первым в новом поколении потомков InterBase 6.0 Open Edition фирмы Borland, который был сформирован для разработки открытых исходных кодов в июле 2000 г. в рамках InterBase Public License (IPL).
Исходные коды Firebird поддерживаются и развиваются на основании международного открытого кода на сайте SourceForge.net (http://sourceforge.net), большой группой профессиональных разработчиков, в которую входят добровольцы и наемные специалисты, получающие частичное финансирование из сообщества и коммерческих источников.
! ! !
СОВЕТ. Продукты реляционной СУБД Firebird и некоторые связанные модули распространяются полностью свободными от регистрации или гонорара на основании универсальной лицензии на открытые коды. Проект Firebird, его разработчики и его программное обеспечение никак не связаны с Borland Software Corporation.
. ! .
Проект Firebird
Разработка
Разработчики, проектировщики и тестеры, кто предоставил вам Firebird и некоторые драйверы, являются членами проекта открытых кодов Firebird в SourceForge, изумительного виртуального сообщества, которое является домом для тысяч групп программного обеспечения с открытыми кодами. Адрес проекта Firebird: http://sourceforge.net/projects/firebird. На этом сайте находятся исходные коды CVS, сообщения об обнаруженных ошибках и множество технических файлов, которые могут быть загружены для различных целей, связанных с разработкой и тестированием кода.
Разработчики и тестеры проекта Firebird используют форум firebird-devel@lists.sourceforge.net в качестве своей "виртуальной лаборатории" для общения друг с другом по вопросам улучшения, исправления ошибок и создания новых версий Firebird.
Любой, кто хочет наблюдать продвижение вперед и иметь обратную связь по вопросам разработки бета-версий, может присоединиться к этому форуму.
Поддержка разработчиков приложений и администраторов базы данных
Firebird имеет мощное сообщество добровольных помощников, включая большую группу активных разработчиков с многолетним опытом разработки и распространения Firebird и его предшественника InterBase. Чувство солидарности в этой большой группе таково, что, приобретя умения и изучив "внутренние хитрости" по советам других людей, члены группы создают соответствующий список для обучения других пользователей. Основным каналом свободной поддержки является форум поддержки Firebird.
Специализированные группы проекта поддерживают соответствующие форумы: Java, Delphi, C++ Builder, инструменты, Visual Basic, .NET, PHP и др. Группы представлены в виде списков e-mail, многие из них отображаются на сервере новостей. Самые свежие ссылки на эти форумы всегда могут быть найдены на главном Web- сайте сообщества (http://www.firebirdsql.org) и на дочернем коммерческом сайте IBPhoenix (http://www.ibphoenix.com).
Сайт IBPhoenix также содержит огромный объем технической и пользовательской документации, ссылки на инструменты сторонних разработчиков и доску текущих новостей о событиях, произошедших в сообществе Firebird.
В приложении 12 смотрите исчерпывающий список ресурсов поддержки сообщества.
FirebirdSQL Foundation
FirebirdSQL Foundation Inc. - это некоммерческий фонд, зарегистрированный в Новом Южном Уэльсе в Австралии, который собирает во всем мире денежные средства для предоставления разработчикам, работающим над основным и специальными проектами для развития, тестирования и улучшения Firebird. Средства поступают в виде частной и корпоративной спонсорской помощи, пожертвований или членских взносов. Это предоставляет возможность благодарным пользователям Firebird возвращать вложения за свободное использование программного обеспечения и поддержку сообщества. (См. на http://www.firebirdsql.org/ff/foundation.)
Спарки

Спарки, молодой, алый феникс с зеленым клювом - талисман Firebird. Спарки крутился возле проекта Firebird в различных нарядах с самого начала, однако он впервые появился "как персона" на Первой международной конференции по Firebird в г. Фулда в Германии, в мае 2003 года.
Обзор возможностей
Firebird является программным обеспечением для платформы клиент-сервер, разработанным специально для использования в локальных и глобальных компьютерных сетях. Соответственно, его ядро состоит из двух основных программ: сервер базы данных, который выполняется на сетевом хост-компьютере, и клиентская библиотека, через которую пользователи с удаленных рабочих станций соединяются и общаются с базой данных, управляемой сервером.
! ! !
ВНИМАНИЕ! Администрирование и разработка в полноценной SQL реляционной СУБД на платформе клиент-сервер, вероятно, являются совершенно новой для вас территорией. Вам это может показаться слишком сложным, если вы впервые отважились обратиться к программному обеспечению управления данными, в котором заложена возможность существования множества параллельных процессов. Часть II этой книги содержит введение в концепцию клиент-сервер. Если вы почувствуете, что теряетесь в следующих описаниях, вы можете тут же обратиться к части II, чтобы освоить контекст.
. ! .
Версии Firebird
Двоичные файлы Firebird версии 1.0.x были разработаны для корректировки и улучшения написанных на языке С модулей, которые сообщество открытых исходных текстов наследовало от InterBase 6.0. Для Firebird 1.5 модули были полностью переписаны на C++ с высокой степенью стандартизации.
Переход от версии 1 к версии 1.5 был в большей мере внутренним, интерфейс прикладного программирования (Application Programming Interface, API) не изменился. Программное обеспечение приложений, написанное для версии 1, требует небольших (или вообще никаких) изменений для работы с версией 1.5.
И хотя рекомендуется установить и использовать самую последнюю версию, несовместимость операционных систем означает (при всем уважении к Linux), что последняя версия 1.0.x- единственный выбор для некоторых сайтов. Многие новшества версии 1.5 были привнесены в версию 1.0.x, и регулярно выпускаются дополнительные сборки.
Доступ к сети
Сервер Firebird, запущенный на любой платформе, принимает TCP/IP-подключения клиентов с любой клиентской платформы, которая может выполнять Firebird API.
Клиенты не могут подключиться к серверу Firebird через какую-нибудь файловую систему коллективного доступа (NFS, соединение клиентов Samba, общие ресурсы Windows или сетевой диск и т.д.).
Клиент должен подключаться с указанием абсолютного физического пути. Тем не менее в Firebird 1.5 и выше средство алиасов баз данных позволяет приложениям выполнять "мягкое подключение" с использованием именованных алиасов, чьи абсолютные пути указаны специально для каждого сервера.
К серверу Firebird, запущенному на хосте в Windows с сервисами, можно получить доступ от клиентов Windows с помощью сетевого протокола Named Pipes (именованные каналы).
Многоверсионная архитектура
Модель изоляции и управления работой множества пользователей, принятая в Firebird, является центральной частью архитектуры; она позволяет сохранять в базе данных более одной версии записи одновременно. Множество версий одной записи может существовать одновременно - отсюда термин "многоверсионный". Каждая пользовательская задача имеет свой собственный контекстный вид состояния базы данных (см. следующий раздел) и записывает свои версии записей на диск сервера. В этот момент новая версия записи (или удаленная запись) недоступна другим задачам пользователей.
Только самая последняя подтвержденная версия записи является видимой за пределами пользовательской задачи, которая успешно сохранила новую версию, и эта запись продолжает оставаться видимой для других задач. Другие задачи будут в курсе того, что что-то произошло с этой записью, поскольку они будут блокированы от изменения или удаления этой записи, пока новая версия не станет "официальной" после подтверждения изменений.
По причине использования многоверсионной архитектуры (называемой также MGA - Multi-generational architecture) для Firebird нет необходимости в двухфазной блокировке, используемой другими СУБД для управления многопользовательской работой.
Транзакции
Все задачи пользователей в Firebird помещаются внутрь транзакций. Задача начинается с оператора START TRANSACTION и завершается, когда выполненная работа подтверждается (commit) или отменяется (rollback). Задача пользователя может выполнять множество запросов к операциям в одной транзакции, включая операции с более чем одной базой данных.
Работа сохраняется в базе данных в два этапа. На первом этапе изменения сохраняются на диске без изменения состояния базы данных. На втором этапе изменения подтверждаются или отменяются клиентским процессом. В версии 1.5 и выше клиенты могут отменить часть работы, маркируя этапы с помощью точек сохранения (savepoints) и отменяя изменения до точки сохранения без отмены всей транзакции.
Транзакции в Firebird являются атомарными в том смысле, что вся работа в рамках транзакции будет сохранена или вся отменена.
Транзакции можно конфигурировать с использованием трех уровней изоляции и множества стратегий тонкой настройки параллельности выполнения и условий чтения/записи.
Хранимые процедуры и триггеры
Firebird имеет богатый язык процедурных расширений, PSQL, для написания хранимых процедур и триггеров. Это структурированный язык с поддержкой циклов FOR для множеств, условными переходами, обработкой ошибок и пересылкой событий. После создания код PSQL компилируется и сохраняется в двоичном виде.
Триггеры имеют сильную поддержку с фазами До (Before) и После (After) каждого события манипулирования данными. Для каждой фазы/события может существовать множество триггеров, они могут содержать номера, задающие последовательность выполнения. Firebird 1.5 и выше поддерживает триггеры Before и After, которые обрабатывают все три события манипулирования данными с условными переходами для каждого события.
Ссылочная целостность
Firebird имеет полную поддержку формальной, основанной на стандартах SQL, ссылочной целостности - иногда называемой декларативной ссылочной целостностью - включая необязательные каскадные изменения и удаления.
Оперативное копирование базы данных
Серверы Firebird могут при необходимости поддерживать создание оперативных копий базы данных. Оперативная копия (shadow) является копией базы данных реального времени с некоторыми дополнительными атрибутами, которые делают ее недоступной для чтения, пока она не будет сделана доступной сервером в качестве базы данных. Оперативные копии могут переключаться либо вручную, либо автоматически. Назначение оперативного копирования - сделать базу данных доступной в кратчайший срок при поломках диска.
Оперативное копирование не является репликацией.
Безопасность
Безопасность сервера
Firebird обеспечивает безопасность доступа пользователей к серверу с помощью идентификатора пользователя и зашифрованного пароля. Как и любой другой сервер базы данных, Firebird использует соответствующие средства защиты физического, сетевого доступа и файловой системы. Firebird может хранить зашифрованные данные, но за исключением шифрования пароля он не предоставляет средств шифрования самих данных.
! ! !
ВНИМАНИЕ! Поскольку встраиваемый сервер (см. разд. "Встраиваемый сервер") разработан для однопользовательских, автономных приложений, он совершенно не проверяет безопасность для хоста. Привилегии SQL, заданные на уровне базы данных, еще применяются, но приложение через встраиваемый сервер может получить доступ к любой базе данных на этом компьютере без указания пароля. (См. главу 34.)
. ! .
Привилегии SQL
Хотя пользователь должен быть авторизован для доступа к серверу Firebird, но никакой пользователь, за исключением SYSDBA и владельца базы данных, не имеет автоматически никаких прав на индивидуальную базу данных. Безопасность на уровне базы данных поддерживается посредством привилегий SQL. Пользователям должны быть явно предоставлены привилегии к любому объекту.
Роли SQL позволяют объединить несколько привилегий в группу и предоставить как "пакет" индивидуальным пользователям. Отдельный пользователь может иметь привилегии от нескольких ролей, хотя только одна роль может быть выбрана при соединении с базой данных.
Рабочие режимы
Сервер Firebird может быть инсталлирован для выполнения в одном из трех рабочих режимов (operating modes): Суперсервер (Superserver), Классический сервер (Classic server) и Встраиваемый сервер (Embedded server). Различие между ними- скорее вопрос архитектуры. Любое клиентское приложение, написанное для соединения с Суперсервером, может соединяться точно тем же способом и с Классическим сервером и выполнять в точности те же задачи. Обратное также верно, за исключением того, что у Суперсервера более высокие требования к безопасности потоков для модулей внешних функций (определенные пользователем функции, библиотеки наборов символов, BLOB-фильтры).
Встраиваемый сервер является вариантом Суперсервера.
Классический сервер
Классический сервер предшествует Суперсерверу исторически. Он был разработан после 1980 года, когда ресурсы машин были скромными, и программы использовали их весьма экономно. Модель Классического сервера являлась продолжением операционных систем, чьи возможности по использованию потоков либо не существовали, либо были слишком ограничены для поддержания Суперсервера. Классический сервер остается лучшим вариантом для условий, где важна высокая производительность и использование системных ресурсов увеличивается линейно при добавлении каждого нового соединения.
Поскольку Классический сервер может использовать множество центральных процессоров, он является весьма подходящим для сайтов, требующих выполнения множества продолжающихся в реальном режиме времени приложений, использующих автоматически полученные коллекции данных, с минимальным или вовсе отсутствующим интерактивным вводом.
! ! !
ПРИМЕЧАНИЕ. Классический сервер для Windows недоступен в версиях Firebird, предшествующих 1.5.
. ! .
Суперсервер
В 1996 году в предшественнике Firebird, InterBase 4.1 появился многопоточный Суперсервер для новых тогда 32-битных платформ Windows. Он позволял лучше использовать новые возможности серверов и компьютерных сетей. Возможности Суперсервера исключить взаимоблокировку поточных процессов и динамически выделять кэш-память сделали его более удобным, чем Классический сервер, когда велико количество пользователей, выполняющих чтение/запись, а системные ресурсы ограничены.
С бурным ростом операционных систем GNU/Linux на базе Intel к концу 1990-x годов Суперсервер стал хорошим решением для некоторых платформ POSIX. Основная структура Суперсервера для Linux была реализована в InterBase бета-версии 6.0 с открытыми исходными кодами и затем была полностью реализована в Firebird 1.0. Архитектура Суперсервера стала доступной для платформ Sun Solaris.
Встраиваемый сервер
Firebird 1.5 представил встроенный вариант Суперсервера для платформ Windows. В этой модели Суперсервер компилируется вместе с встроенным клиентом, который напрямую подключается к базе данных. Одна динамическая библиотека (fbembed.dll) использует межпроцессное коммуникационное пространство Windows для передачи клиентских запросов и ответов сервера. Его API идентичен API обычного Суперсервера или Классического сервера. В коде приложения не требуется ничего специального для использования встраиваемого сервера.
Приложение, использующее встраиваемый сервер, может применять только локальный метод доступа (см. главу 2) и поддерживает один и только один клиентский процесс. Вы можете использовать столько встроенных приложений на одной машине, сколько вам нужно, однако одна база данных может в каждый момент времени быть открыта только одним таким приложением. Приложение встраиваемого сервера может выполняться на той же машине одновременно с обычным сервером Firebird. Тем не менее с базой данных не может быть одновременно соединен обычный сервер и встраиваемый сервер.
Встраиваемый сервер удовлетворяет самым низким требованиям масштабируемости сервера Firebird, давая возможность распространять одно высокопродуктивное приложение для одной базы данных с минимальными затратами. Поскольку к базе данных может иметь доступ и обычный сервер, выполняющий репликацию при неработающем встроенном приложении, встраиваемый сервер особенно подходит для "компактных" установок - например, на ноутбук или даже на флэш-диск.
Сравнение моделей Суперсервера и Классического сервера см. в главе 36. В той же главе в разд. "Работа со встроенным сервером" вы найдете полное описание работы со встроенным сервером под Windows.
Пример базы данных
Везде в этой книге языковые примеры используют пример базы данных, которая находится в каталоге Examples в папке, где установлен Firebird. В дистрибутиве Firebird 1.0.x она называлась employee.gdb. В Firebird 1.5 это employee.fdb.
Краткое описание примера базы данных содержится в приложении 6.
Соглашения по документации
Основной текст книги представлен этим шрифтом.
Тексты, набранные данным шрифтом, являются кодом, скриптами или примерами командной строки.
! ! !
ПРИМЕЧАНИЕ. Фрагменты текста, выделенные как этот, - используются для того, чтобы привлечь ваше внимание к важным моментам, которые могут повлиять на ваше решение по использованию обсуждаемой возможности Firebird.
. ! .
! ! !
СОВЕТ. Фрагменты, выделенные как этот, содержат советы, блестящие идеи или рекомендации.
. ! .
! ! !
ВНИМАНИЕ! Обратите особое внимание на такой фрагмент.
. ! .
От изготовителя fb2.
I. К сожалению, выполнить вышеприведенные соглашения, в полном объеме, при изготовлении, варианта книги в формате fb2, не удалось.
II. Давайте, протестируем вашу читалку.
E=mc2
Если предыдущую строку вы видите в таком виде:
E=mc2
Значит, ваша читалка не поддерживает надстрочные символы (к сожалению, [пока] это бывает очень часто).
Для такого случая, в данном файле, я применяю следующие соглашения:
Пример надстрочных символов:
Теорема Ферма x(^n^) + y(^n^) = z(^n^)
Согласен, непривычно, неудобно, некрасиво…, но я выбрал такое оформление для удобства «везунчиков».
Т.е. если ваша читалка показывает все правильно, легким движением вы превратите книгу в удобНОваримую.
Порядок действий (алгоритм):
1. Распаковать данный файл(если это архив).
2. Открыть файл подходящим текстовым редактором (не сочтите за рекламу, я пользуюсь Notepad++)
3. Произведите 2 операции замены
“(^” на “<sup>”
“^)” на “</sup>”
(как вы догадываетесь, в запросе надо будет нажать кнопку «Заменить все»)
4. Сохраните файл, если хочется, сожмите в архив.
И будет вам счастье.
Ну, а нам, всем остальным, придется мучаться с тем, что есть…
III. Теперь, таблицы.
1 строка первого столбца |
2 строка первого столбца |
3 строка первого столбца |
1 строка второго столбца |
2 строка второго столбца |
спорю, что не догадаетесь, какая это строка |
Если вместо симпатичной таблицы вы увидели такое:
1 строка первого столбца
2 строка первого столбца
3 строка первого столбца
1 строка второго столбца
2 строка второго столбца
...
Значит ваша читалка таблиц не видит, что очень жаль, т.к. в книге их 197.
Что делать?... Ну, я поступаю так. В Mozilla Firefox поставил плагин для чтения fb2, и все вышесказанные проблемы решены, конечно, возможны и другие варианты...
IV. Еще одно огорчение:
примеры кода в книге приведены без отступов. Т.е. примеры читаются очень плохо. Виноват в этом формат fb2, не отрабатываются отступы (или я чего-то не знаю :( ).
Вот и все.
Успехов w_cat.
Синтаксические шаблоны
Некоторые фрагменты кода представляют синтаксические шаблоны (syntax patterns), то есть модели кода, которые демонстрируют обязательные и необязательные элементы синтаксиса операторов SQL или команд командной строки.
Для синтаксических шаблонов применяются определенные соглашения по используемым символам. Для иллюстрации этих соглашений возьмем из главы 20 пример, показывающий синтаксический шаблон для оператора SQL SELECT:
SELECT
[FIRST (m) ] [SKIP (n) ] [[ALL] | DISTINCT]
<список-столбцов> [, [ими столбца] | выражение | константа ]
AS имя-алиаса
FROM <таблица-или-процедура-или-просмотр>
[{[INNER] | [{LEFT | RIGHT | FULL} [OUTER]] JOIN}]
<таблица -или-процедура -или-просмотр>
ON <условия-соединения> [{JOIN..}]
[WHERE <условия-поиска>]
[GROUP BY <список-группируемых столбцов>]
[HAVING <условие-поиска>]
[OTIION <выражение-выбора> [ALL] ]
[PLAN <выражение-плана>]
[ORDER BY <список-столбцов>]
[FOR UPDATE [OF столбец1 [, столбец2. .]] [WITH LOCK]]
Специальные символы
Элементы (ключевые слова, параметры), которые обязательны во всех случаях, появляются без каких-либо дополнительных пометок, они выделены таким шрифтом, как и весь код в книге. В предыдущем примере ключевые слова SELECT и FROM являются обязательными для каждого оператора SELECT.
Некоторые символы, которые никогда не появляются в операторах SQL или в командах командной строки, используются в синтаксических шаблонах для указания особых правил по их использованию. Это символы [],{}, |, <строка> и ... (многоточие). Они используются в шаблонах следующим образом.
Квадратные скобки [ ] указывают, что элемент(n) в скобках являются необязательными. Когда встречаются вложенные квадратные скобки, то вложенные или внешние элементы являются необязательными.
Фигурные скобки { } указывают, что элементы внутри скобок являются обязательными. Обычное использование фигурных скобок - это представление необязательного элемента (заключенного в квадратные скобки), означающее: "Если необязательный элемент используется, часть, заключенная в фигурные скобки, является обязательной". В предыдущем примере, если используется необязательная явная фраза
JOIN,
[{[INNER] | [{LEFT | RIGHT | FULL} [OUTER]] JOIN}]
то внешняя пара фигурных скобок указывает, что ключевое слово JOIN является обязательным. Внутренняя пара фигурных скобок означает, что если задано соединение OUTER, то оно должно быть определено как LEFT, RIGHT или FULL С необязательным использованием ключевого слова OUTER.
Символ вертикальной черты | используется для разделения взаимоисключающих элементов. В предыдущем примере LEFT, RIGHT и FULL являются взаимоисключающими, также внутреннее (INNER) и внешнее (OUTER) соединения являются взаимоисключающими.
Параметры задаются строкой, которая заключается в угловые скобки < >. Например, [WHERE <условия-поиска>] указывает, что одно или более условий поиска требуется в качестве параметров для необязательного предложения WHERE В синтаксисе оператора SELECT.
В некоторых случаях <строка> может быть сокращением для более сложной конструкции, которая в последующих строках синтаксического шаблона будет раскрываться уровень за уровнем для получения полной детализации. Например, вы можете увидеть приблизительно следующее выражение:
<условия-поиска> = <выражение-столбца> = <константа> ( <выражение>
Пара точек или многоточие ... могут быть использованы в некоторых синтаксических шаблонах для указания того, что текущий элемент является повторяемым.
! ! !
ПРИМЕЧАНИЕ. Ни один из этих символов не является допустимым ни в операторах SQL, ни в командах командной строки[1].
. ! .
Достаточно вводных слов! Первые четыре главы предназначены для того, чтобы вы начали работать с Firebird - загрузка и инсталляция серверных и клиентских программ, изменение некоторых основных установок сети, конфигурирование нескольких установок, если значения по умолчанию не совсем подходят для вашей среды. И, в заключение, в главе 4 начало работы с сервером и базой данных с использованием основного клиентского инструмента.
ЧАСТЬ I. Учебный лагерь.
ГЛАВА 1. Инсталляция.
В этой главе описывается, как получить инсталляционный комплект для платформы, а также версии сервера Firebird, которые вы хотите установить на вашу серверную машину. Полный вариант инсталлятора устанавливает и сервер и клиент на одну машину.
Удаленным клиентам не требуется сервер Firebird вовсе. Процедура инсталляции клиента Firebird несколько изменяется в зависимости от платформы (см. разд. "Инсталляция клиентов" в главе 7). Если вы в Firebird новичок, не пытайтесь устанавливать только клиента, пока не разберетесь, как все части инсталляции по умолчанию соответствуют друг другу.
Системные требования
Память на сервере (все платформы)
Оценка памяти сервера включает множество факторов.
* Работа сервера Firebird. Сервер Firebird осуществляет эффективное использование ресурсов сервера. Суперсервер (Superserver) после старта использует приблизительно 2 Мбайта памяти. Классический сервер (Classic server) в POSIX не использует памяти, пока не установлено клиентское соединение. В Windows небольшие сервисы прослушивают запросы на соединения.
* Клиентские соединения. Каждое соединение с Суперсервером добавляет приблизительно 115 Кбайт, больше или меньше, в соответствии со стилем и характеристиками клиентских приложений, а также спроектированной схемой базы данных. Каждое соединение с Классическим сервером использует приблизительно 2 Мбайта (в зависимости от количества применяемых соединением таблиц, триггеров, процедур и других объектов - может быть и до 30-40 Мбайт. Для баз данных среднего размера - от 4 до 15 Мбайт).
* Кэш базы данных. Значение по умолчанию может конфигурироваться - в страницах базы данных. Суперсервер использует единый кэш (с размером по умолчанию 2048 страниц) для всех соединений и автоматически увеличивает кэш при необходимости. Классический сервер создает индивидуальный кэш (по умолчанию 75 страниц) на каждое соединение.
На основании существующих оценок отводите 64 Мбайта RAM для сервера и 16 Мбайт для локального клиента. Чем больше клиентов вы добавляете, тем больше памяти будет использовано. Базы данных с большим размером страниц используют ресурсы из большего участка памяти, чем базы данных с меньшим размером страниц. Использование ресурсов для Классического сервера увеличивается линейно с каждым новым подключением клиента; для Суперсервера ресурсы разделяются между несколькими подключениями, и будут динамически увеличиваться при необходимости. Firebird 1.5 будет использовать для сортировки, если она необходима, дополнительную RAM. Использование памяти более подробно обсуждается в главе 6.
Инсталляционные диски
Сервер Firebird - и любые базы данных, которые вы создаете или с которыми соединяетесь, - должны находиться на жестком диске, который физически подключен к машине. Вы не можете разместить компоненты сервера или любой базы данных на назначенном диске, в разделяемой файловой системе или в сетевой файловой системе.
CD-ROM
Вы не можете запускать сервер Firebird с CD-ROM. При этом вы можете соединяться с базой данных только для чтения, находящейся на устройстве CD-ROM, физически подключенным к серверу[2].
Дисковое пространство
При оценке дискового пространства, необходимого для инсталляции, просмотрите размеры следующих исполняемых файлов. Дисковое пространство сверх указанного минимума требуется для файлов баз данных, оперативных копий (если используются), файлов сортировки, протоколов и копий баз данных.
* Сервер. Минимальная инсталляция сервера требует дискового пространства в пределах от 9 до 12 Мбайт в зависимости от платформы и архитектуры.
* Клиентская библиотека. Требует 350 Кбайт (встроенная: 1.4-2 Мбайт).
* Инструменты командной строки. Требуют приблизительно 900 Кбайт.
* Утилиты администратора базы данных. Требуют 1-6 Мбайт в зависимости от выбранных утилит. См. список свободно распространяемых и коммерческих утилит в приложении 5.
Минимальные требования к машине
Минимальные требования зависят от того, как вы планируете использовать систему. Вы можете запустить сервер и разрабатывать схемы баз данных на персональном компьютере с минимальной конфигурацией- даже на "быстром" 486 или на Pentium II с 64 Мбайт RAM будет работать Firebird 1.0.x- но такая конфигурация не позволит использовать многие возможности при работе в сети. Для версии 1.5 и более поздних процессор 586 с 128 Мбайт RAM может рассматриваться как минимум. Windows более требовательна к CPU и оперативной памяти, чем Linux, в которой запускается сервер на консольном уровне. Версии операционной системы влияют на требования: некоторые платформы UNIX требуют больше ресурсов как для сервера, так и для клиента, а требования некоторых версий Windows неприменимы к указанным характеристикам, независимо от требований программного обеспечения.
Поддержка SMP и HyperThreading
Суперсервер и Классический сервер Firebird могут использовать разделяемую память мультипроцессоров в Linux. В Windows поддержка SMP (симметричный мультипроцессор) доступна только для Классического сервера.
Технология HyperThreading ненадежна, похоже, она зависит от нескольких условий, включая платформу операционной системы, поставщика оборудования и версию сервера. Некоторые пользователи сообщают об успешном использовании, другие имеют проблемы. Если у вас есть машина с такими возможностями, проверьте вначале выбранный вами сервер на эту возможность и будьте готовы отменить ее на уровне BIOS, если увидите замедление в работе.
Характеристики процессора могут быть сконфигурированы на уровне сервера в firebird.config (версия 1.5) или в ibconfig/isc config (версия 1.0.x). В Windows для Суперсервера версий 1.0.x и 1.5 маска свойств CPU должна быть установлена в "единственный CPU" для SMP-машины. (См. разд. "Файл конфигурации Firebird" в главе 36.)
Операционная система
В табл. 1.1 показаны минимальные требования к операционной системе для выполнения серверов Firebird. При этом всегда смотрите файл README в каталоге /doc в вашем комплекте поставки для получения последней информации по операционной системе.
Таблица 1.1. Минимальные требования Firebird к операционной системе
Операционная система | Версия | Примечания |
Microsoft | Windows NT 4.0 | Требуется Service Pack 6а |
Windows 95/98/ME | Возможно, нужны обновления: библиотеки времени выполнения Microsoft С (msvcrt.dll) версии 6 или выше. Для Firebird 1.5 требуется библиотека C++ (msvcrt60.dll или выше). В Firebird 1.5 копии располагаются в каталоге \bin каталога Firebird. Winsock 2 требуется для всех серверов; он может быть нужен для инсталляции под Windows 95 | |
Windows 2000 с Service Pack 2 | ||
Windows XP | Базы данных не должны иметь расширения gdb | |
Server 2003 | Базы данных должны располагаться в разделах, где возможность VSS (оперативное копирование тома) отключена | |
Linux | Red Hat | Версия 7.1 или выше для Firebird 1.0.x, версия 8.0 или выше для Firebird 1.5. Для Red Hat 9 и выше обратитесь к замечаниям по инсталляции Linux в соответствии с реализацией NPTL |
SuSE | Версия 7.2 или выше для Firebird 1.0.x, версия 8.10 или выше для Firebird 1.5 | |
Mandrake | Версия 8.0 или выше для Firebird 1,0.x, версия 9.0 или выше для Firebird 1.5 | |
Все платформы Linux | Firebird 1.5 (сервер и клиент) требует glibc-2.2.5 или выше и libstdc++.so, связанную с libstdc++-5.0 или выше | |
Другие ОС | Solaris (Intel, SPARC), Mac OS X, FreeBSD, HP-UX 10+ | Подробности смотрите в комплекте поставки Firebird |
Как получить инсталляционный комплект
Комплект Firebird можно найти на главном сайте Firebird (http://www.firebirdsql.org) или на сайте SourceForge (http://firebird.sourceforge.net). Ссылки на этих страницах приведут вас к: http://sourceforge.net/project/showfiles.php?group_id=9028.
Главная страница на сайте Firebird обычно содержит список ссылок на последние релизы для Linux и Windows. Другие ссылки будут указывать на дистрибутивы для других платформ. Если файл в своем имени содержит "src", то это созданный исходный код, а не инсталляционный пакет. Дистрибутивы, имеющие в своем имени "debug", "debuginfo" или "pdb", содержат специальные файлы для анализа и отладки сбоев сервера или клиента с помощью сред разработки и не требуются для обычной работы.
Содержание комплекта
Каждый инсталляционный комплект содержит все компоненты, нужные для инсталляции Firebird.
* Исполняемая программа сервера Firebird.
* Множество других программ, нужных при инсталляции и/или во время выполнения задач.
* Скрипты командной строки или командные файлы, нужные при инсталляции, которые также могут использоваться как утилиты сервера.
* Файл безопасности баз данных (isc4.gdb для версии 1.0.x; security.fdb для версии 1.5).
* Одна или более версий клиентской библиотеки для установки на сервере и на клиентской рабочей станции.
* Инструменты командной строки.
* Стандартные библиотеки внешних функций и скрипты их описания (*.sql).
* Пример базы данных.
* Заголовочные файлы С (не нужны начинающим!).
* Текстовые файлы, содержащие самые последние замечания для использования в процессе инсталляции и конфигурирования.
* Заметки по релизу и различные файлы README (необходимы для прочтения).
Соглашения по именованию в комплекте инсталляции
Имена файлов комплекта поставки для разных платформ не являются одинаковыми. Увы, они даже не являются "последовательно неодинаковыми"; при создании дистрибутива часто нужно приспосабливаться к специфическим для платформы соглашениям или просто следовать их собственным правилам. Тем не менее некоторые элементы в именах файлов могут быть вам полезны для идентификации того комплекта, который вам нужен.
Классический сервер или Суперсервер?
Обычно первой частью имени является строка "Firebird".
* Если релиз для Windows поддерживает Классический сервер, он будет включен в тот же инсталлятор, что и Суперсервер.
* Для платформ POSIX, которые поддерживают обе архитектуры, отдельные инсталляторы поставляются для Классического сервера и Суперсервера. Имя установочного пакета будет начинаться с "FirebirdCS" (для Классического сервера) или с "FirebirdSS" (для Суперсервера).
* Для меньших платформ архитектура может быть менее очевидной, и первая часть имени может быть названием ОС или аппаратной платформы.
Номера версий
Имена всех комплектов поставки должны содержать разделенную точками строку чисел в следующем порядке: номер версии, номер релиза, номер подрелиза. Например, "1.0.3"- это третий подрелиз от начального (код С) релиза Firebird версии 1, в то время как "1.5.0" - начальный подрелиз релиза 5 (код C++) версии 1. Большинство комплектов поставки также содержат абсолютный номер создания (например, 1.0.3.972 или 1.5.2.4731). Для некоторых малых платформ, особенно тех, которые имеют собственные правила именования и созданы различными компиляторами, номера версий могут быть менее очевидными.
64-битовый ввод/вывод
Для платформ, которые требуют специальной компоновки для поддержки 64-битового ввода/вывода, вам нужно посмотреть на инфикс "6410" где-нибудь в строке имени. Он не будет присутствовать в именах комплектов поставки для операционных систем, которые осуществляют автоматическую поддержку 64-битового ввода/вывода.
Не пытайтесь инсталлировать комплект, отмеченный как "6410", на версии, где ОС, файловая система или аппаратура не поддерживают 64-битовый ввод/вывод[3].
Архитектура CPU
Архитектура CPU обычно включается в имя строки инсталляционного комплекта. Например, инсталлятор RPM для UNIX обычно включает указание на набор микросхем (например, i686). Список файлов отображает в списке загрузки обычно наиболее полезный указатель минимального набора микросхем, поддерживаемого инсталляционным пакетом. Комплект для Solaris предполагает наличие процессора Intel, если в имени комплекта поставки не присутствует "SPARC".
Зеркальные сайты
Когда вы найдете требуемый комплект поставки, щелкните мышью по гиперссылке - имени файла. Вы перейдете на список зеркальных сайтов, как показано на рис. 1.1.
Не имеет значения, какой зеркальный сайт вы выберете - комплект поставки идентичен для всех сайтов.
Комплект поставки для Linux
Прокручивайте отображаемый в SourceForge список файлов, пока не увидите файлы, показанные на рис. 1.2.
Здесь представлены реальные исполняемые инсталляторы. Доступны инсталляторы RPM и инсталляторы сжатых файлов (TAR-файлы). Если ваш дистрибутив Linux поддерживает инсталляторы RPM, выберите именно его. Он создаст каталоги и установит все необходимое, определит пароль для пользователя SYSDBA и запустит выбранный вами сервер. Инсталляторы имеют следующие имена:
* Firebird 1.5 - FirebirdCS-1.5.2.4731-0.i686.rpm (Классический) и FirebirdSS-1.5.2.4731-0.i686.rpm (Суперсервер);
* Firebird 1.03 - FirebirdCS-1.0.0.972-0.i386.rpm (Классический) и FirebirdSS-1.0.0.972-0.i386.rpm (Суперсервер).
Посмотрите документацию соответствующей платформы по использованию Red Hat Package Manager (RPM). В большинстве дистрибутивов у вас есть возможность запускать инсталлятор RPM из командной строки или через графический интерфейс пользователя (GUI).

Рис. 1.1. Выбор зеркального сайта SourceForge

Рис. 1.2. Комплект поставки для Linux на SourceForge
Сжатые файлы (tarballs)
В дистрибутивах Linux, которые не могут выполнять пакеты RPM, и во многих разновидностях UNIX используйте сжатые файлы (обычно .tar.gz или .bz2), т. к. они дают опытному пользователю Linux больший контроль над процессом инсталляции. Соответствующая утилита распаковки понадобится на вашем сервере для распаковки комплекта поставки в вашей файловой системе. Вы найдете детальные инструкции в официальных замечаниях по релизу, README-файлах и замечаниях к поставке. Знающие пользователи могут также просмотреть и настроить инсталляционные скрипты, чтобы сделать их работоспособными в менее общих версиях Linux.
! ! !
СОВЕТ. Скрипты поставляются для командной строки. В некоторых случаях в замечаниях к поставке могут быть инструкции, как изменять скрипты и выполнять некоторые ручные настройки. Скрипты описываются далее в этой главе.
. ! .
В любом случае прочтите все поставляемые текстовые файлы, а также соответствующие темы в официальных замечаниях по релизу, которые относятся к той версии Firebird, которую вы собираетесь инсталлировать. Могут существовать серьезные отличия между совместимыми с POSIX ОС дистрибутивами и релизами, особенно в случае открытых исходных текстов. Где только возможно, в комплекте поставки для каждой версии Firebird в замечаниях по релизу делается попытка документировать вопросы, связанные с различными версиями ядра и дистрибутивами.
! ! !
СОВЕТ. Если вы не нашли замечания по релизу в вашем комплекте поставки, обратитесь к главной странице сайта IBPhoenix (http://www.ibphoenix.com) и загрузите замечания по релизу оттуда.
. ! .
Реализация NPTL для высших версий Linux
Новая библиотека потоков POSIX (Native POSIX Thread Library, NPTL) в Red Hat 9 (и, возможно, в более поздних дистрибутивах Linux) создает проблемы с Суперсервером и локально скомпилированными программами, а также с утилитами. Утилита gbak сообщает об ошибке "broken pipe". Для устранения этой ошибки выполните следующие шаги:
1. Проверьте, что запущен сервер. В /etc/init.d/firebird выполните:
LD_ASSUME_KERNEL-2.2.5
export LD_AS SOME_KERNEL
2. Вам нужно установить переменную окружения в соответствии с локальным окружением, так что добавьте следующее в /etc/profile, чтобы быть уверенным, что каждый пользователь может ее использовать в утилитах командной строки. После
HISTSIZE=1000
добавьте
LD_ASSUME_KERNEL=2.2.5
С помощью следующей строки экспортируйте ее:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUT_RC LD_ASSUME_KERNEL
Комплект поставки для Windows
Официальный комплект поставки для Windows (рис. 1.3) распространяется в виде исполняемых инсталляторов. Очень рекомендуется использовать инсталлятор в вариантах ZIP или RAR.

Рис. 1.3. Комплект поставки Windows с сайта SourceForge
Комплекты поставки Firebird включают исполняемые программы и связанные файлы для двух моделей сервера: Суперсервер и Классический сервер. В диалогах инсталлятора вас будут спрашивать, какую модель вы хотите устанавливать, какие компоненты не должны копироваться на диск. Единственная поддерживаемая модель для Firebird 1,0.x - это Суперсервер.
Имена релизов инсталляторов следующие:
* Firebird 1.5 - Firebird-1.5.2.473l_Win32.exe;
* Firebird 1.03 - Firebird-1.0.3.972-Win32.exe.
Сжатые файлы
Если комплект поставки для Windows содержит ZIP-файлы, вам нужно иметь утилиты (например, WinZip, PKZip или WinRAR) для просмотра содержимого и/или распаковки файлов перед инсталляцией. Такой комплект поставки (не для начинающих) содержит следующее:
* версия 1.5 ZIP полной поставки клиент-сервер Firebird-1.5.2.473l_win32.zip. Может быть распакован в стандартный каталог без инсталляции в системе. Некоторые программы инсталляции должны запускаться после распаковки. Инструкции включены в различные текстовые файлы в подкаталоге /doc;
* отдельный комплект поставки встраиваемого сервера версии 1.5 для Windows. Имя файла релиза комплекта поставки - Firebird-1.5.2.4731_embed_win32.zip.
! ! !
ПРИМЕЧАНИЕ. Не существует встраиваемого сервера для версии 1.0.x.
. ! .
Серверы
На платформах, имеющих сервисы - Windows NT, 2000 и XP - сервер Firebird инсталлируется по умолчанию для запуска как сервис. Сервис инсталлируется и запускается автоматически по окончании процедуры инсталляции, а также при первоначальной загрузке серверной машины. Как остановить и запустить сервер вручную см. главу 4.
Младшие из платформ Windows - Windows 95, 98 и ME - не поддерживают сервисы. После инсталляции сервер Firebird будет запускаться как приложение, защищенное программой Guardian. Если приложение сервера будет по разным причинам аварийно завершено, Guardian постарается заново запустить его. Для сервера, запущенного как сервис, рекомендуется также использовать Guardian.
Не пытайтесь инсталлировать Классический сервер, если у вас уже установлен Суперсервер, или наоборот.
Клиентские библиотеки
Копии клиентских библиотек устанавливаются:
* для Firebird 1.0.x имя клиентской библиотеки gds32.dll; она устанавливается в системный каталог C:\WINNT\system32 для Windows, имеющей сервисы, и в C:\Windows для других версий Windows;
* для Firebird 1.5 и последующих версий имя клиентской библиотеки fbclient.dll; по умолчанию она устанавливается в каталог /bin корневого каталога Firebird. По умолчанию утилиты загружают ее именно оттуда, а не из системного каталога.
! ! !
ПРИМЕЧАНИЕ. Для обычных клиентских приложений, включающих множество компонентов базы данных и инструменты администратора, размещение и именование клиентской библиотеки не являются столь строгими. См. в главе 7 альтернативные варианты инсталляции клиентской библиотеки - на сервере и на клиентских рабочих станциях - для совместимости со многими графическими инструментами и другими существующими приложениями.
. ! .
Тестирование результатов инсталляции
Если все работает, как описано, сервер Firebird будет запущен на вашем сервере по окончании процесса инсталляции. Вы можете запустить некоторые тесты для проверки инсталляции и выполнить нужные настройки вашей конфигурации.
Сетевой протокол
Предполагается, что вы будете использовать рекомендованный протокол TCP/IP для вашей сети клиент-сервер, чтобы получить все преимущества независимой от платформы сети.
! ! !
СОВЕТ. Чтобы получить информацию об использовании протокола NetBEUI (Named Pipes, Именованные каналы) во всех версиях Windows, см. разд. "Сетевые протоколы" в главе 2.
. ! .
! ! !
ВНИМАНИЕ! Firebird не поддерживает IPX/SPX и не работает на Novel Netware 3 и 4.
. ! .
Тестирование сервера
Обычно первое, что вы захотите сделать после завершения инсталляции, - это проверить обращение к серверу. Это даст вам реальную возможность убедиться, что ваша клиентская машина может видеть хост в вашей сети. Предположим, что IP-адрес вашего сервера в домене, видимый вашему клиенту, 192.13.14.1. Перейдите в командную строку и введите следующую команду:
ping 192.13.14.1
Замените в этом примере IP-адрес на реальный IP-адрес вашего сервера.
! ! !
СОВЕТ. Если вы получили сообщение об истечении времени ожидания, обратитесь к главе 2 и приложению 2 для дальнейших инструкций. Если вам нужна более подробная информация об установках серверных IP-адресов, см. разд. "Сетевой адрес для сервера" в главе 2.
. ! .
Если вы соединяетесь с сервером с локального клиента - т. е. клиент запущен на той же машине, что и сервер, - вы можете обратиться к виртуальной заглушке TCP/IP:
ping localhost
ИЛИ
ping 127.0.0.1
Проверка, что сервер Firebird запущен
Классический сервер POSIX
Используйте команду ps в командной строке для просмотра запущенных процессов. Если какие-нибудь клиенты соединены с классическим процессом Firebird, вы должны увидеть один процесс с именем fb_netserver (или gds_inet_server для Firebird 1.0.x) для каждого соединенного клиента. Команда ps имеет несколько переключателей, однако следующий вариант дает подходящий список. Команда grep фильтрует вывод так, что вы будете видеть только процессы Firebird.
[xxx]$ ps -aux | grep fb
На рис. 1.4 запущены три клиентских процесса.

Рис. 1.4. Список классических процессов, полученный с помощью ps
Суперсервер POSIX
Поскольку Суперсервер разветвляется на потоки для каждого соединения, будет интересным задать переключатель -f [ork] среди других переключателей для отображения его процессов и потоков. Вы получите форматированное отображение разветвленных процессов, похожее на представленное на рис. 1.5:
[xxx]$ ps -auxf | grep fb

Рис. 1.5. Список процессов и потоков Суперсервера, полученный с помощью ps
Та же команда ps должна отображать один процесс с именем fbguard (или ibguard), если сервер был запущен с переключателем -f[orever], и один главный процесс с именем fbserver (или ibserver). Должен быть, по меньшей мере, один дочерний поток с именем fbserver (или ibserver), разделенный на несколько потоков. Эта первая группа является "выполняющимся сервером" без клиентских соединений, за исключением тех, которые использует сервер для прослушивания портов и сборки мусора. Далее будет группа потоков для каждого соединения.
! ! !
ПРИМЕЧАНИЕ. Префикс "fb" относится к Firebird 1.5, a "gdb" и "ib"- к Firebird 1.0.x. Используйте ps -aux | grep gds, если у вас запущена версия 1.0.x.
. ! .
Windows NT 4, 2000 и XP
Для серверных платформ Windows запустите апплет Firebird Server Control с Панели управления (Control Panel).
Апплет Server Control
На рис. 1.6 показан апплет Firebird Server Control, запущенный под Windows 2000 Server. Если вы использовали инсталлятор, этот апплет будет установлен на вашу Панель управления. Его внешний вид может изменяться в зависимости от варианта сервера Windows.

Рис. 1.6. Апплет Firebird Server Control
Вы можете использовать этот апплет для запуска и остановки сервиса и для модификации режимов запуска и выполнения. Не рекомендуется изменять режим на Run as an application (Выполнять как приложение) для многопользовательского использования в целях безопасности - вы должны оставлять подключение к серверу, чтобы сервер Firebird оставался запущенным.
Апплет Service
Если у вас нет апплета Control Panel, вы можете использовать апплет Services (рис. 1.7) в Инструментах администрирования. В Windows NT 4 вы можете получить доступ к этому апплету напрямую через Панель управления.

Рис. 1.7. Апплет Services на серверных платформах Windows
На рис. 1.7 показаны имена сервисов Firebird 1.5- для Guardian и сервера. Имена сервисов могут отличаться в зависимости от версий, Guardian может вовсе не появляться в списке. Пользователь с привилегиями администратора может, щелкнув правой кнопкой мыши по имени сервиса, остановить или запустить сервис. Если вы используете Guardian, остановите этот сервис, чтобы остановить и Guardian, и сервер.
В Windows 2000 и Windows Server 2003 Guardian скорее удобен, чем необходим, поскольку эти две операционные системы имеют средства просмотра и повторного запуска сервисов. Рекомендуется оставлять Guardian активным на других платформах, если пользователь SYSDBA недоступен для рестарта сервера вручную в случаях, когда он был остановлен по различным причинам.
Другие апплеты Панели управления
Если вам нужен апплет Firebird Manager и вы не нашли его инсталлированным на Панели управления вашего сервера Windows, или если вам нужен апплет с языком, отличным от английского, загрузите его с сайта Firebird: http://www.ibphoenix.com. Закройте окно Панели управления и скопируйте файл CPL непосредственно в ваш системный каталог Windows.
Windows 9х, ME и XP Home Edition
Windows 9х, ME и XP Ноте Edition не поддерживают сервисы. Сервер Firebird должен быть запущен как приложение, контролируемое программой Guardian. Если вы используете инсталляционный комплект, который устанавливает, но не запускает автоматически Guardian и сервер Firebird, вы можете сделать это вручную, как показано далее.
1. Найдите исполняемый файл программы Guardian (ibguard.exe) и создайте для него ярлык в области запуска меню кнопки Пуск.
2. Откройте диалоговое окно Свойства для этого ярлыка и перейдите к полю, где располагается командная строка.
3. Отредактируйте командную строку так, чтобы она выглядела следующим образом:
fbguard.exe -a
4. Сохраните и закройте диалог Свойства.
5. Сделайте двойной щелчок по ярлыку для запуска Guardian. Guardian запустит fbserver.exe.
Теперь Guardian должен запускаться автоматически, когда вы будете выполнять первоначальную загрузку вашей машины.
Апплет Server Control
Некоторые версии апплета Server Control могут быть установлены на платформе Windows, не поддерживающей сервисы. Если инсталлятор устанавливает его на вашей машине, то он может быть использован так же, как было описано для версий, поддерживающих сервисы. Невозможно только выбрать вариант Run as a service (Запускать как сервис), даже если он отображается на экране. В Windows версии Ноше, чтобы исключить путаницу, апплеты бывают скрытыми или отображаются недоступными (серым цветом).
Инсталляция встраиваемого сервера
! ! !
ВНИМАНИЕ! Если вы раньше не использовали Firebird, то очень рекомендуется пропустить этот вариант, пока вы не приобретете опыт работы с сервером Firebird и "регулярными" клиентами. Вы ничего не потеряете, разрабатывая ваши первые приложения в обычной модели клиент-сервер; они будут работать так же хорошо и с встраиваемым сервером.
. ! .
Объединение сервера и клиента осуществляется через динамическую библиотеку fbembeded.dll, которую вы найдете в каталоге /bin после обычной инсталляции Firebird. Вы можете инсталлировать встраиваемый сервер, если вы уже инсталлировали сервер или другие встраиваемые серверы.
Для каждого приложения встраиваемого сервера каталог исполняемого файла вашего приложения становится корневым каталогом этого приложения встраиваемого сервера. Для выполнения встроенной инсталляции с вашим приложением сделайте следующее:
* скопируйте fbembeded.dll в каталог приложения и переименуйте в fbclient.dll или в gds32.dll в соответствии с тем, какое имя клиентского файла требуется вашей программе связи с базой данных;
* скопируйте файлы firebird.msg, firebird.conf и aliases.conf в тот же каталог;
* если вы собираетесь использовать алиасы базы данных (рекомендуется), то скопируйте aliases.conf в каталог приложения (домашний каталог, home directory) и сконфигурируйте его для этого конкретного приложения;
* если внешние библиотеки требуются для вашего приложения, такие как поддержка интернациональных языков (fbintl.dll), библиотеки UDF или библиотеки Blob - фильтров, создайте для них соответствующие каталоги (../intl, ../UDF) непосредственно внутри каталога вашего приложения и скопируйте туда эти файлы.
Пример структуры встроенной инсталляции
Приведем пример структуры каталогов и содержание файлов конфигурации для инсталлированного приложения встраиваемого сервера:
D:\my_app\MyApp.exe
D:\my_app\gds32.dll
D:\my_app\fb\firebird.conf
D:\my_app\fb\aliases.conf
D:\my_app\fb\firebird.msg
D:\my_app\fb\intl\fbintl.dll
D:\my_app\fb\UDF\fbudf.dll
Файл firebird.conf:
RootDirectory = D:\my_app\fb
Файл aliases.conf:
MyApplication = D:\databases\MyDB.fdb
Другие вещи, которые вам нужно знать
Пользователи
Имя пользователя и пароль по умолчанию
Пользователь SYSDBA имеет все привилегии доступа к серверу. Программа инсталляции создаст пользователя SYSDBA в базе данных безопасности (security.fdb).
Для версий под Windows и версии 1.0.x под Linux пароль masterkey.
! ! !
СОВЕТ. Фактически пароль - masterke, т. к. все символы после восьмого игнорируются.
. ! .
В версии 1.5 и более поздних под Linux инсталлятор в процессе установки генерирует случайный пароль, помещает его в базу данных безопасности и сохраняет в текстовом файле SYSDBA.password. Запомните этот пароль или используйте для доступа к базе данных безопасности, чтобы изменить его на что-нибудь более простое для запоминания.
! ! !
ВНИМАНИЕ! Если ваш сервер совсем не защищен в Интернете, вы должны изменить этот пароль немедленно.
. ! .
Как изменить пароль пользователя SYSDBA
Если вы работаете в Linux или другой системе, которая может выполнять SH- скрипты, измените текущий каталог на ../bin в вашем каталоге инсталляции и найдите скрипт с именем changeDBAPassword.sh. Все, что вам нужно сделать, - это запустить скрипт и ответить на подсказки. Когда вы в первый раз запустите скрипт, вам будет нужно ввести пароль, который инсталлятор записал в файл SYSDBA.password; он находится в корневом каталоге Firebird:
[bin]# sh changeDBAPassword.sh
ИЛИ
[bin]# ./changeDBAPassword.sh
Прямое использование gsec
Следующая процедура будет работать под Windows и Linux. В Linux, чтобы запустить gsec, вы должны войти в операционную систему как суперпользователь (root). Пусть вы решили изменить у SYSDBA пароль с masterkey на icuryy4me (в Firebird 1.5 для Linux инсталлированный пароль не masterkey, он может оказаться совсем невразумительным!). Вам нужно выполнить следующие шаги:
1. Перейдите в окно командной строки на вашем сервере и сделайте текущим каталог, в котором находятся ваши утилиты командной строки. Обратитесь к табл. 1.2-1.5, чтобы определить их положение.
2. Для Windows наберите следующее, рассматривая символы, как чувствительные к регистру:
gsec -user sysdba -password masterkey
Для платформ POSIX наберите:
./gsec -user sysdba -password masterkey
Теперь вы должны увидеть подсказку утилиты gsec:
GSEC>
3. Наберите команду:
GSEC> modify sysdba -pw icuryy4me
4. Нажмите клавишу <Enter>. Новый пароль icuryy4me будет зашифрован и сохранен, a masterkey не будет больше действовать.
5. Теперь завершите программу gsec:
GSEC> quit
Поскольку Firebird игнорирует все символы в пароле после восьмого, icuryy4m будет работать так же, как и icuryy4monkey.
! ! !
СОВЕТ. Полные инструкции по использованию gsec находятся в главе 34.
. ! .
Пользователи и группы в Linux/UNIX
Начиная с Firebird 1.5, пользователь root больше не является пользователем по умолчанию, который может запускать сервер. Это означает, что вам нужно поместить пользователей, не являющихся root, в группу firebird, чтобы предоставить им возможность доступа к базам данных.
Чтобы добавить пользователя (например, sparky) в группу firebird, пользователю root нужно ввести:
$ usermod -G firebird sparky
Теперь sparky может соединиться с базой данных Firebird и начать работу с ней.
Для отображения списка групп, в которых присутствует пользователь, наберите в командной строке:
$ groups
! ! !
СОВЕТ. Пользователю группы firebird могут также понадобиться привилегии чтения и записи ко всем базам данных и привилегии чтения, записи и выполнения ко всем каталогам, где размещаются базы данных.
. ! .
Инструмент администратора
Инсталляционный комплект Firebird не содержит инструментов администратора с графическим интерфейсом. У него есть набор инструментов командной строки (исполняемые программы), которые расположены в каталоге /bin каталога инсталляции Firebird. Их использование подробно описано в части IX.
Отличные инструменты графического интерфейса, доступные для использования на клиентских машинах Windows, слишком многочисленны, чтобы их здесь описать. Небольшое количество графических инструментов написано на Borland Kylix для использования на клиентских машинах под Linux, они находятся на разных стадиях завершения.
Список наиболее известных инструментов администратора для Firebird представлен в приложении 5. Для получения самого последнего списка зайдите на http://www.ibphoenix.com, выберите ссылку Contributed из области загрузки и нажмите на ссылку Administration Tools.
! ! !
СОВЕТ. Вы можете использовать клиентские инструменты администратора в Windows для доступа к серверу Linux и наоборот.
. ! .
Размещение на диске по умолчанию
Таблицы в этом разделе описывают размещение компонентов для Windows и Linux на диске по умолчанию. Информация дается в контексте двух версий:
* версии, предшествующие Firebird 1.5;
* версии Firebird 1.5 и последующие.
Разница является существенной. Версии, предшествующие Firebird 1.5, используют размещение, имена компонентов и ссылки на ресурсы, как и InterBase 6.x и более ранние версии InterBase. Следовательно, не существует возможности запускать и сервер Firebird, и сервер InterBase этих версий на одной и той же машине.
В пересмотре основного кода, который начался с версии 1.5, старые ссылки на постороннюю информацию InterBase были удалены, а многие из главных компонентов были переименованы. Firebird 1.5 дает возможность запускать также и сервер InterBase. Это верно и для Firebird 2.
Табл. 1.2-1.5 показывают, где искать компоненты при стандартной инсталляции после выполнения инсталлятора. Точное расположение может изменяться от релиза к релизу.
Таблица 1.2. Инсталляция Firebird 1.5 для Linux и некоторых платформ UNIX
Компонент | Имя файла | Размещение по умолчанию |
Классический сервер | fb_inet_server | /opt/firebird/bin |
Программа Lock Manager (только Классический сервер) | fb_lock_mgr | /opt/firebird/bin |
Встроенный клиент для Классического сервера | libfbembed.so. 1.5.0 | /opt/lib |
Firebird Guardian (только Суперсервер) | fbguard | /opt/firebird/bin |
Суперсервер | fbserver.exe | /opt/firebird/bin |
Поточный клиент для Суперсервера и Классического сервера | libfbclient.so | /usr/lib |
Файл конфигурации | firebird.conf | /opt/firebird |
Файл алиасов базы данных | aliases.conf | /opt/firebird |
Файл сообщений | firebird.msg | /opt/firebird |
Файл сгенерированного пароля | SYSDBA.password | /opt/firebird |
База данных безопасности | security.fdb | /opt/firebird |
Копия базы данных безопасности | security.fbk | /opt/firebird |
Инструменты командной строки | isql, gbak, gfix, gstat, gsec, gdef, gpre, qli | /opt/firebird/bin |
Инструмент сервера (только Суперсервер) | fbmgr | /opt/firebird/bin |
Скрипты командной строки | Различные; обратитесь к файлам README и заметкам по релизу | /opt/firebird/bin |
Скрипт шаблона для Firebird (только Классический сервер) | firebird.xinetd | /opt/firebird/misc |
Библиотеки внешних функций (библиотеки UDF) | ib_udf.so, fbudf.so | /opt/firebird/UDF |
Библиотека утилиты памяти (используется в ib_udf) | libib util.so | /opt/firebird/lib |
Скрипты DDL для библиотек внешних функций | ib_udf.sql, fbudf.sql | /opt/firebird/UDF |
Библиотека поддержки интернациональных языков | fbintl | /opt/fire b ird/i nt! |
Заметки по релизу | Firebird_v15.nnn_ ReleaseNotes.pdf | /opt/firebird |
Другая документация | Файлы README no различным темам | /opt/firebird/doc |
Пример базы данных | employee.fdb | /opt/firebird/sample |
Заголовочные файлы С | ibase.h, iberror.h и др. | opt/firebird/include |
Таблица 1.3. Инсталляция Firebird 1.5 для 32-битовых платформ Windows
Компонент | Имя файла | Размещение по умолчанию |
Классический сервер | fb_inet_server.exe | C:\Program Fiies\Firebird\ Firebird_1_5\bin |
Программа Lock Manager (только Классический сервер) | fb_lock_mgr.exe | C:\Program Files\Firebird\ Firebird_1_5\bin |
Firebird Guardian (только Суперсервер) | fbguard.exe | C:\Program Files\Firebird\ Firebird_1_5\bin |
Суперсервер | fbserver.exe | C:\Program Files\Firebird\ Firebird_1_5\bin |
Встроенный Суперсервер | fbembed.dll | C:\Program Files\Firebird\ Firebird_1_5\bin (инсталлировать в каталог приложения и переименовать в fbciient.dll) |
Клиентская библиотека для Суперсервера и Классического сервера | gds32,dll (заглушка) и fbclient.dll | C:\Program Files\Firebird\Firebird_1_5\bin |
Файл конфигурации | firebird.conf | - // - |
Файл алиасов базы данных | aliases.conf | - // - |
Файл сообщений | firebird.msg | - // - |
База данных безопасности | security.fdb | - // - |
Копия базы данных безопасности | security.fbk | - // - |
Инструменты командной строки | isql, gbak, gfix, gstat, gsec, gdef, gpre, qli, fb_lock_print | - // - |
Сервисы и регистрационные инструменты | instsvc.exe, instreg,exe | - // - |
Библиотеки внешних функций (библиотеки UDF) | ib_udf,dll, fbudf,dll | C:\Program Files\Firebird\Firebird_1_5\UDF |
Библиотека утилиты памяти (используется в ib_udf,dll) | ib_util.dll | C:\Program Files\Firebird\Firebird_1_5\bin |
Скрипты DDL для библиотек внешних функций | ib_udf,sql, fbudf,sql | C:\Program Files\Firebird\Firebird_1_5\UDF |
Библиотека поддержки интернациональных языков | fbintl,dll | C:\Program Files\Firebird\Firebird_1_5\intl |
Заметки по релизу | Firebird_v15.nnn_ ReleaseNotes.pdf | C:\Program Files\Firebird\Firebird_1_5 |
Другая документация | Файлы README по различным темам | C:\Program Files\Firebird\Firebird_1_5\doc |
Пример базы данных | employee.fdb | C:\Program Files\Firebird\Firebird_1_5\sample |
Заголовочные файлы С | ibase.h, iberror.h и др. | C:\Program Files\Firebird\Firebird_1_5\include |
Таблица 1.4. Инсталляция Firebird 1.0.3 для Linux и некоторых платформ UNIX
Компонент | Имя файла | Размещение по умолчанию |
Классический сервер | gds_inet_server | /opt/interbase/bin |
Программа Lock Manager (только Классический сервер) | ib_lock_mgr | - // - |
Встроенный клиент для Классического сервера | gdslib.so | /usr/lib |
Суперсервер | ibserver.exe | /opt/interbase/bin |
Поточный клиент для Суперсервера и Классического сервера | gdslib.so | /usr/lib |
Файл конфигурации | isc_config | /opt/interbase |
Файл сообщений | interbase.msg | - // - |
База данных безопасности | isc4.gdb | - // - |
Копия базы данных безопасности | isc4.gbk | - // - |
Инструменты командной строки | isql, gbak, gfix, gstat, gsec, gdef, gpre, qli | /opt/interbase/bin |
Инструмент сервера (только Суперсервер) | fbmgr | - // - |
Скрипты командной строки | Различные; обратитесь к файлам README и замечаниям по релизу | /opt/interbase/bin или /opt/interbase/sample |
Скрипт шаблона для Firebird (только Классический сервер) | firebird.xinetd | - // - |
Библиотеки внешних функций (библиотеки UDF) | ib_udf,so, fbudf,so | /opt/interbase/udf |
Библиотека утилиты памяти (используется в ib_udf) ~TSROr | libib_util,so | /opt/interbase/udf ~TSR/ort/interbase |
Скрипты DDL для библиотек внешних функций | ib_udf.sql | /opt/interbase/udf |
Библиотека поддержки интернациональных языков | intl или intl.so | /opt/interbase/intl |
Пример базы данных | employee.fdb | /opt/interbase/sample |
Заголовочные файлы С | ibase.h, iberror.h и др. | /opt/interbase/include |
Таблица 1.5. Инсталляция Firebird 1.0.3 для 32-битовых платформ Windows
Компонент |
Имя файла |
Размещение по умолчанию |
Firebird Guardian |
ibguard.exe |
C:\Program Files\Firebird\bin |
Суперсервер |
ibserver.exe |
- // - |
Клиентская библиотека |
gds32.dll |
- // - |
С:\WINNT\systеm32 (платформа с сервисами) или C:\Windows (другие) |
gds32.dll |
CAWINNT\system32 (платформа с сервисами) или CAWindows (другие) |
Файл конфигурации |
ibconfig |
C:\Program Files\Firebird |
Файл сообщений |
interbase.msg |
C:\Program Files\Firebird |
База данных безопасности |
isc4.gdb |
C:\Program Files\Firebird |
Копия базы данных безопасности |
isc4.gbk |
C:\Program Files\Firebird |
Инструменты командной строки |
isql, gbak, gfix, gstat, gsec, gdef, gpre. qli, iblockpr |
C:\Program Files\Firebird\bin |
Сервисы и регистрационные инструменты |
instsvc.exe, instreg.exe |
C:\Program Files\Firebird\bin |
Библиотеки внешних функций (библиотеки UDF) |
ib_udf.dll, fbudf.dll |
C:\Program Files\Firebird\UDF |
Библиотека утилиты памяти (используется в ib_udf.dll) |
ib_util.dll |
C:\Program Files\Firebird\bin |
Скрипты DDL для библиотек внешних функций |
ib_udf.sql, fbudf.sql |
C:\Program Files\Firebird\UDF |
Библиотека поддержки интернациональных языков |
gdsintl.dll |
C:\Program Files\Firebird\intl |
Документация |
Файлы README по различным темам |
C:\Program Files\Firebird |
Пример базы данных |
employee.gdb |
C:\Program Files\Firebird\sample |
Заголовочные файлы С |
ibase.h, iberror.h и др. |
C:\Program Files\Firebird\include |
Пора дальше
Firebird состоит из программы сервера и клиентских приложений; между сервером и каждым клиентом располагается сетевой протокол. Если вы использовали соответствующий инсталлятор для вашей платформы и использовали значения по умолчанию, вероятно, вам больше ничего не потребуется делать, и можно сразу приступать к началу работы. Вы можете пропустить две следующие главы и перейти к "основам", описанным в главе 4. Если вас интересуют сетевые протоколы или вам кажется, что у вас есть проблемы, связанные с сетевыми протоколами, прочтите следующую главу, и, возможно, просмотрите некоторые советы по конфигурированию в главе 3.
ГЛАВА 2. Установка сети.
Поскольку реляционная система управления базами данных (РСУБД) специально создана для платформы клиент-сервер, Firebird позволяет удаленным и локальным клиентам одновременно соединяться с сервером, используя различные сетевые протоколы.
Инсталлятор создаст конфигурацию по умолчанию для соединения клиента с сервером и для получения соединений от клиентов с использованием установок порта по умолчанию. Если только не существует внешних причин создавать пользовательскую конфигурацию сети, то нет необходимости для запуска Firebird изменять конфигурацию, которая была установлена при инсталляции.
Сетевые протоколы
Firebird поддерживает протокол TCP/IP для всех комбинаций клиентских и серверных платформ.
Именованные каналы
Firebird поддерживает протокол Мiсrоsоft WNet Named Pipes для серверов Windows NT/2000, XP и клиентов Windows. Имя канала по умолчанию interbas. Windows 9х и ME не Moryт быть серверами WNet.
! ! !
ПРИМЕЧАНИЕ. Протокол Windows Named Pipes (именованные каналы) часто называют NetBEUI. Строго говоря, NetBEUI является транспортной частью, используемой в WNet.
. ! .
Локальный доступ
Хотя Firebird разработан, чтобы быть сервером базы данных для удаленных клиентов, он предоставляет множество средств локального доступа.
Firebird поддерживает протокол Microsoft WNet Named Pipes для серверов Windows NT/2000, XP и клиентов Windows. Имя канала по умолчанию interbas. Windows 9х и ME не могут быть серверами WNet.
Клиент-сервер
Средства локального доступа.
* Локальная заглушка TCP/IP. Для многоуровневых серверных приложений и других клиентов доступ к локальному серверу на любой поддерживаемой платформе осуществляется через протокол TCP/IP: даже при отсутствии сетевой карты соединение может быть выполнено через специальный сервер localhost с IP-адресом 127.0.0.1.
! ! !
ВНИМАНИЕ! Соединение с localhost невозможно для приложений встраиваемого сервера.
. ! .
* Режим локального соединения Windows. Для клиентов Windows, использующих Суперсервер Firebird на той же самой физической машине, Firebird поддерживает режим локального соединения, используя межпроцессную передачу данных для моделирования сетевого соединения без интерфейса физической сети и сетевого протокола. Это полезно при доступе к базе данных в процессе разработки, для приложений встраиваемого сервера и для консольных инструментов клиента, но в этом варианте не поддерживается механизм событий Firebird и параллельная работа клиентской части из разных потоков приложения.
Средства локального соединения клиент-сервер являются ограниченными и не должны использоваться при поставках программ. Распространяйте автономные приложения клиент-сервер, Web-приложения и другие уровни серверов с использованием для соединения локально закольцованного протокола TCP/IP.
* Прямое локальное соединение в POSIX. Может ли локальный клиент соединяться с базой данных в Linux и в некоторых других системах POSIX, зависит, в первую очередь, от варианта сервера, который вы инсталлировали (Классический сервер или Суперсервер), и, во вторую очередь, от типа клиентского соединения.
Суперсервер совсем не принимает локальных соединений через обычный клиентский API. Путь для соединения всегда должен включать имя хоста TCP/IP. Тем не менее он принимает локальные соединения от "встроенных приложений" (приложений, написанных с использованием встроенного SQL - Embedded SQL, ESQL). Инструменты командной строки, gsec, gfix, gbak и gstat, которые являются встроенными приложениями, могут выполнять локальные соединения с Суперсервером.
Если у вас запущен Классический сервер, с локального клиента возможно прямое соединение.
Встраиваемый сервер
Начиная с Firebird 1.5, пакеты Firebird для Windows включают полную функциональность встраиваемого сервера (клиент и сервер соединяются как динамическая библиотека). Это идентично обычной модели клиент-сервер, за исключением того, что здесь не поддерживается сетевой протокол: соединение осуществляется в стиле "локальной Windows" для эмуляции сетевого соединения.
! ! !
ВНИМАНИЕ! Встраиваемый сервер не поддерживает пароль безопасности доступа Firebird.
. ! .
Смешанные платформы
Архитектура Firebird позволяет клиентам, запущенным в одной операционной системе, получить доступ к серверу Firebird, выполняющемуся на платформе и в операционной системе, отличных от клиентских. Часто используемый вариант- одновременный запуск нескольких недорогих персональных компьютеров с Windows 98 в качестве клиентских рабочих станций, имеющих доступ к главному серверу, выполняющемуся под Windows NT/2000/XP, Linux или под некоторой версией UNIX.
База данных, которая была создана для использования на одной модели сервера, может работать на любом из них. Например, когда приложение встраиваемого сервера неактивно, его база данных может находиться под управлением другого приложения встраиваемого сервера или полного сервера Firebird, обслуживающего удаленных клиентов. Та же база данных может быть без изменений перенесена с одной платформы на другую[4].
К тому же платформы Windows и Linux, реализации сервера Firebird (Классический, Суперсервер или оба) работают также в Mac OS X (Darwin), FreeBSD, Sun Solaris (Intel и SPARC), HP-UX, потенциально в AIX и могут быть созданы для множества дополнительных платформ UNIX.
Firebird в настоящее время не поддерживает ни платформу Novell NetWare, ни другие виды сетей, которые используют устаревший протокол IPX/SPX. С прекращением со стороны Novell поддержки этого протокола сайты часто используют серверы Firebird в системе Linux с сетевыми клиентами, подключенными к этой подсистеме через TCP/IP.
Сетевой адрес для сервера
Для связи через TCP/IP вы должны соединяться с хостом, который имеет известный адрес IP. Определение того, какой это адрес IP (или каким должен быть, если он отсутствует), зависит от вида сетевого оборудования вашей хост-машины.
* Если вы находитесь в управляемой сети, получите IP-адрес сервера у вашего системного администратора.
* Если у вас простая сеть из двух машин, соединенных кабелем с перекрестными проводниками, или малая переключаемая сеть, вы можете установить для вашего сервера любой подходящий уникальный адрес IP, какой вам нравится, за исключением 127.0.0.1 (который резервируется для локальной заглушки TCP).
* Если вам известны "родные" адреса IP ваших сетевых карт, и они различны, вы можете просто использовать их.
* Если вы собираетесь пробовать инсталляцию на одной машине и для клиента, и для сервера, вы должны использовать адрес локально закольцованного сервера - localhost или его IP-адрес 127.0.0.1.
! ! !
ВНИМАНИЕ! В Windows один пользователь может локально соединиться с сервером без использования локального TCP/IP как внешний или как встроенный клиент. Серверный адрес не требуется для такого соединения и не может быть использован для проверки того, правильно ли работает TCP/IP при вашей инсталляции.
. ! .
Файл HOSTS
Если в вашей TCP/IP-сети не запущен сервис имен доменов, то необходимо проинформировать индивидуально каждый узел о распределении адресов IP в именах хоста вашей сети. Для этого измените файл HOSTS для каждого узла (сервер и клиент).
При установке узлов Firebird вашей TCP/IP-сети рекомендуется конфигурировать файлы имен хоста на клиентах и использовать имена, а не напрямую адреса IP при подключении к серверу. Хотя большинство последних операционных систем могут использовать IP-адрес хоста в строке соединения вашего клиента вместо имени хоста, соединение через имя хоста гарантирует, что адрес сервера остается статичным, несмотря на динамическое изменение адресов в сети.
! ! !
ВНИМАНИЕ! Для рабочих станций, работающих под Windows 95 и ранней версии Windows 98, где клиентские станции работают в старой 32-битовой версии Windows, сетевая поддержка вовсе не распознает IP-адрес в строке соединения, потому что эти версии инсталлировались с Winsock 1. В любом случае инсталляция Winsock 2 более соответствует требованиям текущих версий Firebird. Свободно распространяемые пакеты обновлений могут быть загружены с сайтов поддержки пользователей Microsoft.
. ! .
Местонахождение файла HOSTS
Перечислим, где можно найти файл HOSTS.
* В Linux и многих версиях UNIX файл HOSTS обычно расположен в /etc/. Помните, что имена файлов являются чувствительными к регистру на платформах семейства UNIX.
* В Windows NT/2000 файл HOSTS располагается в C:\WMNT\system32\drivers\etc\.
* В Windows 95/98/ME/XP/Server2003 файл HOSTS располагается в C:\Windows.
! ! !
СОВЕТ. Если файл HOSTS отсутствует, вы найдете файл с именем Hosts.SAM в том же месте. Скопируйте этот файл и переименуйте в HOSTS.
. ! .
Примеры записей файла:
10.12.13.2 db_server # Firebird-сервер (в LAN)
65.215.221.149 apress.com # (сервер в WAN)
127.0.0.1 localhost # локальная заглушка (в Windows)
127.0.0.1 localhost.localdomain # локальная заглушка(в Linux)
Откройте и отредактируйте файл HOSTS в текстовом редакторе. Создание записей простое. Тем не менее обеспечьте, чтобы:
* IP-адрес, если это не 127.0.0.1 (localhost), был действительным, сконфигурированным для хоста в вашей сети;
* имя сервера было любым уникальным именем в вашей сети;
! ! !
СОВЕТ. Серверная машина под Windows, которая была установлена в Windows Networking (Named Pipes) с именем хоста //Server_name, будет распространять это имя как имя хоста TCP/IP.
. ! .
* комментарии после символа # необязательны, но рекомендуются;
* формат записей одинаков, независимо от того, под какой системой запущен хост - Windows или Linux/UNIX.
! ! !
ВНИМАНИЕ! После того как вы отредактировали файл HOSTS, проверьте, что ваш редактор сохранил HOSTS без расширения имени файла. Если необходимо, удалите любое расширение, переименовав файл.
. ! .
Имя сервера и путь к нему
При создании или перемещении базы данных убедитесь, что она располагается на жестком диске, который физически соединен с вашей серверной машиной. Файлы базы данных, расположенные на разделенных, назначенных дисках или (для UNIX) смонтированных как файловая система SMB (Samba), невидимы для сервера.
Начиная с Firebird 1.5, у вас есть возможность сохранять пути к базам данных на вашем сервере с использованием алиасов путей к базе данных. Это не только упрощает дело с установкой изменяемой строки соединения в ваших приложениях, но также добавляет дополнительный уровень безопасности для ваших удаленных соединений. Алиасы путей к базам данных не дают возможности чужим программам определить, где расположены ваши базы данных, и использовать эту информацию для разрушения ваших файлов.
Об алиасах базы данных см. главу 4.
Синтаксис строки соединения
Это строки соединения, очевидные для каждой платформы, которые нужны вам для конфигурирования алиасов и для соединения клиентов с базой данных, через сервер Firebird тех версий, которые не поддерживают алиасов базы данных.
TCP/IP
Строка соединения TCP/IP содержит два элемента: имя сервера и абсолютный путь диска/файловой системы, такой, как его видит сервер. Формат следующий:
* для соединения с сервером Linux:
имя-сервера: /путь-файловой-системы/файл-базы-данных
Вот пример для Linux или другой операционной системы семейства UNIX для сервера с именем hotchicken:
hotchicken:/opt/firebirdl5/examples/LeisureStore.fdb
! ! !
ВНИМАНИЕ! Помните, что для этих платформ все имена файлов являются чувствительными к регистру.
. ! .
* для соединения с сервером Windows:
имя-сервера:Диск: \путь-файловой-системы\файл-базы-данных
Пример:
hotchicken:С:\Program Files\Firebirdl5\examples\LeisureStore.fdb
Прямая наклонная черта также допустима в Windows:
hotchicken:С:/Program Files/Firebirdl5/examples/LeisureStore.fdb
Локальное соединение в Windows
Соединение встроенного клиента или локального внешнего клиента в локальном режиме Windows:
C:\Program Files\Firebirdl5\examples\LeisureStore.fdb
Сеть Windows (Named Pipes/WNet)
Соединение удаленного клиента сервера Windows с использованием протокола Named Pipes:
\\имя-сервера\Диск:\путь\файл-базы-данных
где \\имя-сервера - правильный идентификатор имени узла серверной машины в сети Windows, не может быть разделяемым или назначенным диском. Например,
\\hotchicken\c:\databases\LeisureStore.fdb
Несовместимые строки соединения для подключений Windows
Суперсервер для Windows устанавливает исключающую блокировку на файл базы данных, когда активируется первое клиентское подключение, чтобы защитить базы данных от старой ошибки.
Ошибка в пути соединения
Windows воспринимает две формы абсолютного локального пути к файлу - один (правильный в соответствии со стандартом DOS), имеющий вид устройство:\путь- к-базе-данных, и другой: Устройство: путь-к-базе-данных (отсутствует обратная наклонная черта после обозначения дискового устройства).
Если сервер получил два клиентских запроса на соединение, первое, использующее стандартную форму пути, и второе, с использованием второй формы, он будет трактовать эти два соединения, как если бы они были соединениями с двумя разными базами данных. Результатом параллельных операций DML в подобном случае будет разрушение базы данных.
Для соединений с Суперсервером исключающая блокировка решает проблему требования для всех соединений применения того же формата пути, что был использован при первом соединении. То же решение не может применяться в случае Классического сервера, потому что каждое соединение работает с собственным экземпляром сервера. Позаботьтесь о том, чтобы ваше приложение всегда передавало согласованные строки пути.
! ! !
СОВЕТ. Настоятельно рекомендуется использовать алиасы базы данных (см. разд. "Алиасы базы данных" е главе 4) для всех соединений. Убедитесь также, что файл aliases.conf содержит один и только один алиас для каждой базы данных.
. ! .
Конфигурирование сервиса порта TCP/IP
По умолчанию Firebird прослушивает порт 3050 при запросе соединения от клиентов TCP/IP. Зарегистрированное имя сервиса этого порта gds_db. Хорошая новость - вы можете использовать эти установки по умолчанию и ничего не делать с конфигурацией сервиса порта ни для сервера, ни для клиента.
Вы можете использовать другой порт, другое имя сервиса порта или и то, и другое. Вам может понадобиться это сделать, если порт 3050 требуется для другого сервиса, например, если параллельно используемый gds_db сконфигурирован для другой версии Firebird или для сервера InterBase. Есть несколько способов перекрыть значения по умолчанию. Сервер и клиенты оба должны быть сконфигурированы для изменения имени сервиса или номера порта (или и того, и другого) по меньшей мере одним из следующих способов:
* в строке соединения клиента;
* в команде запуска исполняемой программы сервера;
* активацией параметров RemoteServicePort или RemoteServiceName В firebird.config (версия 1.5 и выше);
* в демоне конфигурации (для Классического сервера в POSIX);
* в записи файла services.
Прежде чем проверять каждую из этих техник, будет полезным взглянуть на логику, используемую сервером для установки прослушиваемого порта, и порядок установки клиентом используемого порта.
Как сервер устанавливает прослушиваемый порт
Исполняемая программа сервера имеет необязательный переключатель в командной строке (-р), который можно использовать для указания номера порта или имени сервиса порта, который будет прослушиваться сервером. Если присутствует этот переключатель, то номер порта 3050 или имя сервиса порта (gds_db) будут заменены на значение аргумента, указанного в переключателе -р.
Затем- или вначале, если не установлен переключатель -р,- сервер версии 1.5 проверяет наличие параметров RemoteServicePort и RemoteServiceName В firebird.config.
* Если оба параметра закомментированы с использованием #, то принимаются значения по умолчанию, и никакие дальнейшие изменения не выполняются. Любой аргумент -р игнорируется, и "отсутствующие" аргументы сохраняют значение по умолчанию.
* Если RemoteServiceName (но не RemoteServicePort) не закомментирован, то имя сервиса порта заменяется, только если это имя не было уже перекрыто переключателем -р.
* Если RemoteServicePort и RemoteServiceName не закомментированы, ТО RemoteServiceName получает приоритет, если он не был перекрыт аргументом -р. Если же имя сервиса порта уже было изменено, то значение RemoteServiceName будет проигнорировано, и новое значение RemoteServicePort заменит предыдущее значение 3050.
* В этой точке, если замена номера порта или имени сервиса была выполнена, то оба сервера версий 1.0 и 1.5 выполняют проверку файла services на наличие записи с корректной комбинацией имени сервиса и номера порта. Если соответствие найдено, то все в порядке. Если нет, и имя сервиса порта не gds db, то сервер выдаст исключение и отменит запуск. Если имя сервиса порта gds db и ему не может быть назначен никакой другой порт, он будет использовать порт 3050 автоматически.
Если значение по умолчанию для номера порта или имени сервиса было изменено, то вам может понадобиться создать запись в файле services. Для понимания того, нужно ли это делать, выполните шаги, описанные далее в этой главе в разд. "Конфигурирование файла services".
Использование переключателя -p
Запуск сервера с необязательным переключателем -р дает вам возможность перекрывать значение по умолчанию для номера порта (3050) или имя сервиса порта (gds db), которые используются сервером для прослушивания запросов на соединение. Переключатель может перекрывать одно значение, но не оба. В Firebird 1.5 и следующих вы можете использовать переключатель -р в комбинации с конфигурацией в файле firebird.conf для получения возможности перекрывать и номер порта, и имя сервиса порта.
Синтаксис для TCP/IP
Шаблон синтаксиса для команд:
Команда-сервера <другие переключатели< -р номер-порта j имя-сервиса
Например, для запуска Суперсервера как приложения и замены имени сервиса с gds_db на fb_db введите:
fbserver -а -р fb_db
Для замены порта 3050 на 3051 введите:
fbserver -а -р 3051
Синтаксис для Wnet
Для сети Wnet замените аргумент переключателя -р на обратная черта-обратная черта-точка-@:
fbserver -а -р \\.@fb_db
ИЛИ
fbserver -а -р \\.@3051
Классический сервер в POSIX: демон inetd или xinetd
В Классическом сервере Firebird для Linux или UNIX демон inetd или xinetd сконфигурирован на прослушивание порта по умолчанию и имя сервиса по умолчанию. Инсталляционный скрипт запишет соответствующую запись в файл конфигурации /etc/inetd.conf или /etc/xinetd.conf.
Проблемы с подключением к Классическому серверу часто происходят по причине отсутствия или неправильной записи сервиса порта в этом файле. Вы можете проверить текущую запись, открыв файл в текстовом редакторе (например, vim) и скорректировав ее при необходимости. Следующий пример показывает, что вы должны увидеть в файле /etc/inetd.conf или /etc/xinetd.conf после инсталляции Классического сервера Firebird в Linux:
# default: on
# description: FirebirdSQL server
#
service gds_db
(
flags = REUSE KEEPALIVE
socket_type = stream
wait = no
user = root
# user = @FBRunUser@
log_on_success += USER1D
log_on_failure += USER1d
server = /opt/firebird/bin/fb_inet_server
disable = no
)
Если вы изменили сервис порта на значение, отличное от значения по умолчанию, вы должны соответственно изменить /etc/inetd.conf или /etc/xinetd.conf. Заново стартуйте xinetd (или inetd) с аргументом kill -HUP, чтобы убедиться, что демон будет использовать новую конфигурацию.
! ! !
ВНИМАНИЕ! Запросы на соединения будут неуспешными, если xinetd (или inetd) и fbserver (или ibserver) оба пытаются прослушивать один и тот же порт. Если ваша хост-машина имеет подобную дублирующую конфигурацию, то необходимо сделать такие установки, при которых каждая версия сервера имела бы свой собственный порт.
. ! .
Использование параметров файла конфигурации
В Firebird 1.5 и выше вы можете конфигурировать или RemoteServiceName, или RemoteServicePort в файле firebird.config для изменения номера порта по умолчанию (3050), или имени сервиса порта по умолчанию (gds_db), которые использует сервер для прослушивания запросов на соединение.
Сервер будет использовать один параметр Remoteservice*, но не оба. Если вы сконфигурировали оба, то он будет игнорировать RemoteServicePort во всех ситуациях, за исключением того случая, когда команда запуска сервера была вызвана с переключателем -р, перекрывающим имя сервиса порта. Следовательно, вы можете использовать в комбинации переключатель -р и параметр Remoteservice* для изменения номера порта и имени сервиса.
Если значения по умолчанию для номера порта или имени сервиса были изменены, то вам нужно создать запись в файле services.
! ! !
ВНИМАНИЕ! Если вы не закомментировали ни RemoteServiceName, ни RemoteServicePort, но оставили значения по умолчанию нетронутыми, они будут трактоваться как измененные. Необходимо создать запись в файле services для установок значений по умолчанию сервиса порта.
. ! .
Установка клиента для поиска порта сервиса
Если вы установили ваш сервер с инсталляционными значениями по умолчанию (сервис gds db прослушивает порт 3050), то конфигурирование не требуется. Если сервер прослушивает другой порт или используется другое имя сервиса порта, то приложение клиента и/или хост-машины требуют некоторых изменений конфигурации, чтобы помочь клиентской библиотеке Firebird найти прослушиваемый порт.
Строка соединения, используемая клиентом, может включать информацию для опроса прослушиваемого порта сервера разными путями. Клиенты Firebird 1.5 могут использовать локальную копию firebird.conf. Изменения также могут понадобиться и для файла services.
Использование строки соединения
Если были изменены только номер порта или имя сервера, включите альтернативный номер порта или имя сервера в строку соединения. Это работает для всех версий Firebird.
Синтаксис соединения TCP/IP
Для соединения с сервером базы данных, названным hotchicken, связанным с портом 3050 и сервисом fb_db, строка соединения в POSIX должна быть следующей:
hotchicken/fb_db:/data/leisurestore.fdb
Если же сервер имеет имя gds db, а номер порта 3051, то строка соединения должна быть следующей:
hotchicken/3051:/data/leisurestore.fdb
В Windows строка соединения должна быть:
hotchicken/3051:D:\data\leisurestore.fdb hotchicken/fb_db:D:\data\leisurestore.fdb
Обратите внимание, что разделитель между именем сервера и портом наклонная черта, а не двоеточие. Двоеточие требуется в строке физического пути после имени диска.
Синтаксис соединений Wnet
В сети Wnet используйте стиль нотаций UNC:
\\hotchicken@3051\d:\leisurestore.fdb
или
\\hotchicken@fb_db\d:\leisurestore.fdb
Если номер порта или имя сервиса были изменены, то вам нужно создать запись в файле services.
Использование синтаксиса порта для алиасов базы данных
Для соединения через порт, не являющегося портом по умолчанию, с помощью алиаса базы данных добавьте номер порта или имя сервиса к имени сервера, а не к алиасу. Предположим, что алиас базы данных был сохранен в aliases.conf в виде:
hotstuff = /data/leisurestore.fdb
Строка соединения вашего приложения с сервером hotchicken будет следующей:
hotchicken/fb_db:hotstuff
или
hotchicken/3051:hotstuff
Использование копии firebird.conf
В Firebird 1.5 и выше вы можете скопировать на клиентскую сторону в корневой каталог Firebird файл firebird.conf и сконфигурировать RemoteServiceName или RemoteServicePort для помощи клиенту в поиске серверного порта.
Вы можете конфигурировать один из этих двух параметров; изменение значения другого параметра можно выполнить через строку соединения (см. ранее). Вы можете перекрыть значение только RemoteServiceName или RemoteServicePort без использования строки соединения.
Если вам не нужно передавать имя сервиса порта или номер порта в строке соединения, а сервер не использует значения по умолчанию для обоих параметров, вы можете конфигурировать оба RemoteServiceName и RemoteServicePort. Вы можете использовать эту технику, если вашему клиентскому приложению нужно сохранить возможность соединяться с серверами InterBase или Firebird 1.0.
Размещение данных Firebird на клиентах
Если вы используете на клиентских машинах файл firebird.conf, нужно, чтобы клиентская библиотека знала, где его найти. Вам необходимо создать корневой каталог Firebird и проинформировать систему о его местонахождении. Используйте для этого переменную среды FIREBIRD таким же образом, как и для серверов (см. главу 3). Клиенты Windows могут также использовать запись в реестре. При правильной установке клиента вы можете также сделать доступной локальную версию файла сообщений. Более подробную информацию см. в разд. "Инсталляция клиентов" в главе 7.
Конфигурирование файла services
Вам не нужно изменять запись сервиса порта для сервера или клиентов Firebird, если сервер использует значения по умолчанию, заданные при инсталляции - gds db для порта 3050. Если gds db - имя сервиса порта, который не может использовать любой другой порт, то он будет применять порт 3050 автоматически.
Если вы изменили номер порта или имя сервиса, вы должны сделать явные изменения для сервера и клиентов, чтобы отобразить эти изменения. В Linux и Windows данная информация хранится в файле services.
Местонахождение файла services
Местонахождение файла services на разных платформах:
* в Windows NT/2000/XP этот файл находится в C:\winnt\system32\drivers \etc\services;
* в Windows 95/98/ME файл находится в C:\Windows\services;
* в Linux/UNIX файл находится в /etc/services.
Записи файла services выглядят следующим образом:
gds_db 3050/t.cp # Firebird Server 1.5
Откройте файл в текстовом редакторе и добавьте новую строку или измените существующую запись gds db.
* Для сервера или клиента Firebird 1.0.x измените имя сервиса или номер порта для согласования с параметрами запуска сервера.
* Для сервера Firebird 1.5 или выше отредактируйте или добавьте нужную строку. Если у вас инсталлирован сервер Firebird 1.0 или InterBase на том же хосте, сохраните нужные для них записи и добавьте новую запись для согласования с параметрами запуска сервера.
! ! !
ПРИМЕЧАНИЕ. Если данная строка является последней в файле services, то рекомендуется в конце файла добавить пустую строку.
. ! .
Проверка соединения с помощью ping
Вы сделали все нужные изменения. Последняя проверка нужна, чтобы убедиться, что ваша клиентская машина может связываться с сервером. Вы можете быстро проверить, что ваш клиент TCP/IP связывается с сервером, используя в окне командной строки команду ping:
ping имя-сервера// подставьте имя, которое вы записали в файле HOSTS
Если соединение прошло хорошо, и все правильно сконфигурировано, вы увидите приблизительно следующее:
Pinging hotchicken [10.10.0.2] with 32 bytes of data
reply from 10.10.0.2: bytes=32 time<10ms TTL=128
reply from 10.10.0.2: bytes=32 time<10ms TTL=128
reply from 10.10.0.2: bytes=32 time<10ms TTL=128
reply from 10.10.0,2: bytes=32 time<10ms TTL=128
Нажмите комбинацию клавиш <Ctrl>+<C> для прекращения сообщений ping.
Если ping выдает ошибку
Если вы получили нечто вроде
Bad IP address hotchicken (Неверный IP-адрес hotchicken)
то имя хоста в записи файла для имя-сервера (в этом примере hotchicken) может быть отсутствует или неверно написано. К примеру, все идентификаторы в Linux/UNIX являются чувствительными к регистру. Другая причина может заключаться в том, что имя хоста вашего сервера просто не было сконфигурировано.
Если вы увидите:
Request timed out
то это означает, что адрес IP, на который ссылается имя хоста в вашем файле, не может быть найден в подсети. Проверьте следующее:
* нет ошибок в имени хоста в записи файла;
* сетевой кабель подключен, провод и контакты не повреждены и не ржавые;
* конфигурация сети позволяет направлять сетевой трафик между клиентом и сервером. Ограничения подсети или системы сетевой защиты могут препятствовать серверу в получении данных от клиента.
• Ограничения подсети: TCP/IP может быть сконфигурирован для ограничения трафика между подсетями. Если ваша клиентская машина является частью сложной сети или подсети, уточните у сетевого администратора, имеет ли она неограниченный доступ к серверу.
! ! !
ВНИМАНИЕ! WNet не позволяет направлять сетевой трафик между подсетями.
. ! .
• Система сетевой защиты (firewall): ваша проверка соединения может дать ошибку, если сервер базы данных находится под программной или аппаратной системой сетевой защиты, которая блокирует порт 3050 или сконфигурированный вами порт.
Проблемы с событиями
Несмотря на то, что каждый клиент соединяется с сервером через один канал, события Firebird - механизм обратной связи, который позволяет передавать сообщения о событиях назад клиентам с помощью триггеров и хранимых процедур, - используют произвольные доступные порты. В статических замкнутых сетях без внутренних систем сетевой защиты это обычно не вызывает проблем. В сетях, где существует множество подсетей, динамическая IP-адресация и строго сконфигурированная система сетевой защиты, передача событий может закончиться неудачей.
В Firebird 1.0.x ваш сетевой администратор должен установить некий способ, чтобы гарантировать наличие доступного порта, который всегда свободен, открыт и является статическим. Проблема может быть решена тем или иным образом в большинстве сетей.
Firebird 1.5 упрощает дело. Он делает возможным явно задавать IP-адрес в сети для трафика событий. Используйте параметр RemoteAuxPort в файле firebird.conf с целью статической установки IP-адреса для интерфейса (карта, маршрутизатор, шлюз и т.д.), который будет доступен для направления событий.
Более подробно о событиях Firebird см. главу 32.
Другие сетевые проблемы
Если дела идут плохо, вы можете найти немало советов в приложении 2.
Пора дальше
Куда дальше? Если у вас все в порядке с установками сети, и вам не терпится идти дальше, переходите прямо к главе 4 для изучения "основ", которые помогут вам соединиться с базой данных. Если же вы инсталлировали Firebird в мультипроцессорной системе, или вы подозреваете, что некоторые элементы конфигурации вашей машины могут вызвать проблемы, читайте дальше. Несмотря на то, что редко бывает нужным изменять конфигурацию Firebird для основных операций, в главе 3 описывается несколько опций конфигурации, которые могут помочь вам избавиться от головной боли.
ГЛАВА 3. Конфигурирование Firebird.
После инсталляции Firebird, как правило, готов к запуску. Конфигурирование не требуется или минимально. Если инсталляция и настройка сети прошли по плану, нет необходимости что-нибудь делать для нового пользователя, нужно лишь продолжать узнавать возможности Firebird и экспериментировать с программным обеспечением. Вы можете просто пропустить эту главу и перейти к следующей.
Тем не менее, это заявление может оказаться не совсем верным для некоторых платформ, или когда определенная операционная система заблокировала одну или две функции автоматического конфигурирования инсталляционного скрипта или программы. Данная глава будет интересна новым пользователям при решении некоторых из этих проблем.
В первом разделе главы указано, как конфигурировать переменные окружения и ресурсы файловой системы для использования Firebird. Здесь описывается проверка параметров конфигурации сервера, как их модифицировать в случае особого использования и требований совместимости.
Конфигурация на уровне базы данных
Эта глава посвящена конфигурации на уровне сервера. Один сервер Firebird может работать с несколькими базами данных одновременно. Каждая база данных может быть сконфигурирована таким образом, чтобы соответствовать предъявляемым к ней требованиям. Конфигурирование на уровне базы данных см. в главах 15 и 39.
Переменные окружения
Переменные окружения - глобальные установки системы, которые используются при первоначальной загрузке операционной системы. В Windows, Linux и в большинстве систем UNIX сервер Firebird распознает и использует некоторые переменные окружения, если они установлены. Процессы fbserver (архитектура Суперсервера) и fb inet server (архитектура Классического сервера) не распознают установок, которые ссылаются на сетевые ресурсы (диски и файловые системы), не управляемые физически серверной машиной.
Где устанавливаются переменные окружения
Windows
Тип переменных окружения и способ их установки меняется от одной версии Windows к другой. В табл. 3.1 показаны типы (если применимы) и способы установки значений переменным окружения.
Таблица 3.1. Установки переменных окружения для Windows
Версия Windows |
Тип переменной |
Описание |
Наличие |
Windows 95/98 |
He применяется |
Используйте Блокнот и установите переменные окружения в autoexec.bat или config.sys. Формат установки: SET <имя переменному = значение переменному. Пример: SET FIREBIRD=C:\PROGRAM\FIREBIRD. Для просмотра всех текущих установок переменных окружения наберите SET в командной строке |
Нет |
Windows NT/2000/XP |
Переменные пользователя. Делает переменные доступными для приложений, запускаемых конкретным пользователем, если этот пользователь подключен |
Используется для ограничения видимости переменных определенным пользователям. Диалоговое окно Свойства системы (System Properties), доступное через апплет Система (System applet) на Панели управления или через контекстное меню, появляющееся при щелчке правой кнопкой мыши на объекте Мой Компьютер и выборе элемента Свойства |
Да |
Windows NT |
-//- | Выберите Расширенное окружение | Новое (Advanced Environment | New) |
|
Windows 2000/XP |
-//- | Выберите Расширенное окружение | Переменные окружения | Новое (Advanced Environment | Variables | New) |
|
Windows NT/2000/XP |
Системные переменные. Доступны для всей системы (все сервисы, все пользователи). Команды SET записаны в командной строке. Переменные доступны только процессам, запущенным из командной строки |
Используйте, если Firebird запущен как сервис. Выберите Расширенное окружение | Переменные окружения | Новое (Advanced Environment | Variables | New) или Редактировать (Edit), если доступно |
Да |
-//- | -//- | Полезно для установки переменной окружения для временного использования (например, ISC_USERH ISC_PASSWORD для упрощения доступа из утилит командной строки при выполнении задач администратора). Используйте SET <имя_переменной> = <значение переменной> для установки значения переменной; используйте SET <имя_переменной> =, чтобы установить пустое значение |
Нет |
POSIX
В Linux и UNIX самый простой путь установления переменных окружения - добавить их определения в общесистемный профиль значений по умолчанию.
Пользователь root также может:
* выдать команды setenv() из командной строки wu командного скрипта;
* для временного использования установить и экспортировать переменную из командной строки, например, export ISC_USER=SYSDBA.
ISC_USER и ISC_PASSWORD
Эффект этой опасной пары переменных окружения - дать доступ с правами пользователя SYSDBA к серверу Firebird и его базам данных через утилиты командной строки или клиентские приложения любому, кто может соединиться с хост-машиной. Они удобны для разработчиков.
Если вы не указываете имя пользователя и пароль при локальном соединении с базой данных, или когда вы запускаете утилиты командной строки, такие как gbak, gstat или gfix, Firebird проверяет, установлены ли переменные окружения ISC_USER и ISC PASSWORD. Если установлены, Firebird позволяет вам соединиться без указания пароля. Никогда не оставляйте эти переменные установленными на сервере, который содержит важные базы данных, если помещение, где располагается сервер, не является физически хорошо защищенным!
Переменная FIREBIRD (или INTERBASE)
Если установлена переменная окружения FIREBIRD (INTERBASE для версии 1.0.x), то она используется и при инсталляции, и в процессе работы на всех платформах для указания корневого каталога сервера Firebird. Если она присутствует, то перекрываются все другие установки - значения по умолчанию инсталляционного пакета, установки в реестре Windows, конфигурация в firebird.conf, значения глобальных путей операционной системы и т.д.
В процессе инсталляции она указывает на каталог, в котором должен быть установлен Firebird. Значение переменной должно задавать полный путь, который существует в физической файловой системе на хост-машине. При старте сервер читает значения в файле конфигурации firebird.conf (или ib_config/isc_config в версии 1.0.x), который должен находиться в каталоге, назначенном переменной FIREBIRD (ИЛИ INTERBASE). Этот каталог должен быть родительским для каталога bin, где размещаются двоичные файлы Firebird. Здесь также по умолчанию находятся файлы сообщений и замков: firebird.msg (interbase.msg) и hostname.lck.
! ! !
ПРИМЕЧАНИЕ. Вы можете указать другое размещение файлов firebird.msg (interbase.msg) и firebird.lck (interbase.lck), установив переменные окружения FIREBIRD_MSG (INTERBASE_MSG) и FIREBIRD_LOCK (INTERBASE_LOCK). см. следующие разделы.
. ! .
Если переменная FIREBIRD не установлена, будут использованы значения по умолчанию:
* /opt/firebird - для платформ Linux/UNIX;
* C:\Program FilesXFirebird (версия 1,0.x) или C:\Program Files\Firebird\Firebird_1_5 (версия 1.5) - для платформ Windows.
В табл. 1.2-1.5 в главе 1 указаны точные пути. Если Firebird установлен в каталоге, отличном от каталога по умолчанию, и задана переменная FIREBIRD, то клиентская библиотека будет читать значение переменной для определения пути инсталляции.
В Windows клиентские приложения могут также найти путь инсталляции, читая в реестре поле Defauitmstance, которое создается, если проводилась инсталляция только клиента.
HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances
Более подробное обсуждение способов поиска сервером размещения этих файлов см. далее в этой главе в разд. "Корневой каталог Firebird". Информацию об установках только клиента см. в разд. "Установка клиентов" главы 7.
FIREBIRD_TMP
По умолчанию Firebird будет использовать глобальное пространство временных файлов, обычно задаваемое как системное значение по умолчанию переменной окружения TMP (обсуждается далее). Переменная окружения FIREBIRD_TMP (В версии 1.0.x - INTERBASE TMP) задает пользовательское размещение для файлов сортировки Firebird. Значение должно указывать полный путь, который существует в физической файловой системе хост-машины.
Доступны также другие способы определения размещения этих файлов. Конфигурирование параметра TempDirectories (TMP_DIRECTORY в версии 1.0.x) описано в разд. "Файл конфигурации Firebird" и разд. "Параметры для конфигурирования пространства временной сортировки" главы 36.
*_LOCK и *_MSG
FIREBIRD_LOCK (INTERBASE_LOCK В версии 1,0.x) устанавливает расположение файла блокировок. FIREBIRD_MSG (INTERBASE_MSG в версии 1.0.x) устанавливает расположение файла сообщений Firebird.
Эти две переменные независимы друг от друга, они могут указывать различные размещения файлов. Значение должно указывать полный путь, который существует в физической файловой системе хост-машины.
TMP
Пространство сортировки на серверной машине
Пространство сортировки - это место на диске, где сервер сохраняет промежуточные результаты (во временных файлах) для запросов, которые требуют сортировки или используют агрегатные функции. Firebird 1.0.x для этого использует только дисковые файлы. Firebird 1.5, если может, сохраняет эти файлы в RAM и отправляет их на диск только в том случае, если оперативная память исчерпана.
Глобальная переменная окружения TMP (или TEMP В некоторых системах) указывает каталог на сервере, где приложения должны сохранять временные файлы. Firebird попытается сохранить временные файлы сортировки именно здесь, если не определена переменная окружения FIREBIRD_TMP (см. разд. "FIREBIRD TMP") и в файле конфигурации Firebird не указано пространство сортировки (см. переменные TempDirectories и TMP_DIRECTORY В главе 36).
Файлы скриптов isql на клиенте
Интерактивная утилита командной строки isql предоставляет возможность записывать последовательность интерактивных команд SQL в файл скрипта при использовании переключателя OUTPUT. На клиентской машине переменная TMP задает расположение этих файлов скриптов, если не было указано другого абсолютного пути. Если переменная TMP не установлена, то клиент Firebird использует любой другой временный каталог, который будет найден в локальной системе, обычно tmp в файловой системе клиента Linux/UNIX или C:\Temp в клиенте Windows.
Файл конфигурации Firebird
Firebird не требует постоянной сложной реконфигурации, которая необходима другими тяжеловесными РСУБД. Тем не менее целый ряд вариантов конфигурирования доступен для настройки сервера Firebird и хост-системы, на которой он выполняется, под ваши специальные требования.
Файл конфигурации Firebird называется firebird.conf для всех версий Firebird 1.5 и выше. В предыдущих версиях его имя зависело от операционной системы:
* isc config - в Linux/UNIX;
* ibconfig - в Windows.
В версии 1.5 было добавлено несколько новых параметров.
Когда стартует сервер Firebird, он читает файл конфигурации и настраивает свои флаги времени выполнения (runtime flags), если файл конфигурации содержит значения, отличные от установленных по умолчанию. Данные из файла больше не будут считываться, пока не произойдет новый запуск сервера. Параметры конфигурации по умолчанию и их значения содержатся в файле конфигурации и закомментированы символом #. Нет необходимости убирать комментарий, чтобы сделать значения по умолчанию видимыми процедуре запуска сервера.
Изменение параметров конфигурации
Нет необходимости изменять значения по умолчанию, если только вы не собираетесь настроить некоторые из них. Это не рекомендуется делать, если вы не в полной мере понимаете, к чему это может привести.
Отдельные установки конфигурации по умолчанию, которые могут быть полезными для некоторых существующих приложений или инсталляций не по умолчанию, обсуждаются здесь вкратце. Полное описание параметров конфигурации см. в главе 36. Файл конфигурации можно редактировать любым текстовым редактором (например, vim в Linux или Блокнот в Windows). Не копируйте этот файл с машины Windows в Linux и наоборот, поскольку эти системы по-разному сохраняют символы перевода строки.
Записи параметров в файле firebird.conf представлены в форме:
имя_параметра = значение
где имя_параметра - строка, содержащая имя параметра (без пробелов), а значение - это число, логическая константа (1=Истина, 0=Ложь) или строка, которые задают значение параметра.
Для задания параметру значения, отличающегося от значения по умолчанию, удалите символ примечания (#) и отредактируйте значение.
Имена параметров и синтаксис в файле ibconfig/isc_config для Firebird 1,0.x отличаются от того, что может содержаться в firebird.conf. Формат, размер и количество параметров являются более ограниченными.
Формат в ibconfig/isc conflg:
имя_параметра значение
где промежуток между именем и значением может быть символами табуляции и пробелами (по желанию, как больше нравится). Каждая строка в файле ограничена 80 символами. Неиспользуемые параметры и инсталляционные значения по умолчанию закомментированы с помощью символа #.
Помните, что в Linux параметры чувствительны к регистру.
! ! !
ПРИМЕЧАНИЕ. Вы можете редактировать файл конфигурации и когда сервер запущен. Для активации изменений нужно остановить и заново запустить сервер.
. ! .
Корневой каталог Firebird
Корневой каталог инсталляции Firebird может использоваться в разных ситуациях - при инсталляции как используемый сервером атрибут, для параметров конфигурации и для клиентов. Поскольку есть разные способы сообщения серверу, где можно найти значение этого атрибута, разработчики и системные администраторы для его правильного определения должны знать, в каком порядке сервер находит это значение.
1. На любой платформе сервер в первую очередь смотрит глобальную переменную окружения FIREBIRD. Если он находит эту переменную, ее значение будет использовано без всяких условий.
2. Если переменная окружения FIREBIRD отсутствует, то для платформ Windows сервер отыскивает ключ в реестре
HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances
и смотрит поле oefauitinstance. Если он находит в данном поле правильный путь к каталогу, то использует это значение. Другие платформы не имеют подобного указателя.
3. Если корневой каталог все еще не найден, то предполагается, что временный корневой каталог располагается на один уровень выше каталога запущенного процесса (,.\ для Windows и ../ или ссылка на /proc/self/exe для POSIX, если доступно).
4. Теперь процедура запуска ищет в этом каталоге файл firebird.config. Если файл firebird.config найден, то процедура отыскивает параметр RootDirectory. Если параметр присутствует, его значение становится окончательно корневым каталогом, иначе промежуточное значение из n.3 становится окончательным значением.
! ! !
ВНИМАНИЕ! Если файл firebird.config не был найден на уровне, предшествующем запускаемому процессу, это может означать, что корневой каталог не был определен по причине нестандартной инсталляции. Сервер должен найти корневой каталог файлов. Если вам встретилась ошибка безопасности или ошибка файловой системы в процессе соединения или во время выполнения, вы должны пересмотреть ваши пути инсталляции, чтобы убедиться, что все действия, описанные в данном разделе, правильно определили корневой каталог файлов и подкаталоги.
. ! .
Параметры, связанные с доступом к файлам
Firebird имеет несколько параметров для защиты его файлов и баз данных от разрушающего или неавторизованного доступа. Если вы перемещаете приложение работы с базой данных или используете инструмент администратора для Firebird 1.5, вам следует обратиться к разд. "Файл конфигурации Firebird" в главе 36 для получения детальной информации об указанных далее параметрах.
* RootDirectory - может быть использован для изменения абсолютного пути к корневому каталогу в локальной файловой системе. Он должен оставаться закомментированным, если только вы не захотите изменить процедуру запуска, перекрыв путь к корневому каталогу инсталляции сервера Firebird (см. n. 3 в предыдущем разделе).
* DatabaseAccess - в Firebird 1.0.x сервер может соединяться с любой базой данных в его локальной файловой системе и всегда доступен приложениям, передающим абсолютный путь к файлу в файловой системе. Этот параметр был введен в версии 1.5, чтобы обеспечить более четкое управление безопасностью при доступе к файлам базы данных, а также для поддержки средства алиасов баз данных.
Инсталляция по умолчанию устанавливает значение параметра в Full, чтобы имитировать поведение Firebird версии 1,0.x. Альтернативные режимы могут ограничить доступ сервера только к базам данных с алиасами или к базам данных, размещенных в указанных каталогах файловой системы.
! ! !
ВНИМАНИЕ! Настоятельно рекомендуется установить этот режим и сделать доступным средство алиасов баз данных. Информацию об алиасах базы данных см. в главе 4.
. ! .
* ExtemaiFiieAccess - заменяет параметр EXTERNAL_FILE_DIRECTORY, введенный в версии 1,0. Этот параметр обеспечивает три уровня безопасности для External Files (внешние файлы - текстовые файлы фиксированного формата, к которым возможен доступ, как и к таблицам базы данных). Если вы переносите базу данных, в которой определены внешние файлы таблиц, вам нужно установить этот параметр для версии 1.5, потому что он отключен по умолчанию. Конфигурация необязательная, тем не менее рекомендуется для версии 1.0.x.
* UDFAccess - предназначен для защиты местоположения кода внешних модулей. Он заменяет не только необязательный параметр версии 1.0.x externai_function_ directory, но также и форму представления значения. Firebird 1.5 инсталлируется с отключенным по умолчанию доступом к библиотекам внешних функций, в то время как большинство серверов до этого давали полный доступ.
* TempDirectories (TMP_DIRECTORY в версии 1.0.x)- конфигурирование этого параметра является одним из способов задания размещения временного пространства сортировки для сервера, указав местоположение на диске. Синтаксис Firebird 1.5 отличается от синтаксиса Firebird 1.0.x.
Другие полезные параметры
Следующие параметры могут быть полезными в некоторых аппаратных конфигурациях.
* cpuAffinityMask (CPU_AFFINITY в версии 1.0.x)- может быть использован для назначения процессоров, которые Суперсервер в Windows будет использовать на машинах SMP. Эта проблема известна как эффект "see-saw", когда операционная система постоянно переключает выполнение Суперсервера между процессорами на некоторых машинах SMP. Свойство CPU должно быть установлено для одного процессора, если вам встретилась такая проблема.
По умолчанию маска свойств устанавливается для использования первого процессора в массиве.
* LockMemSize- параметр специфичен для Классических серверов; он определяет количество байтов разделяемой памяти, которая отводится для таблицы памяти, используемой менеджером блокировки. Вам может понадобиться изменить это количество, если вы встретите в Классическом сервере ошибку "Lock manager is out of room" (Менеджеру блокировки не хватает памяти). В связи с этой проблемой см. также параметр LockHashsiots.
* sortMemBiocksize и sortMemOpperLimit - эти два параметра были добавлены в версию 1.5, чтобы позволить устанавливать и ограничивать объем оперативной памяти, которую использует сервер при внутренней сортировке. Для Классического сервера этот размер по умолчанию слишком велик, чтобы поддерживать достаточно большое количество соединений.
* DummyPacketinterval(DUMMY_PACKET_INTERVAL в 1.0.x)- параметр - пережиток 16-битовых систем; он может стать причиной проблем в 32-битовых Windows. Это был старый параметр времени ожидания InterBase, предполагалось устанавливать количество секунд (целое число), в течение которых сервер должен был ожидать от клиента сообщений, после чего сервер должен был посылать пустой пакет для получения подтверждения. По умолчанию он установлен в 0 для Firebird 1.5(неактивен) и в 60 для Firebird 1.0.x. Он должен быть неактивным (установленным в 0) для всех систем Windows. Также настоятельно рекомендуется отключать его для других операционных систем[5].
* RemoteBindAddress - по умолчанию могут соединиться клиенты из любой сети, из которой сервер принимает трафик. Этот параметр позволяет связать сервис Firebird с исходными запросами через один IP-адрес (например, сетевая карта) и отклонять запросы соединения от любых других сетевых интерфейсов. Это помогает решать проблемы некоторых сетей, где сервер является хостом для нескольких подсетей. Не поддерживается в версии 1.0.x.
* compieteBooieanEvaiuation - параметр может быть использован для преобразования логики вычисления логических значений в виде сокращенного вычисления булевских выражений, используемой в Firebird 1.5 и выше, в полное вычисление булевских выражений, используемое в Firebird 1.0.x.
* oldparameterordering- восстанавливает старый способ обработки порядка параметров для запросов с подзапросами - сначала параметры подзапроса, затем параметры внешнего запроса. Firebird 1.5 по умолчанию обрабатывает параметры в точном порядке их следования, что может быть несовместимо со старыми версиями различных компонентов доступа, которые ориентировались на поведение InterBase/Firebird 1.0.
Пора дальше
Теперь нам больше ничего не осталось, кроме как соединиться с базой данных и начать выполнять серьезные эксперименты. Глава 4, последняя в нашем "учебном лагере", даст вам возможность соединиться с примером базы данных или с любой другой совместимой с Firebird базой данных, которая может находиться на вашем сервере.
ГЛАВА 4. Основные операции.
Теперь у вас есть установленный сервер Firebird, что дальше? Эта глава быстро обучит вас основам Firebird.
Запуск Firebird на Linux/UNIX
Суперсервер
Каталог инсталляции по умолчанию /opt/firebird. В каталоге /bin находится в двоичном формате сервер Firebird fbserver (ibserver для Firebird 1.0.x), который запускается как процесс-демон в Linux/UNIX. Он запускается автоматически после инсталляции посредством RPM или скрипта и каждый раз при перезагрузке сервера запуском скрипта демона firebird, находящегося в /etc/rc.d/init.d (или /etc/init.d в SuSE), который вызывает утилиту командной строки Firebird Manager - fbmgr.bin. Firebird Manager может быть использована из командной строки для запуска и остановки процесса вручную.
Запуск сервера
Если вы по разным причинам запустили Firebird вручную, соединитесь с ним как пользователь root или firebird. Запомните, какую учетную запись вы использовали при запуске fbserver, потому что все созданные объекты будут принадлежать пользователю с этой учетной записью. Если позже другой пользователь запустит процесс с использованием другой учетной записи пользователя, то эти объекты будут ему недоступны.
Настоятельно рекомендуется создать системного пользователя с именем firebird и запускать сервер Firebird с этой учетной записью.
Для запуска процесса выполните из командной строки следующую команду:
./fbmgr.bin -start -forever
Для версий Firebird, предшествующих 1.5, выполните:
./ibmgr -start -forever
Переключатель -forever означает, что Guardian будет управлять запуском. При использовании Guardian процесс сервера будет заново запущен, если он по каким-либо причинам завершится аварийно.
Для запуска сервера без использования Guardian введите:
./fbmgr.bin -start -once
Для версий Firebird, предшествующих 1.5, выполните:
./ibmgr -start -once
Переключатель -once означает, что если сервер будет аварийно завершен, перезапустить его можно будет только вручную.
Остановка сервера
В целях безопасности убедитесь, по возможности, что все соединения с базой данных отключены, прежде чем вы остановите сервер.
Переключатель -shut отменяет все текущие транзакции и прекращает работу сервера немедленно.
Вам не требуется быть подключенным как пользователь root для остановки сервера Firebird fbmgr, но вы должны иметь полномочия пользователя SYSDBA. Выполните следующую команду.
./fbmgr.bin -shut -password <пароль SYSDBA>
Используйте команду для версий, предшествующих 1.5:
./ibmgr.bin -shut -password <пароль SYSDBA>
Управляемое завершение работы
На этой платформе Firebird не имеет утилиты для подсчета количества пользовательских соединений с базой данных для Суперсервера. Если вам нужно предоставить клиентам интервал времени для завершения работы и корректного отключения, завершайте работу индивидуальных баз данных с использованием инструмента gfix с переключателем -shut и одним из доступных аргументов для управления отключением. (См. разд. "Останов базы данных" в главе 39.)
Другие команды fbmgr
Синтаксис
Из командной строки:
./fbmgr.bin -команда [-режим [параметр] ...]
Альтернативно вы можете стартовать интерактивную сессию fbmgr или ibmgr из командной строки (например, перейдя в режим с подсказкой). Наберите:
./fbmgr <нажмите Return/Enter>
для того чтобы перейти к следующей подсказке:
FBMGR>
В режиме с подсказкой синтаксис команд:
FBMGR> команда [-режим [параметр] ...]
Например, вы можете запустить сервер одним из следующих способов. Из командной строки:
./fbmgr -start -password пароль В режиме с подсказкой:
FBMGR> start -password пароль
Переключатели fbmgr
В табл. 4.1 представлен список переключателей fbmgr и ibmgr, доступных из командной строки и из режима с подсказкой.
Таблица 4.1. Переключатели fbmgr/ibmgr
Переключатель |
Аргумент |
Другие переключатели |
Описание |
-start |
-forever | once |
-user, -password |
Запускает fbserver, если он не был еще запущен |
-shut |
-user, -password |
Останавливает fbserver |
|
-show |
Показывает хост и пользователя |
||
-user |
Имя пользователя |
SYSDBA; используется с переключателями -start и -stop, если пользователь системы не является root или эквивалентным ему |
|
-password |
Пароль SYSDBA |
Используется с переключателями -start и -stop, если пользователь системы не является root или эквивалентным ему |
|
-help |
Выводит короткий текст помощи fbmgr |
||
-quit |
Используется для выхода из режима с подсказками |
Классический сервер
Классический сервер Firebird использует процессы xinetd или inetd для обработки поступающих запросов. (Применяемый процесс зависит от версии Linux.) Нет необходимости явно запускать сервер. Процесс xinetd или inetd запускается автоматически; когда он получает запрос от клиента Firebird на соединение, он порождает копию процесса fbinetserver для этого клиента.
Как сервер прослушивает запросы на соединение
Если Классический сервер Firebird был установлен инсталлятором, использующим скрипты или RPM, то файл конфигурации запуска для fb inet server с именем firebird должен быть добавлен в сервисы, о которых знает [x]inetd. В большинстве дистрибутивов Linux этот файл размещается в каталоге /etc/xinetd.d. Чтобы [x]inetd "слушал" запросы на соединение от клиентов для вашего Классического сервера Firebird, скрипт firebird должен находиться в том же каталоге, где стартует процесс [x]inetd.
! ! !
СОВЕТ. Если [x]inetd запущен, и ни одного запроса на соединение клиента не последовало вовсе, проверьте, действительно ли скрипт firebird находится там, где он должен быть. Если нет, то вы можете выделить скрипт firebird.xinetd из файлового комплекта инсталляции, скопировать в нужный каталог и переименовать в firebird. Чтобы [x]inetd "видел" сервис Firebird, остановите и заново запустите [x]inetd.
. ! .
Остановка и запуск [x]inetd и его сервисов
Демон [x]inetd сам является сервисом, который по запросу управляет другими сервисами, например Классическим демоном Firebird. Остановка [x]inetd приведет к тому, что все процессы, которыми он управляет, будут также остановлены. Его запуск или повторный запуск приведет к возобновлению прослушивания запросов и запуску управляемых им процессов.
Если все сервисы в каталоге ../rc.d являются безопасными для остановки, соединитесь как пользователь root и остановите [x]inetd следующей командой из командной строки:
ft service xinetd stop или командой:
# service inetd stop
Если [x]inetd не был сконфигурирован для автоматического перезапуска после остановки, запустите его командой[6]:
# service xinetd restart
Остановка процесса Firebird
Если вам нужно остановить вышедший из-под контроля процесс Firebird в Классическом сервере, вы можете это сделать. Найдите ошибочный процесс, выполнив команду top из командной строки. Эта утилита отображает список наиболее интенсивно использующих CPU процессов, постоянно обновляя этот список. Любой экземпляр fb inet server с необычным использованием ресурсов должен появиться в этом списке.
Выберите идентификатор (process ID, PID) ошибочного процесса fb_inet_server из самой левой колонки в списке. Вы можете использовать этот PID в команде kill для посылки сигнала ошибочному процессу. Например, для PID 12345 вы можете попытаться остановить процесс, выдав:
# kill 12345
Если процесс остается видимым в списке утилиты top, вы можете попытаться форсировать остановку процесса:
# kill -9 12345
! ! !
ВНИМАНИЕ! Проявляйте величайшую осторожность при использовании команды kill, особенно если вы подключились как пользователь root.
. ! .
Запуск сервера Firebird в Windows
Суперсервер
Выполняемая программа Суперсервера Firebird - fbserver.exe. Хотя он может запускаться и как самостоятельная программа, он также может находиться под управлением Guardian - fbguard.exe. Guardian обеспечивает возможность эмулировать автоматический рестарт сервисов в Windows и POSIX, запущенных с переключателем -forever. Если приложение fbserver.exe аварийно завершается, Guardian пытается заново его запустить. Рекомендуется использовать Guardian на хостах, работающих на платформах Windows 95/98 и ME, а также NT/XP, если сервер выполняется как приложение.
В Windows NT и Windows 2000 программа сервера Firebird может выполняться как сервис и как приложение. Инсталляция по умолчанию устанавливает сервер Firebird - и Guardian, если выбран - для автоматического выполнения как сервисы. Вариант выполнения для обоих может быть изменен, чтобы они выполнялись как приложения.
В Windows 95/98, ME и XP Home Edition Firebird может выполняться только как приложение. Если Firebird выполняется как приложение, на панели задач появляется соответствующая иконка. Некоторые задачи администрирования могут быть выполнены вручную при щелчке правой кнопкой мыши на этой иконке.
Выполнение Firebird как сервиса в Windows NT, 2000 и XP
Если данный компьютер используется как сервер БД, то вам настоятельно рекомендуется выполнять сервер Firebird как сервис.
! ! !
ПРИМЕЧАНИЕ. Пользователи, выполняющие миграцию с InterBase 6.0 или более раннего, должны обратить внимание, что не требуется выполнения Firebird как приложения на хост-машинах SMP, чтобы установить наличие только одного процессора. Опция сервиса Firebird по использованию количества процессоров содержится в файле конфигурации. Более подробную информацию см. в разд. "Файл конфигурации Firebird" главы 36.
. ! .
Запуск и остановка сервиса вручную
Для остановки сервиса вручную откройте окно командной строки и введите следующую команду:
NET STOP FirebirdServer
Дня старта или рестарта сервера вручную введите команду:
NET START FirebirdServer
! ! !
ВНИМАНИЕ! Поскольку команды NET возвращают сообщения в окно командной строки, не пытайтесь запустить их в окне Выполнить (Run) через кнопку Пуск (Start).
. ! .
Использование утилиты instsvc
Альтернативный, "родной" для Firebird способ запуска и остановки сервисов Firebird и Guardian - использование утилиты instsvc.exe, которая находится в каталоге \bin в корневом каталоге Firebird. Утилита instsvc.exe применяется системой для запуска сервиса Firebird- и Guardian, если выбран- когда выполняется первоначальная загрузка хост-сервера. Поскольку с самого начала не ожидалось частого использования ее людьми - это команда в стиле DOS, содержащая переключатели.
! ! !
ПРИМЕЧАНИЕ. Firebird 1.5 содержит дополнительный необязательный переключатель для соединения, чтобы позволить скриптам инсталлятора добавить возможность создания "реального пользователя"- подключенного пользователя для установки сервиса при загрузке системы. Это рекомендуется сделать, т. к. скрипты создают пользователя Firebird с ограниченными привилегиями; соответственно устанавливается инсталляция сервиса. (См. разд. "Защита, основанная на платформе" в главе 33.)
. ! .
Останов и рестарт сервиса с использованием instsvc
Откройте окно командной строки и перейдите к каталогу \bin, находящемуся в корневом каталоге установки Firebird. Для останова сервиса Firebird введите:
C:\Program Files\Firebird\Firebird_1_5\bin> instsvc stop
Для старта (рестарта) сервиса Firebird используйте одну командную строку, изменив, при необходимости, приоритет процесса:
C:\Program Files\Firebird\Firebird_1_5\bin> instsvc start
[-boostpriority | -regularpriority]
! ! !
ПРИМЕЧАНИЕ. Эти команды не выполняют, соответственно, деинсталляцию и инсталляцию сервиса.
. ! .
Апплеты Firebird Manager
Когда Firebird выполняется как сервис, небольшое количество административных задач, включая останов и рестарт, может быть решено с использованием апплета Firebird Manager на Панели управления. Самый простой апплет инсталлируется при установке Firebird. Более сложные апплеты, включая версии языков, можно загрузить из Firebird CVS с сайта SourceForge или с различных сайтов, связанных с Firebird.
Выполнение Firebird как приложения на платформах Windows
Если сервер Firebird выполняется как приложение, вы должны увидеть иконку в системной области на серверной машине, как показано на рис. 4.1. Вид иконки в системной области зависит от того, запущен ли только сервер, или вы управляете его выполнением с помощью Guardian. Рекомендуется использовать Guardian при выполнении Суперсервера как приложения и исключить его при выполнении Классического сервера.

Рис. 4.1. Иконка на системной панели
Вы не увидите иконку, если сервер не был запущен (в случае Суперсервера) или не был инициализирован (в случае Классического сервера). Пока вы не установите режим автоматического запуска сервера, вам будет нужно стартовать или инициализировать его вручную.
Запуск сервера как приложения вручную
Если Суперсервер не запущен, или Классический сервер не инициализирован, он может быть запущен вручную при выборе в меню Firebird - Пуск | Все программы | Firebird (Start | Programs | Firebird).
Альтернативно можно стартовать сервер или Guardian из командной строки. Вызовите окно командной строки и перейдите к каталогу \bin в каталоге инсталляции Firebird. Выполните следующие действия в соответствии с тем, собираетесь ли вы использовать Guardian или будете запускать сервер без возможности автоматического рестарта.
Суперсервер
Программа Guardian называется fbguard.exe в Firebird 1.5 и idguard.exe в более ранних версиях. Используйте следующую команду для старта Guardian:
fbguard.exe -a
ibguard.exe -а /* для версии 1.0.x */
Guardian размещает свою иконку на системной панели и автоматически стартует Суперсервер.
Имя программы сервера для Суперсервера fbserver.exe (ibserver.exe в Firebird l.O.x). Для запуска Суперсервера напрямую, минуя защиту Guardian, используйте команду:
fbserver.exe -a
ibserver.exe -а /* для версии 1.0.x */
Сервер стартует и размещает свою собственную иконку на системной панели.
Классический сервер
! ! !
ПРИМЕЧАНИЕ. Этот текст относится к Firebird 1.5 и следующим. Классический сервер для Windows не поддерживается в более ранних версиях.
. ! .
Основное преимущество выполнения Классического сервера в Windows - его возможность использовать мультипроцессорные системы. Эта функция недоступна в случае Суперсервера для многих систем SMP. Тем не менее, поскольку использование памяти Классическим сервером находится в прямой зависимости от количества одновременных подключений, может оказаться невозможным устанавливать систему на сайтах, где ресурсы сервера не обеспечивают поддержки большого количества пользователей в системе.
Процесс, который является "ушами" для запросов клиентов на соединение с Классическим сервером, является начальным экземпляром программы fb_inet_server.exe. Если начальный экземпляр fb_inet_server.exe не запущен, то не будет возможно соединение клиент-сервер; при попытке соединения вы получите сообщение об ошибке "Unable to connect to the server. Database cannot be found" (Невозможно соединиться с сервером. База данных не может быть найдена).
Когда клиенты соединяются с базой данных, для каждого клиентского соединения запускается один экземпляр fb_inet_server.exe (1.2 Мбайт) и, если сконфигурировано, один экземпляр Guardian на все экземпляры fb_inet_server.exe. Для каждого соединения выполняется собственное выделение кэш-памяти.
Классический сервер и Guardian
Случайно или умышленно, инсталлятор Firebird 1.5.0 имеет небольшую, но приводящую в замешательство аномалию. Если вы не отметите в процессе инсталляции режим Use Guardian (Использовать Guardian), инсталлятор поместит версию для Суперсервера программы Guardian в каталог \bin, и он никогда не будет работать с Классическим сервером. Если вы отметите этот режим, то в процессе инсталляции получите сообщение об ошибке, однако инсталлированная версия Guardian будет прекрасно работать с Классическим сервером. Вы можете проверить, правильная ли у вас версия, попытавшись запустить Guardian. Если вы увидите диалоговое окно сообщения об ошибке, содержащее слово "fbserver", значит, вы не выбрали поддержку Guardian в процессе инсталляции.
В любом случае Guardian является лишним для Классического сервера. Вы ничего не потеряете, если не будете его инсталлировать. Я рекомендую игнорировать Guardian для Классического сервера.
Для запуска начального экземпляра Классического сервера как приложения вручную вызовите окно командной строки, перейдите в каталог \bin и наберите:
fb_inet_server.exe -a
Иконка сервера должна появиться на системной панели. Ваш сервер теперь готов к получению запросов на соединение.
Вы можете альтернативно выбрать режим Use Guardian в процессе инсталляции. Вы также можете стартовать Guardian из того же каталога:
fbguard.exe -с -a
В этом случае иконка Guardian появится на системной панели, однако она не может быть использована для отмены инициализации сервера (см. ранее в разд. "Классический сервер" замечание о Классическом сервере).
Останов сервера
Останов сервера- операция, которая по-разному воздействует на Суперсервер и Классический сервер.
Суперсервер
Щелкните правой кнопкой мыши по иконке Guardian или сервера и выберите в контекстном меню Shutdown (Остановить). Если выполняется Guardian, то сначала он остановит сервер, а затем закроется сам. Подключенные в этот момент пользователи потеряют всю неподтвержденную работу.
Классический сервер
В большинстве случаев нет необходимости "останавливать" Классический сервер. Выбор варианта Shutdown в контекстном меню иконки сервера предотвратит новые соединения с сервером, но это не будет воздействовать на подключенные процессы.
! ! !
ПРИМЕЧАНИЕ. Щелчок мышью по варианту Shutdown в контекстном меню Guardian ничего не выполняет.
. ! .
Очень редко бывает нужным (если вообще бывает) останавливать Классический сервер вручную, поскольку закрытие клиентского соединения завершает этот процесс чисто и корректно. Единственный способ остановить Классический сервер, который выполняется как приложение, - применение "грубой силы", через Диспетчер задач.
Алиасы базы данных
Firebird 1.5 ввел концепцию алиасов базы данных не только для того, чтобы облегчить жизнь уставших от клавиатуры разработчиков, но и для того, чтобы улучшить переносимость приложений, а также чтобы усилить контроль над внутренним и внешним доступом к файлу базы данных.
aliases.conf
Средство алиасов включает файл конфигурации aliases.conf. Он находится в корневом каталоге вашей инсталляции сервера и не должен перемещаться оттуда.
Переносимость
До реализации 1.5 все клиентские приложения соединялись с сервером, используя строку соединения, которая включала абсолютный путь к серверу. Формат абсолютного пути меняется в зависимости от того, выполняется ли сервер под Windows или на POSlX-совместимой платформе (Linux, UNIX и т.д.), а для серверов под Windows еще и от того, какой вид сетевого соединения используют клиенты - TCP/IP или NetBEUI.
Предположим, у вашего сервера имя hotchicken. Если сервер выполняется на POSIX- совместимой платформе; клиенты TCP/IP будут соединяться с базами данных, используя строку соединения следующего формата:
hotchicken:/opt/databases/Employee.fdb
Если же сервер работает под Windows, клиенты TCP/IP должны соединяться, используя другой формат пути:
hotchicken:D:\databases\Employee.fdb
Средства алиасов базы данных делают эту разницу для клиентов TCP/IP прозрачной. Абсолютный путь строки соединения помещается в файл алиасов, связывая этот путь с простым именем алиаса. Например, в файле aliases.conf для сервера под Linux наш пример может быть сохранен как
dbl = /opt/databases/Employee.fdb
Для сервера в Windows, инсталлированного для клиентов TCP/IP, это может быть
dbl = D:\databases\Employee.fdb
Независимо от того, где установлен сервер - под Windows или POSIX - строка соединения для клиентов становится одинаковой:
hotchicken:dbl
Тем не менее это средство не является столь изящным, если вы хотите сделать строку соединения вашего приложения прозрачной как для соединений TCP/IP, так и NetBEUI. Нотация UNC для сервера под Windows для клиентов NetBEUI предполагает совместимость, однако если алиас базы данных идентичен, то серверная часть не является переносимой:
\\hotchicken\dbl в сравнении с:
hotchi cken:dbl
Управление доступом
Основное преимущество средства алиасов в том, что оно может быть использовано в комбинации с параметром DatabaseAccess = NONE из файла firebird.conf для ограничения доступа к файлам баз данных - доступ разрешен только к файлам, указанным в aliases.conf.
Алиасы баз данных появились в Firebird 1.5. Для их использования отредактируйте файл aliases.conf в корневом каталоге инсталляции Firebird, используя текстовый редактор, такой как Блокнот (в Windows) или V1 (Linux).
Структура файла aliases.conf
Инсталлированный файл aliases.conf выглядит приблизительно таким образом:
#
# List of known database aliases
# ---------------------------------------------
#
# Examples:
#
# dummy = c:\data\dummy.fdb
#
Как и во всех файлах конфигурации Firebird, символ # является маркером комментариев. Для конфигурирования алиаса просто удалите символ # и замените строку dummy на соответствующий путь к базе данных:
# fbdbl и aliases.conf находится на сервере Windows:
fbdbl = c:\Firebirdl5\sample\Employee.fdb
# fbdb2 и aliases.conf находится на сервере Linux
fbdb2 = /opt/databases/killergames.fdb
#
При каждом запросе на соединение, содержащем путь, заданный в формате алиаса, сервер обращается к файлу aliases.conf. Вы можете редактировать aliases.conf и когда сервер выполняется. Изменения не будут влиять на текущие соединения, но новые соединения будут использовать новые или измененные алиасы.
Соединение с использованием алиаса пути к базе данных
Для соединений TCP/IP, использующих предыдущий пример aliases.conf, измененная строка соединения в вашем приложении будет иметь следующий формат:
Имя_сервера:имя_алиаса
Например,
hotchicken:fbdb2
Для соединений Windows Named Pipes строка выглядит следующим образом:
\\hotchicken\fbdb2
Для локального соединения просто используйте собственный алиас.
Администрирование баз данных
Множество прекрасных графических инструментов - свободно распространяемых и коммерческих- доступны для администрирования баз данных Firebird. Информацию о подобных предложениях см. в приложении 5. Обновляемый каталог поддерживается на страницах Contributed Downloads на http://www.ibphoenix.com.
Firebird поставляется с набором инструментов командной строки для сервера и администрирования баз данных. Обычно они работают одинаково в Linux/UNIX и в командной строке MS-DOS. Помните, что в Linux/UNIX команды, параметры и переключатели являются чувствительными к регистру. В Windows - нет.
Интерактивный инструмент запросов isql упомянут в этой главе и полностью документируется в главе 37. Другие инструменты командной строки описываются в следующих разделах.
fbmgr/ibmgr
fbmgr/ibmgr является командой и интерфейсом командной строки для демона Суперсервера в Linux для запуска и останова Суперсервера Firebird в Linux. Скрипт командной строки fbmgr (ibmgr в версии 1.0.x) предоставляет интерфейс для выполняемого модуля сервера fbmgr.bin (ibmgr.bin в версии 1.0.x). Детальное описание представлено в этой главе.
instsvc.exe
Это интерфейс командной строки сервиса Суперсервера на платформах Windows NT для инсталляции, запуска и останова Суперсервера Firebird в Windows. Детальное описание представлено в этой главе.
gbak
Эта утилита предназначена для резервного копирования и восстановления баз данных. Поскольку она работает на уровне структур и форматов данных, gbak является единственной корректной утилитой для копирования. Она также обнаруживает разрушения базы данных, освобождает дисковое пространство, появившееся в результате удалений, разрешает незавершенные транзакции, позволяет разделять базы данных на несколько файлов. Она также используется для создания переносимой копии с целью восстановления вашей базы данных на другой аппаратной платформе или для обновления ODS (On-Disk Structure) вашей базы данных.
! ! !
ВНИМАНИЕ! Никогда не используйте утилиты копирования файлов типа tar/gzip, WinZip, Microsoft Backup, средства копирования файловой системы или утилиты сторонних разработчиков для копирования и переноса баз данных, если сервер работает или у вас нет твердой уверенности, что база данных не повреждена. Базы данных, которые переносятся как копии файлов, будут содержать неубранный мусор.
. ! .
Подробности использования gbak см. в главе 38.
gsec
Этот инструмент поддержки списка пользователей и их паролей является интерфейсом командной строки для базы данных security.fdb; он управляет записями пользователей на сервере Firebird. Подробности использования gsec см. в главе 34.
gfix
Это набор общих вспомогательных утилит для изменения свойств баз данных, устранения небольших повреждений базы данных, выполнения различных задач чистки и т.д. Утилита также предоставляет средство администратора для отключения конкретных баз данных до завершения работы сервера. Она может быть использована вместе с утилитой gbak для восстановления некоторых типов нарушений в базе данных (см. разд. "Ремонт базы данных" приложения 4).
Подробности использования gfix см. в главе 39.
gstat
Этот инструмент получения статистики собирает и отображает статистические сведения по индексам и данным базы данных. Подробную информацию об использовании gstat см. в разд. "Темы оптимизации" главы 18.
fb_lock_print
Эта утилита формирует статистические данные файла блокировок, который поддерживается в Firebird для управления последовательностью изменений базы данных несколькими транзакциями. Она может быть полезным инструментом анализа проблем взаимной блокировки.
Подробности использования fb_lock_print см. в главе 40.
Введение в isql
Утилита командной строки isql (Interactive SQL) объединяет инструменты и техники использования SQL для поддержки объектов базы данных, управления транзакциями, отображения метаданных и обработки скриптов определения базы данных. Интерфейс командной строки доступен на всех платформах. Настоящее краткое введение даст вам возможность начать работу по подключению к базе данных и созданию вашей первой базы данных.
Запуск isql
Есть несколько различных способов соединения с базой данных при использовании isql. Один способ- стартовать утилиту из командной строки в интерактивном режиме. Для начала в окне командной строки перейдите к каталогу /bin корневого каталога инсталляции Firebird, где инсталлирована программа isql, и запустите isql следующим образом.
Для сервера POSIX:
[chick@hotchicken]# ./isql <нажмите Return/Enter> Для сервера Windows:
C:\Program Files\Firebird\Firebird_1_5\bin>isql <нажмите Return/Entei>
Утилита выведет следующее сообщение:
Use CONNECT or CREATE DATABASE to specify a database (Используйте CONNECT или CREATE DATABASE для указания базы данных)
Использование isql
Соединившись с базой данных, вы можете выполнять запросы к ее данным и метаданным, используя обычные операторы динамического SQL, а также специальное подмножество операторов, которые работают только в окружении isql.
Оператор CONNECT
Оператор CONNECT является стандартным оператором SQL для соединения с базой данных. Здесь предполагается, что вы пока не изменили пароль у пользователя SYSDBA. Если вы это уже сделали (что рекомендуется), то используйте ваш пароль пользователя SYSDBA.
Каждый из операторов командной строки в следующих примерах является одним оператором.
Для соединения с сервером Linux/UNIX введите:
SQL> CONNECT 'hotchicken:/opt/firebird/examples/employee.fdb' user 'sysdba' password 'masterkey';
Для соединения с сервером Windows:
SQL> CONNECT
'WINSERVER:С:\Program Files\Firebird\Firebird_1_5\examples\employee.fdb'
user 'SYSDBA' password 'masterkey';
! ! !
ПРИМЕЧАНИЕ. В Классическом сервере под Linux и в Суперсервере под Windows существует возможность соединения с базой данных локально, например:
CONNECT '/opt/firebird/examples/employee.fdb' - Linux Классический сервер.
CONNECT 'c:\Program Files\Firebird\Firebird_1_5\examples\employee.fdb' - Windows Суперсервер.
. ! .
Убедитесь, что вы заканчиваете каждый оператор SQL символом точка с запятой (;). Если вы забудете это сделать, то увидите следующее в подсказке продолжения утилиты isql:
CON>
Когда вы увидите подсказку продолжения, просто введите точку с запятой и нажмите клавишу <Enter/Return>. В этот момент isql проинформирует вас, что вы соединены:
DATABASE 'hotchicken:/opt/firebird/examples/employee.fdb', User: sysdba SQL>
Если сервер работает под Windows, вы увидите следующее:
DATABASE "WINSERVER:С:\Program Files\Firebird\Firebird_1_5\examples\employee.fdb",
User: sysdba
SQL>
Продолжим играть с базой данных employee.fdb. Вы можете использовать isql для запроса данных, получения информации о метаданных, создания объектов базы данных, выполнения скриптов определения данных и многого другого.
Чтобы вернуться к подсказке командной строки, введите
SQL> QUIT;
Создание базы данных с использованием isql
Существует более одного способа создания базы данных с использованием isql. Здесь приведен один простой способ интерактивного создания базы данных - тем не менее для работы с серьезной базой данных вы должны создавать и поддерживать объекты метаданных, используя скрипты определения данных (они также называются скриптами DDL, скриптами SQL, скриптами метаданных и скриптами схемы). Эта тема детально рассматривается в разд. "Скрипты схемы"главы 14.
Если сейчас вы соединены с базой данных через утилиту isql, отсоединитесь с помощью следующей команды:
SQL> QUIT;
Затем заново стартуйте утилиту без соединения с базой данных. Для сервера Linux:
[chick@hotchicken]# ./isql
Use CONNECT or CREATE DATABASE to specify a database
Для сервера Windows:
С:\Program Files\Firebird\Firebird_1_5\bin>isql Use CONNECT or CREATE DATABASE to specify a database
Оператор CREATE DATABASE
Теперь вы можете создать вашу новую базу данных интерактивно. Предположим, что вы хотите создать базу данных test.fdb на сервере Windows и сохранить ее в каталоге data на диске D:
SQL> CREATE DATABASE 'D:\data\test.fdb' user 'SYSDBA' password 'masterkey';
База данных будет создана, и через некоторое время снова появится подсказка. Теперь вы соединены с новой базой данных и можете продолжать создавать в ней тестовые объекты.
Для проверки того, что база данных действительно существует, введите запрос:
SQL> SELECT * FROM RDB$RELATIONS; <нажмите Enter>
Экран будет заполнен большим количеством данных! Этот запрос выбирает все строки из системной таблицы, в которой Firebird сохраняет метаданные для таблиц. "Пустая" база данных не является пустой - она содержит базу данных, которая будет заполняться метаданными, как только вы начнете в ней создавать объекты.
! ! !
СОВЕТ. Почти все объекты метаданных в базах данных Firebird имеют идентификаторы, начинающиеся с символов "RDB$".
. ! .
Чтобы вернуться назад в подсказку командной строки, введите:
SQL> QUIT;
Полную информации по использованию isql см. в главе 57.
Пора дальше
Часть II рассказывает об архитектуре клиент-сервер. В главе 5 рассматривается терминология и различные модели реализации сетей клиент-сервер. В главах 6 и 7 более подробно рассматриваются серверы и клиенты Firebird соответственно.
ЧАСТЬ II. Клиент-сервер.
ГЛАВА 5. Введение в архитектуру клиент-сервер.
Обычно система клиент-сервер является парой программных модулей, разработанных для связи друг с другом через сеть посредством согласованного протокола. Клиентский модуль отправляет запросы через сеть слушающей программе сервера, а сервер отвечает на запросы.
Например, клиент электронной почты направляет сообщение по сети на почтовый сервер с требованием к серверу перенаправить это сообщение по адресу какого-то сервера. Если запрос соответствует принятому протоколу и адрес назначения является действительным, сервер реагирует, перенаправляя сообщение и возвращая клиенту подтверждение.
Ключевой принцип в том, что задача расщепляется - или распределяется - между двумя программными компонентами, которые выполняются независимо на двух физически разделенных компьютерах. Эта модель даже не требует, чтобы компоненты выполнялись в совместимых операционных или файловых системах. Клиент электронной почты должен быть почтовой клиентской программой, которая выполняется под Windows, Mac или любой другой операционной системой, а почтовый сервер обычно выполняется в системах UNIX или Linux. Клиентская и серверная программы способны успешно взаимодействовать, поскольку они были спроектированы функционально совместимыми.
В системе клиент-серверной базы данных модель идентична. На хост-машине в сети выполняется программа, которая управляет базами данных и клиентскими соединениями - сервер базы данных. Он расположен на узле сети, который известен клиентским программам, выполняющимся в других узлах сети. Сервер слушает запросы из сети от клиентов, которые хотят соединиться с базой данных, а также от других клиентов, которые уже соединены с базами данных.
В примере с электронной почтой протокол коммуникации имеет два уровня. Как и система электронной почты, система баз данных клиент-сервер использует стандартный сетевой протокол и перекрывает его другими протоколами специального назначения. Для электронной почты перекрытие (overlay) будет POP3, IMAP и SMTP; для системы базы данных это протоколы соединения с базой данных, безопасности, переноса данных и языка.
Базы данных клиент-сервер в сравнении с файл-серверами
Системы совместного доступа к файлам являются другим примером систем клиент- сервер. Файловые серверы и серверы файловых систем обслуживают запросы клиентов к файлам и файловым системам иногда весьма запутанными способами. Примеры этому- сервисы NFS, Windows Named Pipes и NetBEUI. Файловый сервер предоставляет клиентам доступ к файлам так, что клиентская машина может читать и писать в памяти сервера, как если бы операции ввода/вывода проводились в ее собственной локальной системе памяти.
Настольная система управления данными имеет недостаток - собственная внутренняя реализация управления запросами ввода/вывода, поступающими из сети, сама является клиентом файлового сервера. Когда сервер получает запросы на ввод/вывод от своих клиентов, он полагается на средства управления операционной системы для обеспечения центрального блокирования и организации очереди, необходимые для управления конфликтными запросами.
Такие файл-серверные СУБД не являются клиент-серверными системами баз данных. Программное обеспечение клиента и СУБД- клиенты сервера совместного доступа к файлам. Хотя входной и часто выходной потоки являются до известной степени управляемыми программой СУБД, физическая целостность данных находится под управлением сервисов файловой системы.
В базах данных клиент-сервер клиенты - даже если они расположены на той же машине, что и сервер, - никогда не обращаются к физическим данным, кроме как отправляя сообщения серверу с указанием того, что они хотят сделать. Сервер самостоятельно обрабатывает эти сообщения и выполняет запросы, управляя обращениями к дискам и правами доступа. Сервер также выполняет все физические изменения метаданных и структур хранения данных, используя физическую структуру на диске (On-Disk Structure, ODS), которая независима от программ ввода/вывода файловой системы хоста.
Характеристики СУБД клиент-сервер
Масштабируемость
Появление сравнительно недорогих компьютерных сетей между 1980-ми и 1990-ми годами вызвало увеличенный спрос на масштабируемые информационные системы с дружественным пользователю интерфейсом. Программное обеспечение электронных таблиц и настольных баз данных, а также графический интерфейс дали пользователям, не являющимся специалистами, понимание мощности использования компьютеров. Когда совместное использование файлов в сетях и различного вида программного обеспечения стало стандартной практикой на больших предприятиях, заказчики запросили большего. Настольные и основанные на локальных сетях (Local Area Network, LAN ) системы управления данными также стали использоваться и в весьма малых бизнесах. Сегодня практически немыслимо проектировать информационную систему предприятия для монолитной модели на мэйнфрейме с текстовым терминалом.
Масштабируемость оценивается в двух размерностях: горизонтальной и вертикальной. Горизонтальная масштабируемость - способность системы добавлять дополнительных пользователей без воздействия на возможности программного обеспечения или используемые ресурсы. Вертикальная масштабируемость связана с тем, что будет сделано для переноса системы на более простые или более сложные платформы и конфигурации аппаратных средств в ответ на изменение требований нагрузки и доступа. Диапазон меняется от нижнего уровня - например, сделать систему доступной для пользователей мобильных устройств - до верхнего уровня, который не имеет концептуальных ограничений.
Функциональная совместимость
Архитектура клиент-сервер для систем баз данных развивалась как ответ на уязвимость, низкий уровень нагрузки и ограничения по скорости модели базы данных совместного доступа к файлам в компьютерных сетях при потребности увеличения количества пользователей. Острая необходимость в этом совпала с параллельной разработкой языка SQL. Оба направления отчасти были стратегиями нейтрализации зависимости аппаратного обеспечения мэйнфреймов и программного обеспечения, которая преобладала в 1980-x годах. Настоящая архитектура баз данных клиент- сервер является неоднородной и функционально совместимой (интероперабельной) - она не ограничивается одной платформой аппаратных средств или одной операционной системой. Эта модель позволяет клиентам и серверам независимо размещаться в узлах сети на аппаратных средствах и в операционных системах, соответствующих их функциям. Приложения клиентов могут одновременно связываться с множеством серверов, выполняющихся в различных операционных системах.
Защита данных
Огромный недостаток систем файл-серверных баз данных- незащищенность данных от ошибок, повреждений и разрушения по причине их физической доступности при совместном использовании файлов клиентами и установления над ними прямого контроля со стороны человека. В модели базы данных клиент-сервер приложения клиентов никогда не работают с физическими данными. Когда клиентский запрос изменяет состояние данных, сервер подвергает запрос строгой проверке. Он отвергает запросы, которые не соответствуют внутренним правилам или правилам метаданных. Когда выполняется успешный запрос на запись данных, фактическое изменение состояния базы данных полностью выполняется кодом, находящимся в модуле сервера, а структура диска находится под контролем сервера.
Распределение функций
Модель клиент-сервер позволяет отдельным фрагментам работы системы быть эффективно распределенными между компонентами аппаратуры и программного обеспечения. Сервер базы данных заботится о хранении, управлении и поиске данных, а через хранимые процедуры, триггеры и другие вызываемые процессы он обеспечивает большое количество возможностей обработки данных системы. Процесс клиента является "острием" приложений, транслируя их запросы в структуры коммуникации, которые формируют протоколы для доступа к базам данных и к данным.
Приложения являются динамическим уровнем в этой модели. Они обеспечивают потенциально бесконечное множество интерфейсов, через которые люди, машины и внешние программные процессы взаимодействуют с клиентским процессом. В этой части клиентский модуль представляется приложениям через понятный, предпочтительно стандартизованный, независимый от языка программирования интерфейс прикладного программирования (Application Programming Interface, API).
В некоторых системах приложения могут действовать почти полностью как поставщики информации и приемники ввода, виртуально делегируя все операции манипулирования данными серверу базы данных. Это является идеалом клиент-серверных систем, поскольку локализует задачи, интенсивно использующие центральный процессор, и позволяет приложениям использовать возможности рабочей станции для лучшей реализации интерфейса пользователя.
На другом конце шкалы находятся системы, в которых из-за плохого проектирования или из-за отсутствия функциональной совместимости вся обработка данных виртуально производится на клиентских рабочих станциях. Для таких систем часто бывает характерным плохо выполненный интерфейс пользователя, задержки при синхронизации состояния базы данных и ненадежность взаимодействия с сетью.
Между небесами и адом находятся хорошо выполненные системы баз данных клиент-сервер, которые прекрасно используют возможности обработки на серверах, сохраняя некоторые функции обработки данных на рабочих станциях, когда это оправдано сокращением сетевого трафика или повышением гибкости выполнения задач.
Двухуровневая модель
Рис. 5.1 иллюстрирует классическую двухуровневую модель клиент-сервер. Промежуточный уровень, который может присутствовать или отсутствовать, представляет собой драйвер, такой как ODBC, JDBC, PHP, или компонент доступа к данным, который интегрирован с программным кодом приложения. Возможны и другие уровни на клиентской стороне. Приложения также могут быть написаны с использованием прямого доступа к API без промежуточного уровня.

Рис. 5.1. Двухуровневая модель клиент-сервер
Многоуровневая модель
Увеличение возможностей масштабирования и требования большей функциональной совместимости приводят к модели с большим количеством уровней, как показано на рис. 5.2. Клиентский интерфейс перемещается в центр модели; он объединяется с одним или более уровнями сервера приложений. В этом центральном комплексе будут расположены средства промежуточного уровня и сетевые модули. Уровень приложения становится некоторым видом суперклиента базы данных - иногда обслуживая множество серверов баз данных - и сам становится Proxy-сервером (сервером-посредником) для запросов к базам данных от приложений. Он может быть размещен на том же аппаратном оборудовании, что и сервер базы данных, но также может выполняться и на своем оборудовании.

Рис. 5.2. Многоуровневая модель клиент-сервер
Стандартизация
Признанные стандарты функциональной совместимости аппаратного и программного обеспечения, и особенно языка запросов и описания метаданных, являются характерной чертой систем баз данных клиент-сервер. Развитие систем реляционных баз данных и консолидация стандартов SQL более двух десятилетий было и остается неразделимым. Абстрактная природа хорошо спроектированных систем реляционных баз данных вместе с их относительной нейтральностью по поводу выбора языка приложения для "предварительной обработки" гарантируют, что реляционные СУБД продолжают занимать свое место в качестве предпочтительной архитектуры систем клиент-сервер.
Тем не менее это не отменяет другие архитектуры. Хотя в настоящее время объекты систем баз данных продолжают оставаться тесно связанными с языками приложения, объектно-реляционные архитектуры становятся значительным посягательством на реляционные традиции. Самые последние стандарты SQL представляют некоторые положения по стандартизации объектно-реляционных методов и синтаксиса. Когда люди начинают требовать стандарты для технологий, обычно это хороший индикатор того, что технология может быть востребованной в скором времени.
Проектирование систем клиент-сервер
Факт, что системы клиент-сервер должны быть спроектированы для использования в сетях. Для новичков часто бывает потрясением открытие того, что "молниеносно выполняемая" задача, которая работала в приложении под Paradox или Access, занимает весь день после конвертирования в клиент-серверную реляционную СУБД.
"Что-то не так в Firebird, - говорят они. - Это не может быть код моего приложения - потому что я не изменял ничего! Это не может быть результатом моего проектирования базы данных - потому что то же проектирование было безупречным многие годы!" Знаменитые последние слова.
Основа проектирования клиентов для настольных систем резко отличается от проектирования удаленных клиентов в архитектуре клиент-сервер. Обязательный интерфейс просмотра в настольных системах, где отображаются "200 000 записей за один раз", создал крупную отрасль RAD разработки компонентов DBGrid, связанных с данными (data-aware components). Разработчику никогда не нужно думать о том, какое количество человек в состоянии просмотреть 200 000 записей в день, пусть только одним взглядом!
Эти компоненты в RAD, которые выполнили такую замечательную работу по представлению неограниченного объема данных в настольных системах в небольших контейнерах для произвольного просмотра, не являются дружественным интерфейсом для удаленных клиентов. Если ранее характерная клиентская операция цикла ("начать с первой записи и для каждой записи повторить"), казалась идеальной для обработки данных, которые размещались в памяти как локальные таблицы, то теперь удаленные пользователи клиентских компьютеров требуют принести им голову разработчиков на блюде.
Действительно, общим является то, что на проектирование базы данных наиболее сильно влияет восприятие клиентского интерфейса - "Мне нужна таблица, похожая на эту электронную таблицу!"- а не элегантная мудрость абстрактной модели данных.
Когда интерфейс физически отделен от данных через уровень изоляции транзакции и через сеть с загруженным каналом, то требуется больше размышления. Для выполнения миграции с настольной системы требуется много больше, чем просто преобразования данных. Максимальное преимущество критического пересмотра проектирования для пользователей, целостности базы данных и эффективности выполнения будет весьма оправданной работой.
Абстракция хранимых данных
Даже в современных системах клиент-сервер можно найти слишком много плохо выполняющихся, подверженных ошибкам приложений, которые были "спроектированы" с использованием отчетов и электронных таблиц в качестве основы для проектирования базы данных и пользовательского интерфейса. В итоге существует слишком много общего при переходе от настольных баз данных к Firebird с множеством следующих недружественных для платформ клиент-сервер "возможностей".
* Распространенная избыточность структур, которая перешла от электронных таблиц к базам данных с одними и теми же элементами данных, повторяющихся во многих таблицах.
* Иерархические структуры первичных ключей (нужны во многих настольных системах баз данных для реализации зависимостей), что нарушает уточненную модель ограничений внешнего ключа в зрелых реляционных базах данных.
* Большие составные символьные ключи, составленные из столбцов реальных данных.
* Недостатки нормализации, приводящие к большому количеству записей содержащих много повторяющихся групп и редко требуемой информации.
* Большое количество частично совпадающих друг с другом индексов, не являющихся необходимыми.
Это не говорит о том, что старые настольные системы не были хорошими. Они вполне успешно выполняли свои задачи. Технология клиент-сервер просто очень сильно отличается от "настольных" баз данных. Эта технология меняет масштаб управления информацией с "обратиться к файлу такому-то и выбрать" на "хранить, управлять и манипулировать". Она переносит приложение клиента с роли настольной системы, как главного действующего лица, на роль переносчика сообщений. Эффективные клиентские интерфейсы являются легкими и очень элегантными в том, как они выполняют желания пользователя и выдают ему нужную информацию.
Отбрасывание идеологии электронных таблиц
Общей характеристикой приложений настольных баз данных является то, что они предоставляют интерфейс в виде таблицы: данные представляются в виде строк и столбцов с полосами прокрутки и другими элементами навигации для просмотра с первой строки до последней. Часто эти таблицы представляют собой визуальную структуру, которая в точности воспроизводит структуру метаданных исходных таблиц. Обычная ловушка- импортировать такие таблицы в систему клиент-сервер и считать, что задача миграции выполнена.
Перенос таких старых баз данных в систему клиент-сервер обычно требует большего, чем создание программы конвертирования данных. Выполните ваше конвертирование и будьте готовы рассматривать объекты вашей базы данных как основу для дальнейшей работы. Запланируйте выполнить заново анализ и новое проектирование полученного абстрактного стиля базы данных в структуры, которые будут хорошо работать в новом окружении. В Firebird очень просто создать новые таблицы и записать в них данные. Для хранения используйте простые ключи; преобразовывайте структуры больших таблиц в группу связанных нормализованных отношений; переносите группы повторяющихся столбцов в отдельные таблицы; изменяйте структуры ключей, которые уменьшают уровень зависимостей; устраняйте дублирование данных и т.д.
Если вы находитесь в недоумении по поводу нормализации и выделения главных признаков, посмотрите специальные книги или сайты. Начните работу с небольших моделей данных (подмножество из пяти или шести основных таблиц является идеальным) вместо того, чтобы использовать базу данных из 200 таблиц, как если бы это было единой задачей, которую вы должны решить за один день. Таким образом, конвертирование становится упреждающей практикой самообучения, а быстрое решение трудных задач становится более интуитивным. Например, изучите хранимые процедуры и триггеры и проверьте, что вам известно о написании модулей конвертирования данных.
Таблицы для вывода
Основной частью начального проектирования реляционной базы данных является представление всех любимых отчетов, электронных таблиц и наиболее используемых отображений в виде таблиц базы данных. Все это является выходными данными, которые выбираются с помощью запросов и хранимых процедур.
Пользовательский интерфейс
Клиентские приложения в системе, где информационные сервисы предприятия имеют серверную программу, которая является полнокровной СУБД с мощными возможностями обработки данных, не изменяют вводимые пользователем данные после выполнения синтаксического разбора их исходного вида и упаковывания кода в подготовленные контейнеры - в структуры транспортных функций API. Циклам FOR над сотнями и тысячами строк в клиентском буфере набора данных нет места на клиентском компьютере в системах клиент-сервер.
Разработчик приложения должен постоянно думать о стоимости лишней работы. Передача огромного объема данных по сети для просмотра перегружает сеть и разочаровывает пользователя. Необходимо сосредоточиться на эффективных способах показа информации пользователям и на получении данных от них- инструкции и новые данные, которые люди хотят добавлять. Разработка пользовательского интерфейса должна фокусироваться на быстрых и интуитивно понятных техниках получения вводимых строк и быстрой передачи их на сервер для требуемой обработки.
Разработчики систем клиент-сервер могут научиться многому, просматривая интерфейсы различных сайтов, даже если их приложения не разрабатываются для работы в Интернете, потому что браузер является очень тонким клиентом.
Короткие быстрые запросы держат пользователя в курсе о состоянии базы данных и уменьшают загрузку сети. Эффективные клиенты базы данных предоставляют детализированный интерфейс поиска, а не браузер таблиц, и ограничивают набор строк в количестве не более чем 200.
Модель хранения реляционных данных
Реляционные базы данных используют надежные структуры данных с высоким уровнем абстракции для эффективного получения предсказуемых корректных результатов операций. Полный анализ сущностей и процессов вашей системы является основной деятельностью, таким образом вы приходите к логической модели, которая свободна от избыточности и представляет любое отношение.
Первичный ключ
В процессе логического анализа первичный ключ (primary key) устанавливается для всех сгруппированных данных. Логический первичный ключ помогает определить, какой элемент (или группа элементов) способен однозначно идентифицировать группу связанных данных. Физическое проектирование таблиц будет отображать логическую группировку и уникальность характеристик модели данных, хотя структуры таблиц и ключевые столбцы, созданные в черновом варианте, не часто в точности соответствуют модели. Например, в таблице Employee уникальный ключ состоит из полей имени и фамилии и др. Поскольку составной уникальный ключ в модели данных включает элементы большого размера, которые могут приводить человека к ошибкам, в таблицу должен быть добавлен столбец в качестве суррогатного первичного ключа.
Реляционные СУБД предполагают, что каждая строка в каждой таблице имеет уникальный столбец для однозначной идентификации строк, для проверки соответствия условиям поиска и для связи элементов данных и потоков[7].
Отношения
Отношения в модели представлены ключами в таблицах. Теоретически каждое отношение в модели должно быть реализовано в виде пары связанных между собой ключей. Когда ключи связаны между собой через ограничение внешнего ключа, таблицы становятся связанными в сеть зависимостей, которые отображают взаимодействие групп данных независимо от контекста. Основные правила логики сервера ссылаются на эти зависимости для поддержания ссылочной целостности базы данных. Стандарты SQL формулируют правила, описывая как зависимости целостности должны работать. От разработчика реляционной СУБД зависит решение, каким образом будут реализовываться и поддерживаться эти зависимости.
В зависимости от реализации конкретного сервера могут быть технические причины для отмены некоторых ограничений ключа без формального объявления и реализации таких ограничений альтернативными способами. Например, большинство реляционных СУБД обязательно требуют неуникальных индексов для элементов колонок внешнего ключа. При некоторых условиях распределения данных могут быть нежелательны индексы для таких колонок, если может быть использован другой способ защиты целостности.
Реляционная СУБД может реализовать отношения, которые не используют ключей. Например, она может получать наборы данных, основываясь на сравнении значений или на выражениях, включающих значения различных столбцов одной таблицы или столбцов из нескольких таблиц.
Язык запросов SQL, структуры хранимых данных и логические умения разработчика приложения объединяются, чтобы уменьшить сетевой трафик в системе клиент- сервер и отобразить точные результаты пользовательских запросов.
"Руки прочь" от доступа к данным
Реляционные СУБД, разработанные для архитектуры клиент-сервер, не предоставляют пользователям прямой доступ к данным. Когда пользовательское приложение хочет выполнить операции над набором данных, оно сообщает клиентскому модулю, чего оно хочет, и клиентский модуль "договаривается" с сервером об удовлетворении этой потребности. Если запрос отвергается по какой-то причине, то именно клиентский модуль сообщает "плохую новость" приложению.
Если приложение запрашивает набор данных для чтения, то клиентский модуль берет результат выполнения сервером операции и передает его приложению. Данные, видимые приложению, являются образом состояния исходных данных в базе данных на момент начала "переговоров" между клиентом и сервером. Этот образ, который видят пользователи, отключен - или изолирован - от базы данных. "Момент изоляции" может не совпадать с тем моментом, когда сервер получает запрос. В окружении клиент-сервер, где предполагается, что более чем один пользователь читает и пишет данные, каждый запрос имеет контекст.
Множество пользователей и параллельность
СУБД разработана для того, чтобы обеспечить работу множества пользователей с образами хранимых данных и, чтобы можно было использовать изменяющие запросы, которые могут влиять на работу других пользователей. В этой ситуации нужны способы управления параллельностью. Параллельность - это набор условий, в которых предусмотрена ситуация, когда запросы двух или более пользователей изменяют одну и ту же строку таблицы в одно и то же время (т. е. параллельно). Развитые СУБД, такие как Firebird, реализуют некую схему, при которой каждый запрос выполняется в параллельном контексте. Стандартный термин для такого параллельного контекста транзакция- не путайте с "бизнес-транзакциями", которые часто реализуются в приложениях баз данных.
Транзакции
Для бывших пользователей настольных баз данных транзакция является одной из наиболее запутанных абстракций в реляционных СУБД архитектуры клиент-сервер. В настольных базах данных и программах электронных таблиц это понятие используется для гарантии того, что если пользователь щелкнет по кнопке Сохранить и кнопка станет серого цвета, то значит операция выполнена. Также факт, что как только до разработчика дойдет, что такое транзакция, они склоняются к отказу от "идеологии электронных таблиц", которая была у них все те годы, когда старая модель баз данных казалась совершенной.
В Firebird все общение между клиентом и сервером происходит в контексте транзакций. Даже чтение небольшого количества строк таблицы не может быть выполнено, если не запущена транзакция. Транзакция стартует, когда приложение запрашивает об этом клиента. С момента, когда транзакция начинается и пока она не закончится - опять же по запросу приложения, - общение клиента и сервера открыто, приложение может просить клиента выполнять запросы. В этот период выполняются операции по изменению состояния базы данных, и осуществляется запись на диск. Однако они не изменяют состояния базы данных и являются обратимыми.
Транзакции завершаются, когда приложение обращается к клиенту, чтобы он запросил сервер подтвердить (commit) всю работу, выполненную с момента старта транзакции (даже если ничего не выполнялось, кроме чтения), или в случае ошибок отменить всю работу (rollback). Правило атомарности гласит: "Если одно из изменений оканчивается неудачей и требует отмены по причине невозможности подтверждения, то все ожидающие завершения изменения в этой транзакции также должны быть отменены". Отмена включает любые изменения, которые были сделаны триггерами и хранимыми процедурами в процессе выполнения этой транзакции.
! ! !
СОВЕТ. Для разработчика приложения очень полезно делать видимой каждую единицу работы с базой данных в виде задачи или группы задач, которые были завершены в контексте транзакции. Условия выполнения транзакций могут быть сконфигурированы различными способами. Например, один уровень изоляции выдаст иной вид сообщения о конфликте, чем другой уровень. Большинство эффективных программ приложений знает об этих вариантах и учитывает их в такой мере, что контекст каждой транзакции распространяется до рамок рабочей области приложения, окружающей действительную физическую транзакцию.
. ! .
Транзакции настолько важны в системах клиент-сервер, что в настоящем руководстве им посвящены три главы. 25, 26 и 27.
Пора дальше
Далее в главе 6 мы рассмотрим, как работают различные модели сервера Firebird и системы управления масштабированием от однопользовательской автономной системы до смешанных сетей с сотнями одновременно работающих пользователей.
ГЛАВА 6. Сервер Firebird.
Сервер Firebird - это программа, которая выполняется на узле хоста в сети, и слушает клиентов с порта коммуникации. Она обслуживает запросы множества клиентов к множеству баз данных. Суперсервер (Superserver) является многопоточным процессом, который запускает новый поток для каждого соединившегося клиента. В модели Классического сервера (Classic server) новый процесс запускается для каждого соединения.
Серверы Firebird могут выполняться почти на любом оборудовании персональных компьютеров и принимать клиентские соединения от приложений, выполняющихся в совершенно других операционных системах. С одной стороны, небольшой и легкий дистрибутив сервера может быть установлен на устаревшем оборудовании, даже для старых процессоров Pentium в операционной системе Windows 95 или в минимальных системах Linux. С другой стороны, серверы Firebird выполняются на распределенном оборудовании, управляя базами данных размерами в терабайты[8].
Конечно, нереально планировать информационную систему предприятия, выполняющуюся под Windows 95. Тем не менее проще простого запустить минимально сконфигурированный сервер, а по необходимости в дальнейшем масштабировать его как по вертикали, так и по горизонтали. Серверы Firebird существуют в двух вариантах - Суперсервер и Классический сервер для удовлетворения различных потребностей пользователя. Оба могут быть масштабированы как вверх, так и вниз для обработки от самых простых до наиболее сложных конфигураций.
Программное обеспечение сервера Firebird эффективно использует системные ресурсы хост-компьютера. Суперсервер использует приблизительно 2 Мбайта памяти. Каждое клиентское соединение Суперсервера добавляет примерно 115 Кбайт к используемой сервером памяти - меньше или больше в зависимости от характеристик приложений клиента и способа проектирования базы данных. Каждое соединение Классического сервера запускает собственный серверный процесс, требующий приблизительно 2 Мбайта памяти.
Требуемая серверу кэш-память зависит от конфигурации и от выбранного варианта Firebird. Обычная конфигурация кэша для сети при одновременно работающих 20-40 пользователях, скорее всего, будет 16, 32 или 64 Мбайта для Суперсервера, использующего общий пул для всех соединений. Для каждого Классического сервера назначается статический кэш с размером по умолчанию 75 Кбайт. Серверы версии 1.5 также будут использовать RAM для ускорения сортировки, если память доступна. Требуемое дисковое пространство для минимальной инсталляции Firebird составляет от 9 до 12 Мбайт в зависимости от платформы. Дополнительное дисковое пространство требуется для временного хранения данных в процессе выполнения операций, дополнительная память также требуется для кэширования страниц базы данных. Эта память конфигурируется в соответствии с запросами обработки данных и вероятного объема и типа обрабатываемых данных.
Роль сервера
Работа сервера включает:
* управление хранением данных базы данных и выделение дискового пространства;
* управление всеми транзакциями, запущенными клиентами, гарантирование, что каждая получит и сохранит непротиворечивый образ постоянно хранимых данных, требуемых клиенту;
* управление подтверждением транзакций, данными и сборкой мусора;
* поддержку блокировок и статистики для каждой базы данных;
* обработку запросов на добавление, изменение или удаление строк и поддержку текущих и устаревших версий записей;
* поддержку метаданных каждой базы данных и обслуживание запросов клиентов по созданию новых баз данных и объектов базы данных, изменение структур, проверку и компиляцию хранимых процедур и триггеров;
* обслуживание клиентских запросов на получение результирующих данных и выполнение хранимых процедур;
* маршрутизацию сообщений для клиентов;
* поддержку кэшированных данных для хранения часто используемых наборов данных и индексов;
* отдельную поддержку безопасности баз данных для проверки доступа пользователей.
Платформы для операционных систем
Платформы сервера Firebird включают следующие операционные системы, но не ограничиваются только ими.
* Linux, FreeBSD и другие варианты ОС UNIX.
* Платформы Microsoft Windows, поддерживающие сервисы: NT 4, Windows 2000 (сервер или рабочая станция), XP Professional и Server 2003. Операционные системы Windows 9х, ME и XP Home могут быть использованы как сервер, который прослушивает порты протокола TCP, но не Named Pipes (NetBEUI).
* Mac OS X (Darwin).
* Sun Solaris SPARC и Intel.
* HP-UX.
Примеры топологий
Сервер Firebird существует в нескольких "моделях", которые обеспечивают множество режимов масштабирования - от однопользовательского варианта, независимой настольной системы, до мощного сервера.
Двухуровневая архитектура клиент-сервер
На рис. 6.1 изображена гибкая система, где множество серверов Firebird выполняются на платформах с различными операционными и файловыми системами. Здесь присутствует смесь рабочих станций, на которых выполняются удаленные клиенты, каждый на своей платформе. Здесь же существуют шлюзы для других сетей. Сервер Windows обслуживает повседневную обработку деловых данных и располагает большим объемом дискового пространства. Для клиентов Windows возможно общение с сервером Windows с использованием протокола Named Pipes - обычно называемым NetBEUI, - хотя такой протокол должен быть заменен по возможности на TCP/IP.
Сервер Linux может обслуживать системы сетевой защиты, шлюзы, вспомогательные базы данных и другие системы клиент-сервер, включая электронную почту, Интернет и сервисы файлов, такие как NFS и Samba.

Рис. 6.1. Двухуровневая топология клиент-сервер в Firebird
Неоднородная сеть обслуживания баз данных является общей средой для Firebird. В небольших сетях с единственным сервером, где местный администратор может не входить в штат сотрудников, существует тенденция переносить сервер базы данных с одного узкоспециализированного хоста, работающего под Windows, на дешевую машину Linux с хорошей оперативной памятью и быстрым доступом к данным. Поддержка недорогая, что делает возможным передачу большинства административных функций другим организациям. Системы, подобные этой, могут расти без каких-либо сложностей.
Однопользовательская модель
Все серверы Firebird могут работать с локальными клиентами. Протоколы соединения и режимы меняются в соответствии с выбранной вами моделью сервера. Однопользовательские инсталляции делятся на две категории:
* Независимый сервер. В этой модели сервер инсталлируется и запускается на машине. Локальные соединения осуществляются с использованием протоколов в стиле сетевых, используя обычные клиентские библиотеки.
* Встраиваемый сервер. Никакой сервер не инсталлируется. Сервер находится в DLL, похожей на клиентскую библиотеку, и загружается приложением. Приложение вместе с DLL сервера выполняется как единственный процесс на одно соединение. Когда приложение завершается, то фактически завершается и работа сервера.
Клиент-сервер
В автономной модели клиент-сервер локализованное клиентское подключение к выполняющемуся серверу выполняется с использованием локального протокола. Сервер может прослушивать подключения от удаленных клиентов во время подключенного локального клиента. Рис. 6.2 иллюстрирует этот режим.

Рис. 6.2. Автономные серверы
Первый пример показывает модель локального подключения. В Firebird 1.5 и ниже подсистема IPSERVER моделирует сетевое подключение в том же блоке пространства общения между процессами. В версии 1.5 и выше вместо локального протокола используется более быстрая и надежная подсистема XNET. Функциональный эквивалент локального подключения используется Классическим сервером в POSIX.
В двух других примерах в Windows, Linux или на любой другой поддерживаемой платформе Суперсервер использует локальную "заглушку" (loopback) протокола TCP/IP. Это обычное подключение TCP/IP к специальному IP-адресу 127.0.0.1, который большинство подсистем TCP/IP инсталлирует по умолчанию для локального хоста (localhost). В Linux Классический сервер версии 1.5 может применяться в этом режиме при использовании клиентской библиотеки libfbclient.so.
Встраиваемый сервер
Встраиваемые серверы поддерживаются на платформах Windows и Linux/UNIX, хотя реализация моделей различна. Под Windows библиотека встроенного сервера, который выполняется как единый процесс, называется fbembed.dll. В Linux/UNIX это стандартный режим локального подключения для Классического сервера. Библиотека libfbclient.so запускает один процесс Классического сервера (fb_inet_server или ib inet server) и напрямую соединяется с базой данных. Процесс не является исключительным - удаленные клиенты могут одновременно соединяться с базой данных, используя fbclient.so, другую библиотеку libfbclient.so или fbembed.dll.
Более подробно встроенные серверы обсуждаются в главе 7.
Серверы Firebird в среде DTP
Детальное обсуждение среды распределенной обработки транзакций (Distributed Transaction Processing, DTP) не является целью данной книги. Достаточно сказать, что Суперсервер или Классический сервер Firebird хорошо подходят к различным сценариям DTP.
Open Group, определившая стандарт x/Open для DTP, предоставила три программных компонента для системы DTP. Спецификация XA определяет интерфейс между менеджером транзакций и менеджером ресурсов (Resource Manager, RM). Система имеет один RM-модуль для каждого сервера; требуется каждый RM для регистрации менеджера транзакций.
На рис. 6.3 показано, как сервер Firebird может быть представлен в XA-совместимой среде DTP. Модуль сервера приложения базы данных представляет собой мост между приложениями пользователя высокого уровня и RM, инкапсулирующим соединение XA. RM выполняет роль клиента связи с сервером базы данных для доступа к данным.
Инкапсуляция соединения XA дает возможность разработчику приложения создавать и выполнять операторы SQL в RM. Разграничение транзакций, которое требуется средствам двухфазного подтверждения для всех серверов, регулируется глобальным
монитором обработки транзакций (Transaction Processing Monitor, TPM). Транзакции с несколькими базами данных, находящиеся под управлением менеджера транзакций, выполняются с помощью процесса двухфазного подтверждения. В первой фазе транзакции подготавливаются для подтверждения; во второй фазе транзакции либо полностью подтверждаются, либо откатываются[9]. TPM проинформирует вызывающий модуль, если транзакция не будет по разным причинам завершена.

Рис. 6.3. Firebird в распределенной среде выполнения транзакций
TPM согласовывает распределенные транзакции в системах множества баз данных, так что одна транзакция может использовать один или более процессов и изменять одну или более баз данных. Монитор хранит информацию обо всех доступных и включенных в транзакции RM.
Среда поддерживает множество баз данных для одного сервера и множество серверов, которые не обязательно все должны быть серверами Firebird. Версия 1.5 и выше Firebird не поддерживает использование одной базы данных несколькими серверами или обслуживание базы данных, находящейся вне компьютера, где установлен сервер Firebird.
Основы сервера транзакций
Сервер транзакций Microsoft (Microsoft Transaction Server, MTS) с COM+ является одним из таких сценариев. MTS/COM+ обеспечивает среду для объединенных в пул процессов, которая осуществляет использование и управление компонентами бизнес- логики, включая контроль системы, безопасность и мониторинг выполнения. Одной из наиболее значимых возможностей является декларативное управление транзакциями. Транзакции, инициированные в MTS/COM+, управляются координатором распределенных транзакций (Microsoft Distributed Transaction Coordinator, DTC), менеджером ресурсов XA. Родной интерфейс Firebird требует провайдера ODBC или OLE DB, который поддерживает как двухфазное подтверждение транзакций Firebird, так и контекст вызова MTS/COM+[10].
Терминальные серверы
Firebird успешно используется в средах MTS и IBM Citrix. Во всех случаях используется протокол TCP/IP для соединений по сетевым IP-адресам.
! ! !
ВНИМАНИЕ! Весьма нежелательно инсталлировать на одном и том же узле терминальный сервер и сервер базы данных. Тем не менее в ситуациях, когда сервер приложения выполняется на том же узле, что и сервер базы данных, соединение должно осуществляться с использованием IP-адреса этого узла или по имени localhost.
. ! .
Базы данных
Каждая база данных располагается в одном или более файлах, которые динамически увеличиваются при возникновении такой необходимости. Файлы базы данных должны храниться на дисках, находящихся под физическим управлением машины, где располагается сервер. Только серверный процесс может выполнять прямые операции ввода/вывода для файлов базы данных.
Файл базы данных Firebird состоит из блоков, называемых страницами. Размер страницы базы данных может быть 1, 2, 4, 8 или 16 Кбайт; он устанавливается во время создания базы данных. Размер страницы может быть указан при создании, и изменен только во время восстановления базы данных из резервной копии при задании нового значения. Различные базы данных на одном и том же сервере могут иметь различные размеры страниц.
Сервер поддерживает множество различных типов страниц в каждой базе данных - страницы данных, различные уровни индексных страниц, страницы BLOB, служебные страницы для различной информации и т.д. Сервер располагает страницы в порядке, известном только ему. В отличие от файловых СУБД Firebird хранит таблицы не в виде физических строк и столбцов, а в непрерывном потоке на страницах. Когда страница заполняется почти полностью, и нужно записать еще строки, сервер выделяет новую страницу. Страницы одной таблицы не хранятся в виде непрерывной последовательности. Фактически страницы, содержащие данные одной таблицы, могут располагаться в нескольких файлах на разных дисках.
Программирование на стороне сервера
Среди мощных средств Firebird по динамическому программированию приложений клиент-сервер существует возможность компилировать на сервере исходные коды в двоичную форму для использования во время выполнения. Такие процедуры и функции выполняются полностью на сервере, возвращая клиентскому приложению при необходимости значения или наборы данных. Firebird предоставляет два стиля программирования на стороне сервера: хранимые процедуры и триггеры. В дополнение к этому внешние функции (или функции, определенные пользователем - User-Defined Functions, UDF) могут быть написаны на языке высокого уровня и стать доступными серверу для использования в выражениях SQL.
Хранимые процедуры
Язык процедур Firebird (PSQL) реализует расширения его языка SQL, предоставляя логику условий, структуры управления потоками выполнения, обработку исключений (как встроенных, так и определенных пользователем), локальные переменные, механизм событий и возможность получать входные аргументы почти всех типов данных, существующих в Firebird. Он реализует мощную структуру управления потоком для обработки курсоров, что позволяет помещать наборы данных напрямую в память клиента без необходимости создания временных таблиц. Такие процедуры вызываются клиентом оператором SELECT; разработчикам они известны как селективные процедуры.
Хранимые процедуры могут включать другие хранимые процедуры и могут быть рекурсивными. Все выполнение хранимой процедуры, включая выбор набора данных из процедур и внутренние вызовы других процедур, находится под управлением одной транзакции, которая вызвала процедуру. Соответственно, вся работа, выполненная при вызове хранимой процедуры, может быть отменена при откате клиентом этой транзакции.
Триггеры
Триггеры являются особыми процедурами, созданными для определенных таблиц с целью автоматического выполнения в процессе завершения добавлений, изменений или удалений на сервере. Любая таблица может иметь произвольное количество триггеров, которые будут выполняться до или после добавлений, изменений или удалений. Порядок выполнения определяется параметром позиции в объявлении триггера. Триггеры имеют некоторые расширения языка, недоступные для хранимых процедур или в динамическом SQL. Например, контекстные переменные OLD и NEW, при использовании которых в качестве префикса к имени столбца можно получить доступ к существующему (старому, old) и требуемому (новому, new) значению столбца. Триггеры могут вызывать хранимые процедуры, но не другие триггеры.
Работа, выполненная триггерами, будет отменена, если транзакция, явившаяся причиной вызова триггера, будет отменена.
Функции, определенные пользователем
Для сохранения своего малого объема Firebird поставляется с весьма скромным арсеналом встроенных (родных) функций трансформации данных. Пользователи могут писать свои собственные функции на известном им языке, таком как C/C++, Pascal или Object Pascal, для получения аргументов и возвращения единственного результата. Как только внешняя функция (UDF) будет определена в базе данных, она тут же станет доступной как допустимая функция SQL для приложений, хранимых процедур и триггеров.
Firebird поставляет две готовые к использованию библиотеки UDF: ib udf, доступную как для Windows, так и для Linux, и fbudf, доступную в настоящий момент для Windows и Linux в версии 1.5 и доступную только для Windows в версии 1.0.x. Firebird отыскивает UDF в библиотеках, находящихся в каталоге /udf каталога инсталляции или в других каталогах, указанных в параметре udfAccess (версия 1.5) или externai_function_directory (версия 1.0.x) в файле конфигурации Firebird.
Приложения, работающие с несколькими базами данных
В отличие от многих реляционных баз данных приложения Firebird могут быть одновременно соединены более чем с одной базой данных. Клиент Firebird может открывать и иметь доступ к любому количеству баз данных в одно и то же время. Таблицы из разных баз данных не могут быть объединены для получения связанного набора данных, но для комбинирования информации могут использоваться курсоры.
Если требуется согласованность между базами данных, Firebird может управлять выходными наборами данных, выполняя запросы к нескольким базам данных в контексте одной транзакции. Firebird обеспечивает автоматическое двухфазное подтверждение транзакции (2РС) при изменениях в данных, чтобы гарантировать, что изменения не будут применены в одной базе данных, если изменения в другой базе данных в контексте той же транзакции были отменены или потеряны из-за ошибок в сети.
Безопасность сервера
Для управления доступом пользователей к серверу Firebird использует базу данных безопасности security.fdb (isc4.gdb в версии 1.0.x). Во время инсталляции эта база данных содержит одного пользователя - SYSDBA.
* В инсталляции Windows пароль пользователя SYSDBA masterkey. Настоятельно рекомендуется немедленно после инсталляции запустить программу gsec.exe (в каталоге инсталляции, подкаталоге /bin) и изменить этот пароль. Это один из наиболее известных паролей в мире баз данных!
* Инсталляторы RPM версии 1.5 для Linux генерируют случайный пароль для SYSDBA и заменяют в базе данных старый пароль masterkey. Этот пароль сохраняется в корневом каталоге инсталляции в текстовом файле с именем firebird.PASSWORD. Если вы собираетесь использовать данный пароль, то удалите этот файл.
Пользователь SYSDBA имеет полные привилегии ко всем базам данных на сервере; в текущей модели безопасности он не может быть изменен. Пользователь root в Linux/UNIX получает привилегии SYSDBA автоматически. Владелец базы данных (пользователь, создавший базу данных) имеет полные права на эту базу данных. Для всех других пользователей доступ к объектам базы данных возможен только через предоставление им привилегий SQL.
Безопасность базы данных
Все пользователи, за исключением тех, кто имеет полные привилегии, должны получить права к каждому объекту, к которому они должны иметь доступ. SQL-оператор GRANT используется для назначения привилегий.
Firebird поддерживает роли SQL. Вначале роль должна быть создана с использованием оператора CREATE ROLE и подтверждена (commit). Группа привилегий может быть назначена роли, а затем роль может быть назначена пользователю. Для использования этих привилегий пользователь должен при соединении с базой данных указывать и имя пользователя, и имя роли.
Более подробную информацию о безопасности баз данных см. в главе 35.
Пора дальше
В главе 7 мы более внимательно рассмотрим клиентскую сторону в архитектуре клиент-сервер Firebird: библиотеку функций, которая предоставляет приложениям такие уровни системы, как средства связи и язык SQL. Если вам нужна помощь в инсталляции удаленного клиента, перейдите к последнему разделу этой главы.
ГЛАВА 7. Клиенты Firebird.
Клиенту на удаленной рабочей станции требуется клиентская библиотека и приложение (программа), которое может взаимодействовать с интерфейсом прикладного программирования (Application Programming Interface, API), объявленным в этой библиотеке.
Клиентская библиотека предоставляет протокол соединения и транспортный уровень, которые ваше клиентское приложение использует для связи с сервером. Стандартная библиотека для клиентов Windows - это Windows DLL. Для клиентов POSIX это совместно используемый объект (библиотека SO). Размер стандартной клиентской библиотеки приблизительно 350 Кбайт.
Некоторые уровни доступа, как, например провайдер Firebird .NET и драйверы JayBird Java, не требуют наличия клиентской библиотеки и напрямую реализуют сетевой протокол. Еще один режим существует во встраиваемом сервере - библиотека, которая объединяет клиентский и серверный экземпляры для использования одним пользователем.
Клиентская рабочая станция также может иметь копию текущего файла firebird.msg или его локализованную версию для того, чтобы отображались корректные сообщения сервера.
Обычно вы будете инсталлировать копию клиентской библиотеки на сервере для использования с некоторыми утилитами командной строки Firebird и/или для различных программ управления, выполняющихся на сервере, которые вы могли бы использовать. Тем не менее многие из этих утилит могут запускаться удаленно. Администратор системы может управлять некоторыми из основных сервисов, предоставляемыми этими утилитами для доступа к ним, через интерфейс управления услугами на хосте.
Что такое клиент Firebird?
Клиент Firebird - это приложение, обычно написанное на языке высокого уровня, которое предоставляет конечному пользователю доступ к средствам и инструментам системы управления базами данных Firebird и к данным, хранимым в базах данных. Интерактивная утилита isql и другие утилиты командной строки в вашем каталоге Firebird /bin являются примерами клиентских приложений.
Клиенты Firebird обычно располагаются на удаленных рабочих станциях и через сеть соединяются с сервером Firebird, выполняющимся на хост-машине. Firebird также поддерживает автономную модель, позволяющую клиентским приложениям, клиентской библиотеке Firebird и серверу Firebird выполняться на одном физическом устройстве.
Клиентские приложения могут и вовсе не взаимодействовать с конечными пользователями. Клиентами могут быть демоны, скрипты и сервисы.
Firebird был спроектирован для неоднородных сетей. Клиенты, выполняющиеся в одной операционной системе, могут иметь доступ к серверу на другой платформе операционной системы. Общий случай- наличие рабочих станций под Windows (98 или ME) и Linux, одновременно имеющих доступ к корпоративному серверу, выполняющемуся под Windows NT или Windows 2000, либо под какой-нибудь разновидностью UNIX или Linux.
В модели клиент-сервер приложения никогда не обращаются к базе данных напрямую. Любой процесс приложения общается с сервером через клиентскую библиотеку Firebird, копия которой должна быть инсталлирована на каждой клиентской рабочей станции. Клиентская библиотека Firebird предоставляет API, через который программы выполняют обращения к функциям для поиска, сохранения и манипулирования данными и метаданными. Обычно другие уровни также вовлечены в этот интерфейс между программой приложения и клиентом Firebird, который использует обычные или специфичные для языка приложения механизмы для заполнения базы данных или вызова функций API.
Для разработок Java постоянно поддерживаемые в Firebird драйверы включают JayBird JDBC/JCA-совместимый драйвер Java для гибкого, независимого от платформы интерфейса приложения между множеством открытых и коммерческих систем разработки Java и базами данных Firebird. Открытые и сторонние интерфейсные компоненты и драйверы доступны для множества других платформ разработки, включая Borland Delphi, Kylix и C++ Builder, коммерческие и открытые варианты C++, Python, PHP и DBI::Perl. Для приложений .NET провайдер Firebird .NET постоянно совершенствуется. Контактные адреса и другую информацию см. в приложении 3.
Клиентская библиотека Firebird
Клиентская библиотека Firebird поставляется во множестве вариантов, которые обрабатывают идентичные API-функции приложений для версии сервера, к которому они обращаются. В табл. 7.1 в конце этой главы представлены имена и размещение этих библиотек.
В большинстве случаев клиентская библиотека использует клиентские сетевые протоколы операционной системы для связи с одним или более серверами Firebird, реализуя специальный интерфейс для архитектуры клиент-сервер Firebird на уровне приложения поверх сетевого протокола.
Не смешивайте версии клиента и сервера
Важным является соответствие версии клиентской библиотеки и версии сервера. Используйте клиент версии 1.0.x с сервером версии 1.0.x и клиент версии 1.5 с сервером версии 1.5.
Помните также, что клиент версии 1.5 может быть инсталлирован в тот же каталог, что и клиент 1.0, а может быть поставлен в отдельный каталог. При переустановке новой версии изучите файл README и документацию по инсталляции (размещается в корневом каталоге инсталляции Firebird и в подкаталоге /doc на сервере), чтобы выяснить, какая информация данной книги устарела.
Все клиентские приложения и промежуточное программное обеспечение должны использовать API для доступа к базам данных Firebird. API Firebird имеет обратную совместимость с API InterBase. Документ "InterBase API Guide" (Руководство no API InterBase), доступный в Borland, содержит полное описание API для разработки высокопроизводительных приложений. Более поздние возможности документированы в официальных замечаниях по релизу Firebird и в ограниченном объеме в заголовочных файлах, поставляемых с Firebird[11].
Разработка приложений
Когда вы создали и заполнили данными базу данных, ее содержимое может быть доступно через клиентское приложение. Некоторые клиентские приложения - такие как инструмент Firebird isql и ряд прекрасных коммерческих и открытых инструментов администратора базы данных - предоставляют возможности интерактивной выборки данных и создания метаданных.
Любое приложение, разработанное в качестве интерфейса пользователя к одной или более базам данных Firebird, будет использовать язык запросов SQL для определения сохраняемых наборов данных и для передачи серверу операторов SQL, запрашивающих операции с данными и метаданными.
Firebird реализует множество операторов SQL, синтаксис которых имеет высокий уровень соответствия с признанным стандартом SQL-92. API Firebird предоставляет полные структуры для компоновки операторов SQL и связанных параметров и для получения приложениями результатов.
Динамические приложения клиент-сервер
Во время выполнения программы приложениям часто бывают нужны операторы SQL, которые создаются или изменяются приложениями или вводятся пользователями. Приложения обычно предоставляют пользователю списки выбора, извлекаемые из таблиц базы данных, которые используют пользователи для указания критериев поиска желаемых ими данных, и операции, которые они хотят выполнить. Программа конструирует запросы на основании выборов пользователя и управляет найденными данными.
Клиентские приложения используют динамический SQL (DSQL) для создания запросов во время выполнения. Клиент Firebird объявляет API как библиотеку функций, которые передают сложные структуры записей, формируют протокол на уровне данных для связи между приложением и сервером.
! ! !
ПРИМЕЧАНИЕ. Программирование с использованием API - большая тема. Ее описание выходит за рамки данной книги. Но поскольку динамический SQL сам не предоставляет некоторых функций, здесь описываются отдельные функции API, чтобы помочь вам понять, как драйверы и интерфейсные компоненты делают их доступными в соответствующих средах проектирования.
. ! .
Ядро API Firebird
Программирование с использованием API необходимо при написании драйверов для создания сценариев в таких языках, как PHP и Python, и при разработке объектно- ориентированных классов доступа к данным для объектно-ориентированных языков типа Java, C++ и Object Pascal. Приложения также могут быть написаны с прямыми вызовами функций API без посредничества драйверов. Эти приложения "прямого API" могут быть мощными, гибкими, быстро-выполняемыми, небольшого размера и с прекрасным управлением распределением памяти.
Функциональные категории ядра API
Функции API (все их имена начинаются с isc) делятся на восемь категорий.
* Соединение с базой данных и отсоединение от базы данных - например,
isc_attach_database().
* Запуск, подготовка, подтверждение и откат транзакций - например,
isc_start_transaction().
* Вызовы выполнения операторов - например, isc_dsql_describe().
* Вызовы BLOB - например, isc_biob_info().
* Вызовы для массивов - например, isc_array_get_slice().
* Безопасность базы данных - например, isc_attach_database().
* Информационные вызовы - например, isc_database_info().
* Преобразования даты и целых - например, isc encode date().
Более подробную информацию по программированию прямого API см. в "API Guide" документации по InterBase 6, опубликованной фирмой Borland.
Интерфейсы приложений при использовании API
Приложения, которые используют общие интерфейсы типа ODBC или JDBC, основаны на операторах DSQL, располагающихся ниже пользовательских интерфейсов, таких как построители запросов и др.
В связи с увеличением числа инструментов быстрой разработки приложений (Rapid Application Development, RAD) за последнее десятилетие инкапсуляция функций API в "обертку" классов и компонентов разработчикам под Firebird предоставлены разнообразные привлекательные средства создания приложений.
Объектно-ориентированные классы
Объектно-ориентированные классы и компоненты доступа к данным инкапсулируют вызовы функций и структуры данных API. Все они имеют свойства и методы, которые анализируют и выполняют синтаксический разбор запрашиваемых операторов, а также управляют возвращаемыми результатами. Богатые классы включают методы и свойства, которые поддерживают специальные возможности Firebird, такие как распределенные транзакции, обработка массивов, параметризованные операторы. Большинство наборов компонентов реализует, по меньшей мере, один класс компонента- контейнера для буферизации одной или более строк, возвращаемых клиенту в виде результирующего набора. Некоторые реализуют продвинутые техники, такие как прокручивание курсоров, "живые данные", обратные вызовы и управление транзакциями.
Драйвер JayBird Туре 4 ("родной") JDBC поставляет интерфейс, предназначенный для независимой от платформы разработки на Java с использованием Firebird. Некоторые наборы компонентов устанавливаются в качестве интерфейса разработчиками, использующими Delphi, Kylix и C++ Builder для написания клиентов баз данных Firebird. Двумя лучшими наборами компонентов являются IB Objects и FIBPlus. Доступны некоторые другие наборы компонентов, осуществляющие минимальную поддержку возможностей Firebird. Более подробную информацию см. в приложении 3.
Встроенные приложения Firebird
Firebird предоставляет две различные встраиваемые модели: приложения встроенного SQL (Embedded SQL) и встраиваемые серверы.
Приложения встроенного SQL
В этой модели программа приложения включает в себя интерфейс клиент-сервер и уровень приложения конечного пользователя- все в одном исполняемом модуле. Операторы SQL находятся непосредственно в исходном коде программы, написанной на С, C++ или другом языке программирования. Затем исходный код приложения обрабатывается препроцессором gpre, который отыскивает блоки кода, содержащие операторы SQL. Он подставляет макровызовы функций, которые функционально эквивалентны функциям динамической библиотеки API. Когда работа препроцессора завершается, все выполненные преобразования операторов SQL компилируются вместе с приложением. Такие операторы перед компилированием называются статическим SQL.
В таком стиле приложений доступно специальное расширенное подмножество исходных команд, похожих на SQL. Встроенный SQL (Embedded SQL, ESQL) предоставляет программисту простой язык высокого уровня в виде "черного ящика", в то время как gpre выполняет всю работу по преобразованию сложных языковых структур в эквивалентные вызовы API. Эти статические операторы дают незначительное увеличение скорости по сравнению с динамическим SQL, поскольку не требуют дополнительных затрат на синтаксический разбор и интерпретацию операторов SQL во время выполнения.
Язык и техники ESQL подробно не обсуждаются в данной книге. Документ "InterBase Embedded SQL Guide" ("Руководство по встроенному SQL InterBase", EmbedSQL.pdf), доступный в Borland, содержит описания, необходимые для разработки встроенных приложений Firebird.
Приложения встраиваемого сервера
В модели встраиваемого сервера не существует преобразований операторов SQL. Клиент и сервер объединяются в одну компактную динамическую библиотеку для получения независимого приложения. Приложение загружает библиотеку во время запуска точно так же, как обычное приложение Firebird будет загружать клиентскую библиотеку, функции API вызываются во время выполнения. При этом нет необходимости инсталлировать внешний сервер, потому что такой клиент внутренне связывается со своим собственным экземпляром серверного процесса Firebird. Когда приложение завершается, оно выгружает встраиваемый сервер, так что не сохраняется никакого серверного процесса.
Хотя здесь не используется и не эмулируется сетевое соединение, объединенное приложение клиент-сервер получает доступ к базе данных тем же способом, что и другие динамические приложения клиентов Firebird. Существующий код приложений, написанный для использования в обычной сети клиент-сервер, работает без каких-либо изменений со встраиваемым сервером.
Встраиваемый сервер под Windows
Библиотека встраиваемого сервера fbembed.dll, включенная в инсталлятор Firebird 1.5 для Windows, имеет архитектуру, аналогичную Firebird SuperServer. Если вы планируете инсталлировать и использовать fbembed.dll, обратите внимание на специальные инструкции по размещению библиотек и исполняемых программ Firebird. Измененные файлы README и другие заметки обычно размещаются в каталоге /doc серверной инсталляции.
Вы можете инсталлировать встраиваемый сервер и выполнять приложения встраиваемого сервера на машине Windows, на которой также находится Суперсервер или Классический сервер Firebird, хотя удаленные клиенты не могут соединяться с базой данных, с которой работает приложение встраиваемого сервера. В релизе 1.5, где не лучший протокол IPSERVER все еще используется для связи клиента и сервера, возможно использование библиотеки встраиваемого сервера в качестве клиента других серверов. В более поздних версиях, где протокол IPSERRVER заменен на XNET, это невозможно.
Firebird 1.0.x не содержит варианта встраиваемого сервера для Windows.
Встраиваемый сервер под Linux/UNIX
Встраиваемый сервер является "родным" режимом доступа локального клиента к Классическому серверу Firebird в Linux/UNIX, включая и версию Firebird 1.0.x. Библиотека встраиваемого сервера для локального доступа- libfbembed.so для Firebird 1.5 и выше и libgds.so для Firebird 1.0.x.
Как и версия IPSERVER для Windows, встроенный клиент в Linux/UNIX может так же работать, как удаленный клиент с другим Классическим сервером Firebird. При этом клиент не будет потокобезопасным (thread-safe). Для многопоточных приложений необходимо использовать обычный клиент libfbclient.so. В Firebird 1.0.x удаленный клиент поставляется в комплекте Суперсервер для Linux и двусмысленно назван libgds.so, как и встроенный клиент Классического сервера.
! ! !
ВНИМАНИЕ! Клиент Суперсервера для Linux является клиентом, поддерживающим потоки для многопоточных приложений, однако он не поддерживает выполнения нескольких потоков в одном и том же соединении с базой данных. Отдельные экземпляры соединения должны быть созданы для каждого потока.
. ! .
Сервисы API
Открытый код InterBase 6 - на основе которого был разработан Firebird - обрабатывает в первую очередь обращения к функциям интерфейса API для некоторых действий сервера, таких как копирование/восстановление, получение статистических данных и управление пользователями. Многие из этих обращений предоставляют программный интерфейс для инструментов командной строки. Небольшое количество функций сервера низкого уровня включает также некоторые функции, перекрывающие функции ядра API.
Некоторые организации разработали и распространяют сервисные компоненты, инкапсулирующие вызовы функций сервисов API из среды разработки Delphi, Kylix и C++ Builder. Большинство из них доступны для свободной загрузки с сайтов авторов или сообщества Firebird. Более подробную информацию см. в приложении 3.
В Firebird 1.0.x сервисы API и сервисные компоненты работают только с серверами типа Суперсервер. В Firebird 1.5 Classic сервисы API полностью поддерживаются только начиная с версии 1.5.2. В версиях 1.5.0 и 1.5.1 Classic поддерживаются только некоторые функции - такие как вызов модулей gbak (копирование/восстановление) и gfix (обслуживание базы данных).
Инсталляция клиентов
Инсталляция удаленных клиентов является основной частью установки ваших приложений баз данных в сети клиент-сервер. Если вы новичок в Firebird и сетях клиент- сервер, вам рекомендуется пропустить этот раздел, пока вы не получите возможность поэкспериментировать с клиентами, выполняющимися локально - на той же машине, что и сервер.
Каждой машине удаленного клиента требуется клиентская библиотека, которая соответствует версии сервера Firebird. Обычно допустимым является использование клиентской библиотеки из другой сборки (build) релиза - при условии, что номера версий совпадают. Тем не менее при обновлении сервера прочтите документацию README, поступающую с конкретным релизом, для определения того, где можно использовать более ранние клиентские версии.
Внимательно просмотрите системные пути на каждой клиентской рабочей станции, на которой вы собираетесь инсталлировать клиента Firebird, для удаления при необходимости существующих клиентских инсталляций InterBase или Firebird.
* В Firebird 1.0.x клиентские библиотеки используют те же имена и размещение, что и его двойник InterBase. Хотя возможно так установить приложения, чтобы они использовали переименованную клиентскую библиотеку, тем не менее, строго рекомендуется исключить размещение приложений Firebird 1.0.x и InterBase на одной и той же рабочей станции, если вы не уверены, что ваши приложения сконфигурированы так, чтобы отыскивать и использовать правильную библиотеку.
* Firebird 1.5 и более поздние версии под Windows может сосуществовать с InterBase и Firebird 1,0.x на сервере и клиенте. В Firebird 1.5 все еще имеют значение ручные установки, хотя с меньшими неприятностями, чем в версии 1.0.x. В версиях более поздних, чем 1.5, множество серверов и версий могут быть автоматически инсталлированы в Windows.
Инсталляция клиента Linux/UNIX
Операционные системы POSIX являются весьма своеобразными. Присутствующие в этом разделе советы должны быть полезными в качестве руководства по инсталляции клиентов для большинства разновидностей Linux и UNIX, однако это область, где сомнения являются несомненными!
1. Подключитесь к клиентской машине как пользователь root и найдите клиентскую библиотеку в инсталляции сервера:
• в Firebird 1,0.x ее имя libgds.so.0, размещение по умолчанию /usr/lib;
• в Firebird 1.5 двоичные файлы удаленного клиента libfbclient.so. 1.5.0 инсталлированы по умолчанию в /opt/firebird/lib.
! ! !
ВНИМАНИЕ! В поставке Классического сервера есть клиентская библиотека с именем libfbembed.so.1.5, которая может быть использована для встроенных приложений. Не используйте ее для удаленных клиентов.
. ! .
2. Скопируйте библиотеку в /usr/lib на клиенте и создайте символическую ссылку на нее, используя следующие команды:
• для версии 1.0x:
ln -s /usr/lib/libgds.so.0 /usr/lib/libgds.so
• для версии 1.5 (две ссылки):
In -s /usr/lib/libfbclient.so.1.5 /usr/lib/libfbclient.so.0 In -s /usr/lib/libfbclient.so.0 /usr/lib/libfbclient.so
3. Создайте каталог/opt/firebird (/opt/interbase для версии 1.0.x) на клиенте для файла сообщений и скопируйте этот файл из корневого каталога Firebird на сервере:
• для версии 1,0.x скопируйте interbase.msg в /opt/interbase/;
• для версии 1.5 и выше скопируйте firebird.msg в /opt/firebird/.
4. В системном профайле оболочки по умолчанию или вызовом setenvo создайте переменную окружения, которая позволит найти утилиту для сообщений API:
• для версии 1.0.x создайте переменную INTERBASE и свяжите ее с /opt/interbase/;
• для версии 1.5 и выше создайте переменную FIREBIRD и свяжите ее с /opt/firebird/.
Инсталляция клиента Windows
Firebird 1.0.x
В Windows клиентская библиотека всегда по умолчанию инсталлировалась в системный каталог. По умолчанию это C:\WINNT\system32 для Windows NT и 2000, C:\Windows\system32 для Windows XP и Server 2000 и C:\Windows\ или C:\Windows\system[12] для Windows 9х и ME. В Firebird 1.0.x в качестве временной меры сохраняются старые имена и местоположение.
Использование инсталлятора Firebird
Самый простой способ инсталлировать клиента Firebird 1.0.x- это скопировать инсталлятор Firebird на компакт-диск или флэш-память и запустить его на клиентской машине, выбрав установку только клиента в диалоговом окне инсталлятора. Вы можете инсталлировать клиента с инструментами командной строки или без них. Большинству клиентов не нужны эти инструменты; не рекомендуется устанавливать их на клиентских рабочих станциях, где не требуется доступ администратора к серверу.
Инсталлятор создаст корневой каталог по умолчанию в C:\Program Files\Firebird; это размещение вы можете изменить в соответствующем диалоге инсталлятора. Сюда он запишет файл сообщений interbase.msg и, если были выбраны для инсталляции инструменты командной строки, создаст каталог \bin, куда поместит эти инструменты.
Он запишет в системный каталог gds32.dll и, если библиотека времени выполнения Microsoft С старая или вовсе отсутствует, запишет туда же msvcrt.dll.
Под конец он запустит программу instreg.exe для инсталляции ключей в системном реестре. Если вы выбрали каталог инсталляции по умолчанию, ключ будет
HKLM\Software\Borland\InterBase. Если какие-нибудь выполняющиеся программы были перезаписаны в процессе инсталляции, вам будет предложено перезагрузить машину.
Инсталляция клиента вручную
Инсталляция клиента вручную требует выполнения всех предыдущих шагов. Вам нужно скопировать файлы gds32.dll, interbase.msg и instreg.exe на дискету или флэш- память. Также скопируйте из системного каталога msvcrt.dll, если на ваших клиентах она не установлена.
Создав корневой каталог Firebird, скопируйте туда interbase.msg. Затем запустите с диска instreg.exe, набрав в окне командной строки:
А:\> instreg.exe 'C:\Program Files\Firebird'
Если вы создали корневой каталог Firebird где-нибудь в другом месте, укажите этот путь как аргумент корневого каталога.
Скопируйте gds32.dll и, если нужно msvcrt.dll, в системный каталог.
! ! !
ПРИМЕЧАНИЕ, msvcrt.dll является библиотекой времени выполнения для многих программ, скомпилированных компилятором Windows С. gds32.dll - это имя клиентской библиотеки для серверов InterBase, а также Firebird 1.0.x. В случае если вы не можете скопировать одну из библиотек или обе по причине их использования другой программой, необходимо остановить ту программу и повторить процесс копирования. Если все еще невозможно переписать библиотеки по причине того, что аварийно завершившаяся программа не выгрузила их, перезагрузите компьютер в безопасном режиме и выполните этот шаг.
. ! .
Firebird 1.5 и выше
Firebird версии 1.5 и последующие клиентские инсталляции поставляются с большим количеством режимов с целью избежать "ужаса DLL" в системном каталоге Windows.
До тех пор, пока сторонние инструменты, драйверы и компоненты не научатся понимать изменения в клиентской части Firebird 1.5, Firebird 1.5 будет поддерживать собственные "ужасы DLL". Инсталляция клиента по умолчанию почти наверняка будет несовместимой с программным обеспечением, созданным с использованием таких RAD-продуктов Borland, как Delphi или C++ Builder.
Внимательно прочтите этот раздел перед началом работы, чтобы создать все необходимое для той конкретной среды разработки, для которой вы выполняете инсталляцию. Позже вы сможете вернуться назад и скорректировать инсталляцию вручную.
Использование инсталлятора Firebird
Хотя существуют другие варианты, рекомендуемый способ инсталляции клиента - использование инсталляционной программы Firebird 1.5.
Если вы используете инсталлятор, то первый выбор, который вы должны сделать - размещение корневого каталога для инсталляции клиента (рис. 7.1). Рекомендуется выбрать значение по умолчанию (C:\Program Files\Firebird\Firebird_1_5), тогда будет проще в будущем выполнять обновления. Тем не менее при необходимости вы можете указать размещение на свой вкус.
Хотя вы и не собираетесь инсталлировать сервер, инсталлятор предоставляет возможность устанавливать в корневой каталог дополнительные элементы, в том числе ключ системного реестра, который необходим некоторым программным продуктам, используемым на клиентской машине. Если вы инсталлируете инструменты командной строки, то выбранное размещение корневого каталога является существенным. При необходимости, позже, вы сможете изменить установку вручную.

Рис. 7.1. Выбор размещения корневого каталога инсталляции
Затем вы должны принять решение о выборе режима инсталляции - нужно ли устанавливать клиента с инструментами командной строки или без них, как показано на рис. 7.2.
Большинству клиентов эти инструменты не нужны; не рекомендуется инсталлировать их на клиентской рабочей станции, если нет необходимости администратору получать доступ к серверу. Для минимальной инсталляции выберите вариант Minimum client install - no server, no tools (Минимальная установка клиента - без сервера, без инструментов) и щелкните по кнопке Next.
Ваш выбор в следующем диалоговом окне (рис. 7.3) особенно важен, если на клиенте вы используете программное обеспечение сторонних организаций.
Предыдущие инсталляторы устанавливали старую клиентскую библиотеку gds32.dll в системный каталог вместе с библиотекой времени выполнения для языка С msvcrt.dll, если она отсутствовала.

Рис. 7.2. Выбор инсталляции только клиента

Рис. 7.3. Выбор "версии" и размещения для клиента
В версии 1.5 инсталлятор устанавливает все DLL - новую клиентскую библиотеку fbclient.dll и (если требуется) библиотеку времени выполнения для С и C++ msvcp60.dll - в каталог \bin в корневом каталоге Firebird.
* (A) Reallocation of the client library (Изменение размещения клиентской библиотеки). Если вам нужна совместимость с программным обеспечением, которое ожидает найти клиентскую библиотеку в системном каталоге, отметьте эту позицию.
* (В) Name of the client library (Имя клиентской библиотеки). Если вашему программному обеспечению или компонентам нужна клиентская библиотека с именем gds32.dll, отметьте эту позицию. Инсталлятор сгенерирует специальную копию fbclient.dll с именем gds32.dll и установит строку внутренней версии для совместимости с драйверами InterBase фирмы Borland и компонентами. Размещение этого файла зависит от состояния первой позиции (А).
Щелкните по кнопке Next для инсталляции.
Инсталляция клиента вручную
Инсталляция клиента вручную требует выполнения всех тех же шагов, которые выполнял бы инсталлятор. Вам нужно скопировать следующие файлы из каталога инсталляции сервера на дискету или флэш-память:
* %system%\gds32.dll (C:\WINNT\system32 или C:\Windows)
* firebird.msg
* bin\fbclient.dll
* bin\msvcrt.dll (при необходимости)
* bin\msvcp60.dll (при необходимости)
* bin\instreg.exe
* bin\instclient.exe
* bin\fbclient.local
* bin\msvcrt. local
* bin\msvcp60. local
На клиенте выполните следующие шаги:
1. Создайте корневой каталог Firebird и скопируйте туда firebird.msg.
2. В этом каталоге создайте каталог bin.
3. Скопируйте файлы из каталога \bin дискеты в этот новый каталог \bin.
4. Запустите программу instreg.exe из нового каталога \bin в окне командной строки. Очень важно запустить эту программу из каталога \bin корневого каталога Firebird, где расположена программа instreg.exe. Например, если корневой каталог Firebird находится в C:\Firebird_Client, введите:
С:\Firebird_Client\bin> instreg.exe install
5. Если у вас есть приложение, которому нужна клиентская библиотека с именем gds32.dll, то вам необходимо выполнить программу instclient.exe. Инструкции в следующем разделе.
Выполнение instclient.exe
Программа instclient.exe может быть выполнена, когда вам требуется клиентская версия, к которой осуществляют доступ существующие программы, драйверы или компоненты, которые ожидают, что имя клиентской библиотеки gds32.dll, или что она располагается по системному пути Windows. Это программа командной строки, которая находится в каталоге \bin в корневом каталоге вашей инсталляции сервера
Firebird. При необходимости скопируйте данный файл в соответствующий каталог на клиентскую машину.
Инсталляция клиента в системный каталог
Откройте окно командной строки и перейдите в каталог \bin. Синтаксис инсталляции клиента:
instclient.exe {i[nstall]} [-f[orce]] {fbclient | gds32}
Требуются параметры i (или install) и один из параметров fbclient или gds32.
Если программа найдет, что файл, который вы пытаетесь инсталлировать (fbclient.dll или gds32.dll), уже находится в системном каталоге, она не будет выполняться. Чтобы программа записывала файл, даже если найдет его копию, используйте переключатель -f (или -force).
Ваша операционная система может потребовать перезагрузку машины для завершения инсталляции.
! ! !
ВНИМАНИЕ! Если вы выбираете форсированную инсталляцию, вы рискуете разрушить клиента, который был инсталлирован для использования с другим программным обеспечением, которое было создано для соединения с сервером Firebird 1.0 или InterBase.
. ! .
Запрос к инсталлированному клиенту
Программа instclient.exe может быть использована для получения информации о выполняющихся на этой машине клиентах Firebird 1.5. Синтаксис запроса о клиентах:
instclient.exe {q[uery] fbclient | gds32}
На рис. 7.4 показана возвращаемая информация.

Рис. 7.4. Запрос с помощью instclient.exe
Использование instclient.exe для деинсталляции клиента версии 1.5
Для удаления клиента Firebird 1.5, инсталлированного в системный каталог, используйте следующий синтаксис:
instclient.exe {r[emove] fbclient | gds32}
Список имен и размещение клиентской библиотеки
В табл. 7.1 представлены имена клиентской библиотеки и размещение по умолчанию на клиентах Firebird.
Таблица 7.1. Имена и размещение по умолчанию клиентов Firebird
Версия, вид |
ОС клиента |
Библиотека |
Размещение по умолчанию |
Подключается к |
Firebird 1,0.x Классический сервер |
Linux/UNIX |
libgds.so.0, символьная ссылка на libgds.so |
/usr/lib |
Только Классический сервер 1.0 |
Firebird 1.0 Суперсервер для Windows |
Windows NT/2000 |
gds32.dll |
C:\WINNT\ system32 |
Любой сервер 1.0 |
-//- | Windows XP/Server 2003 |
gds32.dll |
C:\Windows\ system32 |
То же |
-//- | Windows 9x/ME |
gds32.dll |
C:\Windows |
То же |
Firebird 1.0 Суперсервер для Linux |
Linux/UNIX |
libgds.so.0, символьная ссылка на libgds.so. Обратите внимание, что эта библиотека отличается от клиента libgds.so в Классическом сервере |
/usr/lib |
Любой сервер 1.0 за исключением Классического сервера |
Firebird 1.5 Классический сервер для Linux |
Linux/UNIX |
libfbembed.so.O или libfbclient.so.0, символьная ссылка на libfbembed.so или libfbclient.so, соответственно[13] |
/usr/lib |
Только Классический сервер для Linux, приложения без потоков, возможны локальные соединения |
Firebird 1.5 Суперсервер для Linux |
Linux/UNIX |
libfbclient.so.0, символьная ссылка на libfbclient.so |
/usr/lib |
Любой сервер 1.5 |
Firebird 1.5 Классический сервер и Суперсервер для Windows |
Windows NT/2000 |
Родной: fbclient.dll |
Firebird root\bin |
Любой сервер 1.5 |
Совместимость: fbclient.dll или gds32.dll, встроенный в instclient.exe |
C:\WINNT\ system32 |
То же |
||
Windows XP/Server 2003 |
Родной: fbclient.dll Совместимость: fbclient.dll или gds32.dll, встроенный в instclient.exe |
C:\Windows\ system32 |
Любой сервер 1.5 |
|
Windows 9x/ME |
Родной: fbclient.dll |
Firebird root\bin |
То же |
|
Совместимость: fbclient.dll или gds32.dll, встроенный в instclient.exe |
C:\Windows или C:\Windows\system[14] |
То же |
||
Firebird 1.5 Встроенный сервер |
Все встроенные клиенты Windows |
fbembed.dll |
Корневой каталог исполняемого модуля приложения |
То же |
Пора дальше
В части III мы переходим к детальному рассмотрению типов данных, поддерживаемых языком SQL Firebird. В следующей главе вводятся типы данных и рассматриваются некоторые вопросы, которые вы должны понимать при подготовке к определению, сохранению и работе с данными SQL. Она заканчивается специальным обсуждением, которое будет вам полезным, если вы собираетесь выполнять миграцию данных из существующей базы данных в Firebird.
ЧАСТЬ III. Типы данных Firebird и домены
ГЛАВА 8. О типах данных Firebird.
Тип данных является основным атрибутом, который должен быть определен для каждого столбца в таблице Firebird. Он устанавливает и ограничивает характеристики множества данных, которые могут храниться в столбце, и операции, которые могут быть выполнены над данными. Он также определяет, какое дисковое пространство занимает каждый элемент данных. Выбор оптимального размера значений данных является важным решением для сетевого трафика, экономии дисковой памяти и размера индексов.
Firebird поддерживает большую часть типов данных SQL. В дополнение он поддерживает динамически изменяемые типизированные и не типизированные большие двоичные объекты (Binary Large Object, BLOB) и многомерные однородные массивы для большинства типов данных.
Где задаются типы данных
Тип данных определяется для элементов данных в следующих ситуациях:
* при определении столбца в операторе CREATE TABLE;
* при создании шаблона глобально используемого столбца посредством CREATE DOMAIN;
* при изменении шаблона глобально используемого столбца с применением ALTER DOMAIN;
* при добавлении нового столбца в таблицу или при изменении столбца с использованием ALTER TABLE;
* при объявлении аргументов и локальных переменных в хранимых процедурах и триггерах;
* при объявлении аргументов и возвращаемых значений внешних функций (функций, определенных пользователем, UDF).
Поддерживаемые типы данных
Числовые типы данных (обсуждаемые в главе 9) следующие:
* BIGINT, INTEGER и SMALLINT;
* NUMERIC и DECIMAL;
* FLOAT и DOUBLE PRECISION.
Типы данных даты и времени (обсуждаемые в главе 10):
* DATE;
* TIME и TIMESTAMP.
Символьные типы данных (обсуждаемые далее в главе 11):
* CHARACTER;
* VARYING CHARACTER и NATIONAL CHARACTER.
Типы данных BLOB и массивы (обсуждаемые далее в главе 12):
* BLOB, типизированный и нетипизированный.
* ARRAY (массив).
Булевы типы данных
Firebird 1.5 и выше не поддерживает булевы (логические) типы данных. Обычной практикой является объявление односимвольного или SMALLINT домена для общего использования, где требуются булевы типы данных.
Советы по определению булевых доменов см. в главе 13.
"Диалекты" SQL
Firebird поддерживает три "диалекта" SQL, которые не имеют другого практического назначения, кроме конвертирования баз данных из InterBase версий 5.x в Firebird. "Родной" диалект Firebird в настоящий момент известен как диалект 3. По умолчанию Firebird создает новую базу данных в этом родном диалекте. Если в вашем опыте в Firebird нет ни груза существующих предположений, ни созданных баз данных, которые вам нужно обновить для Firebird, вы можете без риска "следовать естеству" и игнорировать все последующие замечания и предупреждения относительно диалекта 1.
Если вы бывший пользователь InterBase или применяли устаревшие инструменты для преобразования данных из других СУБД в InterBase, то диалекты SQL будут для вас предметом обсуждения в нескольких отношениях.
Поскольку вы можете работать с этой книгой в том порядке, который вам подходит, то вопросы влияния диалекта SQL будут отмечены соответствующим образом. Некоторые из наиболее серьезных эффектов разных диалектов проявляются в различии между типами данных. Вопросам диалектов посвящен разд. "Специальная тема миграции: диалекты SQL" этой главы.
Идентификаторы с разделителями в SQL-92
В базах данных диалекта 3 Firebird поддерживает соглашение ANSI SQL о необязательных идентификаторах с разделителями. Для использования зарезервированных слов, строк, чувствительных к регистру, или пробелов в именах объектов заключите имя в двойные кавычки. Это имя становится идентификатором с разделителями. К идентификаторам с разделителями всегда нужно обращаться, заключив их в кавычки.
Подробности см. в разд. "Соглашения и ограничения в именовании объектов базы данных" главы 14. Более подробную информацию об именовании объектов базы данных с использованием операторов CREATE и DECLARE см. в части IV этой книги. В приложении 11 представлен список ключевых слов, которые являются зарезервированными словами в SQL.
Контекстные переменные
Firebird делает доступным множество значений переменных, поддерживаемых системой в контексте текущего соединения клиента и его деятельности. Эти контекстные переменные доступны для использования в SQL, включая язык триггеров и хранимых процедур, PSQL. Некоторые доступны только в PSQL, большинство - только в диалекте 3 базы данных. В табл. 8.1 представлены контекстные переменные Firebird.
Таблица 8.1. Список контекстных переменных
Контекстная переменная | Тип данных | Описание | Доступность |
CURRENT_CONNECTION | INTEGER | Системный идентификатор соединения, при котором выполняется настоящий запрос | Firebird 1.5 и выше, DSQL и PSQL |
CURRENT_DATE | DATE | Текущая дата по часам на сервере | Firebird 1.0 и выше, все окружения SQL |
CURRENT_ROLE | VARCHAR (31) | Имя роли, под которым соединился текущий пользователь. Возвращает пустую строку, если текущее соединение не использовало роль | Firebird 1.0 и выше, все окружения SQL |
CURRENT_TIME | TIME | Текущее время по часам на сервере, выраженное в секундах после полуночи | Firebird 1.0 и выше, все окружения SQL |
CURRENT_TIMESTAMP | TIMESTAMP | Текущая дата и время по часам на сервере в секундах | Firebird 1.0 и выше, все окружения SQL |
CURRENT_TRANSACTION | INTEGER | Системный идентификатор транзакции, в контексте которой выполняется текущий запрос | Firebird 1.5 и выше, DSQL и PSQL |
CURRENTUSER | VARCHAR( 128) | Имя пользователя, который связан сданным экземпляром клиентской библиотеки | Firebird 1.0 и выше, все окружения SQL |
ROW_COONT | INTEGER | Счетчик строк измененных, удаленных и добавленных оператором DML после завершения операции | Firebird 1.5 и выше, DSQL и PSQL |
UPDATING | BOOLEAN | Возвращает true, если выполняется оператор изменения | Firebird 1.5 и выше, только диалект триггера PSQL |