Firebird (database server)

Доступ к базе данных Firebird из YII2

Из песочницы

Так получилось, что мне понадобилось переносить интерфейс пользователя из связки Delphi + Firebird в WEB. Дабы не останавливать работу комплекса программ, решено было переносить формы постепенно, а для этого необходимо сохранить работу СУБД Firebird и подключаться к ней из web приложения. При разработке web-приложения я решил использовать фреймворк YII2. На этапе разработки мне не нужен полноценный HTTP сервер, вполне сойдет Denwer или XAMMP, или что-то еще. Я выбрал XAMMP т.к. в Денвере давно не обновляется версия PHP, а руками заниматься его обновлением не хочется, идем по пути наименьшего сопротивления. Изначально ни в XAMMP PHP, ни в YII2 нет возможности работать с СУБД Firebird, но при определенных танцах с бубном сделать это вполне реально. Итак, я буду полагать, что у Вас уже установлены: Windows 7 x64, XAMMP и YII2, Firebird 2.5.
Пути установки пакетов у меня (для себя вводите соответствующие корректировки):

  • Firebird 2.5 версия x64 (тип сервера значения не имеет) в C:\Program Files\Firebird\Firebird_2_5\
  • XAMMP установлен в D:\xampp\
  • YII2 установлен в D:\xampp\htdocs\yii\
  • БД расположена в пути D:\WORK\database\TBOT.GDB

Теперь можно начинать.

Конференция Firebird в России

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

Особое мнение

Firebird применяется в основном для небольших и средних встраиваемых приложений, то есть когда сервер ставится в комплекте какого-то приложения (бухгалтерского или складско-учетного) и работает в «невидимом» для пользователей режиме.Конечно, стенд с ERP Avarda вызывает интерес, было бы очень любопытно на него взглянуть, но решения такого объема (десятки гигабайт) для Firebird скорее редкость.

Также можно отметить, что в крупных компаниях Firebird в основном используется как «вспомогательная» база данных — когда нецелесообразно ставить большую БД (с неизбежным администратором) в небольшой филиал или удаленное подразделение, в этом случае в качестве «заменителя» часто выбирают именно Firebird.

В одной очень крупной российской страховой компании (входящей в тройку лидеров) основную базу данных держат на Oracle, тем не менее Firebird стоит в каждом офисе, а данные из нее заливаются в центральное хранилище для последующей обработки. Собственно, из-за такой второстепенной роли в больших компаниях никто особо и не говорит о Firebird, она просто «не попадается на глаза» ИТ-менеджменту: бюджета для покупки она не требует, шумихи в Интернете про нее тоже нет. Этакая рабочая лошадка, вроде «Газели», ездит и ездит.

Помимо относительно узкой ниши на корпоративном рынке, у Firebird есть несколько особенностей, переходящих в недостатки: во-первых, очень маленький аскетичный дистрибутив, не включающий развитых средств администрирования, которые потом приходится устанавливать отдельно; и во-вторых, ограничения SQL, которые делают разработку хранимых процедур непохожей на MS SQL или Oracle: отсутствие временных таблиц и внешних хранимых процедур.

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

Сергей Шевелев,специалист одной из компаний-интеграторов

Подсистема «Показатели объектов»

Если вашим пользователям нужно вывести в динамический список разные показатели, которые нельзя напрямую получить из таблиц ссылочных объектов, и вы не хотите изменять структуру справочников или документов — тогда эта подсистема для вас. С помощью нее вы сможете в пользовательском режиме создать свой показатель, который будет рассчитываться по формуле или с помощью запроса. Этот показатель вы сможете вывести в динамический список, как любую другую характеристику объекта. Также можно будет настроить отбор или условное оформление с использованием созданного показателя.

2 стартмани

Компонент TFDTransaction

Параметр
Назначение
Connection
Связь с компонентом FDConnection.
Options.AutoCommit
Управляет автоматическим стартом и завершением транзакции. Значение по умолчанию True.
Если значение этого свойства установлено в True, то FireDAC делает следующее:Запускается транзакция (если требуется) перед выполнением каждой SQL команды, и завершает транзакцию после выполнения SQL команды. Если команда выполнится успешно, то транзакция будет завершена как COMMIT, иначе — ROLLBACK.
Если приложение вызывает метод StartTransaction, то автоматическое управление транзакциями будет отключено, до тех пор, пока транзакция не завершится как Commit или Rollback.

В Firebird автоматическое управление транзакциями эмулируется самими компонентами FireDAC.
Options.AutoStart
Управляет автоматическим запуском транзакции. По умолчанию True.
Options.AutoStop
Управляет автоматическим завершением транзакции. По умолчанию True.
Options.DisconnectAction
Действие, которое будет выполнено при закрытии соединения, если транзакция активна. Значение по умолчанию xdCommit. Возможны следующие варианты:xdNone – ничего не будет сделано. Действие будет отдано на откуп СУБД;
xdCommit – подтверждение транзакции;
xdRollback – откат транзакции.

В других компонентах доступа значение по умолчанию для подобного свойства xdRollback. Поэтому необходимо выставлять это свойство вручную в то значение которое действительно требуется.
Options.EnableNested
Управляет вложенными транзакциями. Значение по умолчанию True.
Когда транзакция активна, то следующий вызов StartTransaction создаст вложенную транзакцию. FireDAC эмулирует вложенные транзакции, используя точки сохранения, если СУБД не поддерживает вложенные транзакции в явном виде. Чтобы отключить вложенные транзакции, установите EnableNested в False и следующий вызов StartTransaction вызовет исключение.
Firebird не поддерживает вложенные транзакции в явном виде.
Options.Isolation
Определяет уровень изолированности транзакции

Это самое важное свойство транзакции. Значение по умолчанию xiReadCommited

Возможны следующие варианты:xiUnspecified – используется уровень изоляции по умолчанию для вашей СУБД (в Firebird это SNAPSHOT, т.е. с параметрами read write concurrency wait);
xiDirtyRead – этого уровня изолированности в Firebird не существует поэтому вместо него будет использован READ COMMITED;
xiReadCommited – уровень изолированности READ COMMITED. В Firebird такая транзакция стартует с параметрами read write read_committed rec_version nowait;
xiRepeatableRead – этого уровня изолированности в Firebird не существует поэтому вместо него будет использован SNAPSHOT;
xiSnapshot – уровень изолированности SNAPSHOT. В Firebird такая транзакция стартует с параметрами read write concurrency wait;
xiSerializable – уровень изолированности SERIALIZABLE. На самом деле в Firebird не существует транзакции с данным уровнем изолированности, но он эмулируется запуском транзакции с параметрами read write consistency wait.

Options.Params
Специфичные для СУБД параметры транзакции. В настоящее время используется только для Firebird и Interbase. Возможные значения:read
write
read_committed
concurrency
consistency
wait
nowait
rec_version
no rec_version

Options.ReadOnly
Указывает является ли транзакция только для чтения. По умолчанию False. Если установлено в True, то любые изменения в рамках текущей транзакции невозможны, в Firebird в этом случае отсутствует значение read в параметрах транзакции.
Установка этого свойства в True позволяет СУБД оптимизировать использование ресурсов.

Замечание
Такую транзакцию нельзя использовать для отчётов (особенно если они используют несколько последовательных запросов), потому что транзакция с режимом изолированности READ COMMITED во время перечитывания данных будет видеть все новые committed-изменения.
Для отчётов рекомендуется использовать короткую транзакцию только для чтения с режимом изолированности SNAPSHOT (Options.Isolation = xiSnapshot и Options.ReadOnly= True). В данном примере работа с отчётами не рассматривается.

Улучшение безопасности

Системные привилегии

Эта функция позволяет предоставлять и отменять некоторые специальные привилегии обычным пользователям для выполнения задач, которые исторически ограничивались только SYSDBA, например: запуск утилит gbak, gfix, nbackup, доступ к таблицам мониторинга, запуск пользовательской трассировки и т.д.

Набор системных привилегий может быть указан при создании/изменении роли.

Выдача ролей другой роли

Firebird 4.0 позволяет назначать роль другой роли. Это явление получило название «Кумулятивные роли». Этот термин относится к ролям, встроенным в другие роли посредством оператора . Оператор GRANT ROLE расширен до следующего синтаксиса

Ключевое слово DEFAULT в операторах GRANT и REVOKE

Если в операторе GRANT используется ключевое слово DEFAULT, то роли используются пользователем или ролью каждый раз, даже без явного указания. При подключении пользователь получит привилегии всех ролей, которые были назначены с использованием ключевого слова DEFAULT. Если пользователь укажет свою роль при подключении, то получит привилегии этой роли (если она была ему назначена) и привилегии всех ролей, назначенных ему с использованием ключевого слова DEFAULT.

SQL SECURITY

Все объекты метаданных, содержащие DML или PSQL код, могут выполнятся в одном из следующих режимов:

  • С привилегиями вызывающего пользователя (привилегии CURRENT_USER);
  • С привилегиями определяющего пользователя (владельца объекта метаданных).

Исторически сложилось, что все PSQL модули по умолчанию выполняются с привилегиями вызывающего пользователя. Начиная с Firebird 4.0 появилась возможность указывать объектам метаданных с какими привилегиями они будут выполняться: вызывающего или определяющего пользователя. Для этого используется предложение SQL SECURITY, которое можно указать для таблицы, триггера, процедуры, функции или пакета. Если выбрана опция INVOKER, то объект метаданных будет выполняться с привилегиями вызывающего пользователя. Если выбрана опция DEFINER, то объект метаданных будет выполняться с привилегиями определяющего пользователя (владельца). Эти привилегии будут дополнены привилегиями, выданными самому PSQL модулю оператором GRANT.

В данном случае пользователю JOE достаточно только привилегии EXECUTE на процедуру p. Если бы процедура была создана с привилегиями вызывающего пользователя (опция INVOKER), то ещё потребовалось бы выдать привилегию INSERT для процедуры p на таблицу t.

Встроенные криптографические функции

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

Поддержка шифрования утилитой gbak

Поддержка шифрования базы данных была введена ещё в Firebird 3.0, однако шифровать/дешифровать файлы резервной копии сделанной утилитой gbak можно было только внешними инструментами. В Firebird 4.0 добавлена поддержка шифрования резервной копии с помощью того же плагина шифрования, что используется при шифровании базы данных.

Пример создания шифрованной резервной копии

Резервная копия шифруется с помощью того же самого плагина шифрования, с которым зашифрована база данных.

Пример восстановления резервной копии

Firebird что это за программа

Firebird (Firebird SQL) — это программа или реляционная система управления базами данных (СУБД), способная работать на ОС Linux, Microsoft Windows, MacOS X, Solaris Sparc, HP-UX, FreeBSD и других разнообразных Unix платформах. Эта программа Firebird не требует постоянного администрирования. Она основана на исходном коде, который был выпущен корпорацией Borland в 2000 году в качестве Interbase 6.0 (свободной версии). Firebird совместима со стандартом SQL’92.

Что это Firebird?

СУБД Firebird является независимым проектом программистов (C и C++), разработчиков систем управления базами данных и технических советников. Используется в самых разнообразных системах как негосударственного, так и государственного секторов. Основными причинами для перехода являются:

  • Оригинальные функции Firebird и простота в использовании. Особенно относится к версии MS SQL 6.5, которая работает с devices (фиксированными устройствами), а не с динамически расширяющимися файлами. Это весомое преимущество, поскольку данный вариант способен привести к определенным проблемам при администрировании.
  • Дополнительный сервер и хранилище. MS SQL предлагает, и даже рекомендует, пользователям приобрести еще один дополнительный сервер (операционную систему, оборудование или сервер баз данных), чтобы установить его как хранилище данных для генерации всех отчетов.
  • Нет привязки к поставщику ПО. MS SQL работает только на Windows NT2000, а значит, что Вы «привязаны» к ОС Microsoft. А вот эта программа Firebird не имеет привязки к какому-либо поставщику программного обеспечения. Система может работать и на Windows, и на множестве других платформах, включая Linux, MacOS X, Solaris и т.д.
  • Открытость исходных кодов. Исходные коды Firebird открыты, что позволяет максимально комфортно использовать эту СУБД, вносить изменения и улучшать, находить ошибки. Если Вы хорошо понимаете исходный код, добавление таких функций и повышение гибкости в системе не составит особого труда.
  • Отсутствие стоимости. Известно, что это программа Firebird является совершенно бесплатной системой, в то время как за использование сервера MS SQL взимается плата за каждый процессор, собственно на котором он работает.

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

Инструкция по удалению Firebird

  1. Удаление через «Панель управления». Чтобы остановить СУБД FireBird 1.5 через «Панель управления», необходимо открыть окно «FireBird Server Control», запустив FireBird 1.5 Server Manager, и выбрать действие «Stop». Подтвердите, нажав «OK».
  2. Удаление через «Установку и удаление». Для начала следует открыть «Панель управления», а затем раздел «Установка и удаление программ». В списке выделить программу СУБД FireBird 1.5 и выбрать действие «Удалить» Firebird. Для подтверждения удаления нажать на кнопку «Да». В следующем окне, появившемся после вышеперечисленных действий, выберите «Yes to All» и подтвердите, нажав «ОК». После успешного удаления останется лишь перезагрузить компьютер.

(0 , в среднем: 0 из 5)

Компонент TFDUpdateSQL

Замечание
Для работы многих редакторов времени проектирования FireDac требуется, чтобы было активно подключение к базе данных (TFDConnection.Connected = True) и транзакция находилась в режиме автостарта (TFDTransaction.Options.AutoStart = True). Но такие настройки могут мешать при работе приложения. Например, пользователь должен входить в программу под своим логином, а TFDConnection подключается к базе данных под SYSDBA. Поэтому после каждого использования редакторов времени проектирования рекомендуем проверять свойство TFDConnection.Connected и сбрасывать его. Кроме того, вам придётся включать и выключать автостарт транзакции предназначенной только для чтения.

Замечание
Поскольку product_id не включено в Updating Fields, оно отсутствует в генерируемом запросе insert. Предполагается, что этот столбец заполняется автоматически триггером (с генератором), или же этот это IDENTITY столбец (начиная с Firebird 3.0). При получении значения генератора для этого столбца с сервера, рекомендуется вручную добавить столбец PRODUCT_ID в предложение RETURNING оператора INSERT.
Параметр Назначение
Connection Связь с компонентом FDConnection.
DeleteSQL SQL запрос для удаления записи.
FetchRowSQL SQL запрос для возврата одной текущей (обновлённой, вставленной) записи.
InsertSQL SQL запрос для вставки записи.
LockSQL SQL запрос для блокировки одной текущей записи. (FOR UPDATE WITH LOCK).
ModifySQL SQL запрос для модификации записи.
UnlockSQL SQL запрос для разблокировки текущей записи. В Firebird не применяется.

Установка режимов клиент/сервер и встроенного режима сервера

Firebird может работать в режиме клиент/сервер и в режиме встроенного сервера.

Client/Server означает, что у вас где-то есть физический сервер Firebird: либо на локальной машине, либо на другой машине, доступной по вашей сети. Соединения с сервером проходят через TCP/IP; при указании соединения имя хоста содержит имя или IP-адрес. Серверу Firebird для «общения» с вашими компонентами доступа необходима fbclient.dll/fbclient.so.nnn (вместе с его файлами поддержки).

Embedded Firebird означает, что ваше приложение для доступа к базе данных Firebird на локальной машине загружает единственную библиотеку, которая является и сервером, и клиентской библиотекой Firebird «в одном флаконе». При указании строки соединения имя хоста всегда пусто (не указывается). Серверу Firebird для «общения» с вашими компонентами доступа необходима fbembed.dll/fbembed.so (вместе с его файлами поддержки).
См. вики-страницу на Firebird embedded для более подробной информации.

Обратите внимание, что fbembed.dll может использоваться как для клиент-серверного, так и для встроенного использования, поэтому установка только этой dll может быть разумной задачей.

Прим.перев.: необходимо уточнить, что выше описанное справедливо для версий FB 1.5, FB 2.0, FB 2.1 и FB 2.5. Начиная с версии FB 3.0, режим используемого сервера зависит от строки подключения, а клиентская библиотека на все случаи жизни одна — все та же fbclient.dll/libfbclient.so.3.0.n (где n — номер билда версии FB).

Windows

Win64: пожалуйста, см. предупреждение о нежелательном использовании некоторых версий FPC/Lazarus Win64.

Для Windows: (это относится ко всем драйверам базы данных SQLDB) необходимо иметь fbclient.dll (или fbembed.dll’ ) и его поддержку dll, установленных в:

  • каталог проекта и каталог вывода исполняемого файла/каталог приложения (например, lib /что-то еще в каталоге вашего проекта)
  • или каталог в вашем PATH (не в системном каталоге)
  • Если вы хотите использовать системный каталог, пожалуйста, используйте официальный установщик и поставьте галочку «скопировать fbclient в системный каталог»

Как и для всех библиотек DLL (базы данных), разрядность библиотеки DLL должна соответствовать вашему приложению: используйте 32-разрядную библиотеку для 32-разрядной скомпилированной программы и 64-разрядную библиотеку для 64-разрядной программы.

Unix/Linux/macOS

В Linux/macOS/FreeBSD должна быть установлена ​​клиентская библиотека Firebird (например, вашим менеджером пакетов; установите обычный пакет и пакет -dev), или они должны быть прописаны в путях поиска библиотеки.

FPC ищет наиболее распространенные имена библиотек (например, libfbclient.so.2.5, libgds.so и libfbembed.so.2.5; пожалуйста, проверьте ibase60.inc, если ваша версия отличается). При желании можно указать имя библиотеки. Есть 2 способа сделать это:

  • использовать компонент TSQLDBLibraryLoader из sqldblib (FPC 2.7.1). Работает для всех компонентов коннектора SQLDB.
  • вызвать функцию
    function InitialiseIBase60(Const LibraryName  AnsiString)  integer;
    

    с правильным именем библиотеки (для этого может потребоваться использовать модуль ibase60dyn).

Faster — многофункциональный ускоритель работы программиста 1С и других языков программирования Промо

Программа Faster 9.4 позволяет ускорить процесс работы программиста
(работает в любом текстовом редакторе).
Подсказка при вводе текста на основе ранее введенного текста и настроенных шаблонов.
Программа Faster позволяет делится кодом с другими программистами в два клика или передать ссылку через QR Код.
Исправление введенных фраз двойным Shift (с помощью speller.yandex). Переводчик текста. Переворачивает текст случайно набранный на другой раскладке.
Полезная утилита для тех, кто печатает много однотипного текста, кодирует в среде Windows на разных языках программирования.
Через некоторое время работы с программой у вас соберется своя база часто используемых словосочетаний и кусков кода.
Настройка любых шорткатов под себя с помощью скриптов.
Никаких установок и лицензий, все бесплатно.

1 стартмани

Запуск набора тестов базы данных FPC

Может быть полезно запускать среду тестирования базы данных FPC (в каталоге packages\fcl-db\tests), когда вы охотитесь за ошибками, пытаетесь выяснить, как что-то работает или улучшаете код базы данных.

Сообщаем платформе, какую базу данных использовать

Вам нужно будет отредактировать INI-файл db test framework, чтобы сообщить исполняемому файлу теста, что ему нужно использовать вашу встроенную базу данных.
См. для получения инструкций о том, как это сделать.

Создание тестовой базы данных

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

Скопируйте библиотеки embedded Firebird и другие файлы для вашей архитектуры в тестовый каталог.

Затем создайте тестовую базу данных — вручную или программно/

Создание базы данных вручную

isql

create database 'test.fdb' user 'SYSDBA' password 'masterkey' page_size 16384 default character set UTF8;
exit;

Программное создание базы данных

Вы можете программно создать базу данных. В приведенном ниже примере создается локальная встроенная база данных, но ее можно легко изменить на удаленную базу данных (измените имя хоста и, если необходимо, путь):

program firebirdembeddedtest;
{$mode objfpc}{$H+}

uses 
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF} 
  Classes, SysUtils,
  sqldb, IBConnection {for Firebird};

const
  // Имя для базы данных. Обязательно укажите одно и то же имя в вашем database.ini
  DatabaseFile = 'test.fdb'; //Разумное имя для тестовой базы данных, верно?
var
  Fire TIBConnection;

begin
  //Подключение к базе данных Firebird
  //Следующая строка нужна для довольно старых версий FPC
  //UseEmbeddedFirebird: = true; 
  //Более новые версии сначала будут искать файл fbembed.dll в каталоге приложения автоматически 
  //Использование встроенного (и fbembed.dll) или обычного клиент/сервера (fbclient.dll) требует использования ibase60dyn
  Fire:=TIBConnection.Create(nil);
  try
    Fire.HostName := ''; //должен быть пустым для embedded Firebird; должен быть заполнен для клиент/сервера Firebird
    Fire.DatabaseName := DatabaseFile; //(путь и ) имя файла
    // Имя пользователя и пароль не имеют значения для аутентификации, но вы получаете авторизацию в базе данных    
    // на основе имени (и, возможно, роли), которое вы даете.
    Fire.Username := 'SYSDBA';
    Fire.Password := 'masterkey'; //пароль для SYSDBA по умолчанию
    Fire.Charset := 'UTF8'; //Отправка и получение строковых данных в кодировке UTF8
    Fire.Dialect := 3; //Никто больше не использует диалекты 1 или 2 (прим.перев.: это справедливо лишь в отношении новых проектов)
    Fire.Params.Add('PAGE_SIZE=16384'); //Мне нравится большой размер страницы (используется при создании базы данных). Полезно для больших индексов ⇒ больший возможный размер столбца
    // Выясните, есть ли база данных в каталоге приложения. 
    // Если нет, создайте его. Примечание: это может не сработать, если у вас недостаточно прав.

    // Если вы используете клиент / сервер, вам явно не нужна эта часть кода.
    if (not FileExists(DatabaseFile)) then
    begin
        writeln('Файл '+DatabaseFile+' не существует.');
        writeln('Создание базы данных Firebird embedded ...');
        // Создаем базу данных, поскольку она не существует
        try
          Fire.CreateDB; //Создаем файл базы данных.
        except
          on E Exception do
          begin
            writeln('ОШИБКА при создании базы данных. Возможно проблемы с загрузкой встроенной библиотеки:');
            writeln('- не все файлы присутствуют');
            writeln('- неправильная архитектура (например, 32 бит вместо 64 бит)');
            writeln('Exception message:');
            writeln(E.ClassName+'/'+E.Message);
          end;
        end;
        Fire.Close;
    end;
  finally
    Fire.Free;
  end; 
end.

Наконец, скомпилируйте и запустите dbtestframework.pas программы тестирования базы данных. Он должен генерировать вывод состояния на консоли и вывод XML в файлах с результатами теста, которые можно проанализировать и отправить разработчикам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector