Firebird под Linux

© 2003 Pascal Chong <chongym@cymulacrum.net>

© 2003 Тимур Бирш <birsh@mail.kz>, перевод

Оригинальная версия на http://www.ibphoenix.com



Оглавление

1. Введение

1.1. Почему я написал это?

1.2. Copyright и предупреждения

1.3. Почему я должен использовать Firebird?

2. Установка Firebird

2.1. Где я могу взять Firebird?

2.2. Какую версию я должен скачивать?

2.3. Системные требования

2.4. Установка Firebird

3. Начало работы с Firebird

3.1. Утилиты администрирования

3.1.1. Администратор безопасности gsec

3.1.2. isql - Interactive SQL

3.2. Создание вашей первой базы данных

3.3. Добавление пользователей и ролей

3.4. Тестирование базы данных

4. Дополнительные ссылки



1. Введение

В июле 2000 года Borland (потом Inprise) выпустил исходные тексты их СУБД, Interbase, под лицензией Interbase Public License. Firebird прямой Open Source потомок данной СУБД.

1.1. Почему я написал это?

Мое первое знакомство с Interbase произошло когда я работал в 1999 году в компании продававшей продукты Borland. Я проводил техническую поддержку и кое-какие курсы по Delphi и Interbase шел вместе с Delphi Client/Server. Тогда, я приобрел хорошего друга сходившего с ума по Interbase. Мне это было не совсем интересно, так как я в это время проводил поддержку IBM DB2 и участвовал в бета-тестировании Linux.

Возвращение к Interbase, и его настоящей Open Source инкарнации, Firebird, произошло только недавно. Кто-то в списке рассылке спросил о Open Source СУБД которые могут поставляться вместе с приложениями и кто-то другой подсказал что Firebird. Тогда я вспомнил своего друга и подумал что может быть бы он порадовался увидя что, пишут о его любимой СУБД, вот поэтому я и решил написать данный документ.

1.2. Copyright и предупреждения

This document is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

1.3. Почему я должен использовать Firebird?

Open Source СУБД обычно страдают от двух распространенных недостатков: они большие, такие как PostgreSQL и MySQL или в них не достает возможностей и документации, такие как HypersonicSQL или McKoi.

Firebird имеет относительно небольшой размер, около 2,6Mb в RPM-пакете. Это делает его идеальным для роли “встроенной СУБД” (embedded database), поставляемой с сервером приложений и приложением. В Firebird есть все распространенные функции большинства сформировавшихся СУБД, такие как поддержка хранимых процедур, соответствие SQL-стандарту и др. Если вы работаете с DB2 и PostgreSQL, то их синтакс очень похож и типы данных, работа с данными видимо очень похожа, такие как обязательное включение строк в одинарные кавычки.

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

2. Установка Firebird

2.1. Где я могу взять Firebird?

Официальный веб-сайт Firebird http://www.firebirdsql.org.

Последние версии доступны прямо с IBPhoenix.

2.2. Какую версию я должен скачивать?

На данный момент есть две версии Firebird-сервера которые вы можете скачать:

В двух словах, отличие между двумя версиями находится в подходе к проектированию. Super Server использует потоки для обслуживания разных клиентов подключающихся к нему в одно время, а Classic Server порождает отдельный процесс для каждого подключения. Статью сравнивающую эти два подхода вы можете найти на IBPhoenix1. Выбирать какую версию сервера использовать полностью за вами. Для “встроенных СУБД” с малым количеством пользователей, то нет большой разницы какую вы выберите. Теоретически, для приложений с большим количеством пользователей, Super Server должен работать лучше при уменьшении времени процесса запуска и лучшего совместного использования ресурсов. У меня не было возможности протестировать это в среде с большой нагрузкой, так что я не могу говорить ответственно на данную тему.

Данный документ описывает только Firebird Super Server.

2.3. Системные требования

БД размером 2,5Мб довольно маленькая по размеру, и я полагаю, если у вас работает Linux, то вы сможете без проблем использовать эту БД.

Требования:

Данная конфигурация была протестирована на Probatus Spectra Linux 1.2 которая эквивалентна RedHat v7.3. Firebird должен работать на любом Linux основанном на RPM-пакетах.

2.4. Установка Firebird

После того как вы скачали RPM-пакет с веб-сайта, войдите в систему как root.

Выполните следующую команду:

# echo localhost.localdomain >>/etc/hosts.equiv

Она добавит localhost в список серверов которые она распознает. Перейдите в директорию где находится скачанный RPM-пакет и выполните следующую команду:

# rpm -ivh FirebirdSS-1.0.2.908-1.i386.rpm

Данная команда установит Firebird и создаст скрипт в директории /etc/init.d который будет запускать Firebird при загрузке системы. Если вы столкнулись с какими-то ошибками, проверьте что у вас установлены ncurses4 и правильная версия glibc.

Занимательно, вы будете извещены что Firebird создаст директорию с именем interbase в директории /opt и установит свои файлы там. Это показывает его наследственность, так как он был основан как-никак на Interbase. Нам нужно что бы бинарные файлы были доступны в масштабе всей системы и для этого мы отредактируем файл /etc/profile, вставив следующие строки:

	export INTERBASE_HOME=/opt/interbase
	export PATH=$PATH:$INTERBASE_HOME/bin

Сохраните файл, перезапустите сервер и проверьте что Firebird запустился успешно.

3. Начало работы с Firebird

Теперь мы перейдем к работе с примером БД и ознакомлению с утилитами для работы с этой СУБД.

3.1. Утилиты администрирования

По умолчанию учетная запись администратора имеет имя SYSDBA (данное имя пользователя не чувствительно к регистру) и пароль masterkey. Для пользователей предыдущих версий Interbase (и людей которые работали над примером Fish Catalog для Delphi) это видимо очень знакомо. Вы будете использовать данную учетную запись в начале чтобы создавать других пользователей и пример БД.

Доступные утилиты администрирования:

3.1.1. Администратор безопасности gsec

Вам нужно запустить gsec как SYSDBA. Чтобы осуществить это, выполните следующее как root или не-root пользователь:

$ gsec -user sysdba -password masterkey

Это выведет на экран приглашение GSEC>. Вы можете вывести текущих пользователей введя на приглашение “display”:

GSEC> display

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

GSEC> modify SYSDBA -pw newpassword

Хорошо, newpassword не совсем стойкий пароль. Вы должны использовать свой, который содержит как цифры так и буквы и они должны чередоваться часто. Но мы не будем здесь этого делать.

3.1.2. isql Interactive SQL

Как упоминалось выше, isql есть аналог psql от PostgreSQL и SQL*Plus от Oracle. Вы можете набрать SQL-команду и получите результат запроса из БД.

Firebird идет с примером БД EMPLOYEE и мы будем использовать ее для тестирования наших SQL-команд. Чтобы начать, выполните следующую команду:

isql /opt/interbase/examples/employee.gdb

Она подключит вас к БД EMPLOYEE и выведет приглашение SQL>. Вы можете набрать ваши SQL-команды в приглашении. Не забывайте, перед тем как нажать клавишу <ENTER> чтобы выполнить команду, набрать точку с запятой (;) в конце оператора чтобы закончить его.

Для теста, наберите следующую SQL-команду и нажмите <ENTER>

SQL> SELECT emp_no, full_name, job_code, job_country FROM employee;

Это должно вам дать:

EMP_NO  FULL_NAME                             JOB_CODE JOB_COUNTRY
======= ===================================== ======== ===============
      2 Nelson, Robert                        VP       USA
      4 Young, Bruce                          Eng      USA
      5 Lambert, Kim                          Eng      USA
      8 Johnson, Leslie                       Mktg     USA
      9 Forest, Phil                          Mngr     USA
     11 Weston, K. J.                         SRep     USA
     12 Lee, Terri                            Admin    USA
     14 Hall, Stewart                         Finan    USA
     15 Young, Katherine                      Mngr     USA
     20 Papadopoulos, Chris                   Mngr     USA
     24 Fisher, Pete                          Eng      USA
     28 Bennet, Ann                           Admin    England
     29 De Souza, Roger                       Eng      USA
     34 Baldwin, Janet                        Sales    USA

Если вы хотите увидеть все таблицы в БД, наберите следующее:

SQL> SHOW TABLES;

Эта команда выдаст вам список всех таблиц в базе данных:

COUNTRY			CUSTOMER
DEPARTMENT			EMPLOYEE
EMPLOYEE_PROJECT		JOB
PHONE_LIST			PROJECT
PROJ_DEPT_BUDGET		SALARY_HISTORY
SALES

Чтобы выйти из isql, просто введите quit; и нажмите <ENTER>.

3.2. Создание вашей первой базы данных

Пока, мы выполняли наши команды как SYSDBA и использовали примеры идущие с Firebird. Теперь, мы создадим свою БД, создадим пользователя у которого будут права на просмотр и изменение БД, а также попробуем поработать с базой данных.

Чтобы создать нашу БД, нам нужно использовать утилиту isql. Firebird сохраняет свои БД под раздельными файлами и, по соглашению, с расширением .gdb. Помните, это лишь соглашение, так что вы можете сохранить БД с любым расширением которое захотите. Чтобы продемонстрировать это, мы во-первых создадим БД используя пользователя SYSDBA и сохраним ее в директории test в директории содержащейся в переменной окружения $INTERBASE_HOME.

Первое что мы создаем это директорию testdb в /opt/interbase (проверьте, что у вас есть соответствующие права над это директорией), перейдите в нее, затем запустите isql без параметров:

$ isql

Потом мы выполняем команду CREATE DATABASE:

SQL> CREATE DATABASE 'firstdb.gdb' USER 'sysdba' PASSWORD 'masterkey';

Она создаст файл с именем firstdb.gdb в текущей директории. БД принадлежит SYSDBA. Теперь мы создадим очень простую таблицу SALES и заполним ее данными. Если вы уже знакомы с SQL, то следующие команды будут для вас легкими. Если нет, то вам возможно нужно прочесть стандарт ANSI SQL-92.

SQL> CREATE TABLE sales_catalog (
CON> item_id varchar(10) not null primary key,
CON> item_name varchar(40) not null,
CON> item_desc varchar(50)
CON> );
SQL> INSERT INTO sales_catalog
CON> VALUES('001', 'Aluminium Wok', 'Chinese wok used for stir fry dishes');
SQL> INSERT INTO sales_catalog
CON> VALUES('002', 'Chopsticks extra-long', '60-cm chopsticks');
SQL> INSERT INTO sales_catalog
CON> VALUES('003', 'Claypot', 'Pot for stews');
SQL> INSERT INTO sales_catalog
CON> VALUES('004', 'Charcoal Stove', 'For claypot dishes');
SQL> SELECT * FROM sales_catalog;

ITEM_ID    ITEM_NAME                                ITEM_DESC
================================================================================

001        Aluminium Wok                            Chinese wok used for stir fry dishes
002        Chopsticks extra-long                    60-cm chopsticks
003        Claypot                                  Pot for stews
004        Charcoal Stove                           For claypot dishes

Для выхода из isql, просто введите quit; и нажмите <ENTER>.

3.3. Добавление пользователей и ролей

Теперь у нас есть БД, но наверное это не очень хорошая идея, для создания и администрирования всех БД использовать учетную запись SYSDBA. В некоторых случаях, например, если я работаю с несколькими БД принадлежащие другим людям или группам, я возможно захочу чтобы каждому пользователю или группе принадлежала их соответствующая БД, но чтобы они не смогли иметь доступа к другим базам. Другой сценарий может быть потребует создания proxy-пользователя который будет выполнять все операции над БД, но который не будет иметь всех прав суперпользователя SYSDBA.

В данном разделе мы создадим БД пользователей и назначим учетную запись пользователя у которого будут права на просмотр и обновление.

Для этой операции мы используем утилиту gsec. И так, предполагая что мы хотим создать пользователя с именем TestAdmin с паролем testadmin (я знаю, знаю, еще один слабый пароль) и дать ему права на просмотр, модификацию и удаление записей БД firstdb.gdb, мы выполняем следующие команды. Помните, что в пароле используются только первые восемь символов.

$ gsec -user SYSDBA – password masterkey

GSEC> add TestAdmin -pw testadmin -fname FirstDB -lname Administrator

Warning – maximum 8 significant bytes of password used

Дальше, мы открываем БД, создаем роль administrator для БД, назначаем соответствующие права для этой роли, затем разрешаем использовать пользователю TestAdmin эту роль.

$ isql firstdb.gdb -user SYSDBA -password masterkey

Database: firstdb.gdb, User: SYSDBA

SQL> GRANT SELECT, UPDATE, INSERT, DELETE ON sales_catalog TO administrator;

SQL> GRANT administrator TO TestAdmin;

SQL> quit;

Теперь, мы готовы для тестирования нашей базы данных.

3.4. Тестирование базы данных

Для начала, выйдете из gsec и isql, если вы этого еще не сделали. Мы подключемся к firstdb.gdb как TestAdmin, выполним некоторые запросы, а потом отключимся. Просто чтобы протестировать БД. Команды и их результат показаны ниже:

SQL> DELETE FROM sales_catalog;
SQL> INSERT INTO sales_catalog 
CON> VALUES('001', 'Aluminum Wok', 'Chinese wok');
SQL> INSERT INTO sales_catalog 
CON> VALUES('002', 'Microwave Oven', '300W Microwave oven');
SQL> INSERT INTO sales_catalog 
CON> VALUES('003', 'Chopsticks extra-long', '60cm chopsticks');
SQL> SELECT * FROM sales_catalog;

ITEM_ID    ITEM_NAME                                ITEM_DESC
========== ===============================================================
001        Aluminum Wok                             Chinese wok
002        Microwave Oven                           300W Microwave oven
003        Chopsticks extra-long                    60cm chopsticks

Если вы столкнетесь с какими-то SQL-ошибками, то вам нужно будет проверить по сслылкам в следующем разделе.

Если все работает, мои поздравления! Ваш Firebird готов к полету! Я все еще изучаю эту СУБД, так что если у вас есть любые советы, критика или что-нибудь новое чтобы вы хотели добавить в эту статью, пожалуйста пишите мне.

4. Дополнительные ссылки

В настоящее время, полные руководства по Firebird доступны только на IBPhoenix CD. Однако для дополнительной информации о его работе или SQL-командам которые он принимает, вы можете обратиться к руководствам от Interbase 6.0 которые доступны с веб-сайта IBPhoenix2. Более свежая документация доступна на IBPhoenix CD3.

Там в общем семь руководств и информация видимо достоверная для Firebird судя по моему опыту. Я использовал руководства Operations Guide и Language Reference для многих частей данного документа, а также для своей собственной работы.



Желающие могут скачать эту статью: в pdf (178K) или sxw (15.7K) формате.

2011123456789101112
2010123456789101112
2009123456789101112
2008123456789101112
2007123456789101112
2006123456789101112
2005123456789101112
2004123456789101112
2003123456789101112
2002123456789101112
2001123456789101112
2000123456789101112
1999123456789101112

Последние статьи
Литература