Рейтинг@Mail.ru

Ред База Данных – первая СУБД в Едином реестре российских программ

Автор: Alex. Опубликовано в Программирование . просмотров: 17466

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

С тех пор как появился Единый реестр российских программ для электронных вычислительных машин и баз данных первой российской СУБД в нём оказалась – «Ред База Данных».  Причём эта СУБД стоит в реестре под номером 1. Давайте посмотрим, что представляет из себя эта база данных.

rbd00-300

Разработчик СУБД «Ред База Данных» (РБД) - российская компания «Ред Софт», которая существую с 2006 года. Сайт компании находится здесь. СУБД «Ред База Данных» - это основной продукт компании, но есть у компании и другие продукты: Ред Операционная Система (на основе ядра Linux) и Ред Платформа Документооборота. Все решения базируются на программном обеспечении с открытым исходным кодом.

СУБД «Ред База Данных» основана на базе данных Firebird, но с рядом доработок и дополнений, см. список ниже. Проще говоря разработчики из компании «Ред Софт» взяли исходные коды Firebird и доработали их, в результате чего получился новый продукт, отвечающий требованиям ФСТЭК. Помимо этого, разработчики «Ред Софт» постоянно добавляют в свою СУБД изменения, произошедшие в Firebird, и, в обратную сторону, готовят патчи для Firebird. Разработчики компании плотно сотрудничают с сообществом Firebird и сами являются контрибьюторами, например, см. первые 4 человека в списке участников.

Вот основные доработки и дополнения, которые есть в СУБД «Ред База Данных» и которых нет в Firebird:

    1. Поддержка криптопровайдера КриптоПро;
    2. Многофакторная аутентификация;
    3. Контроль доступа к сервисам;
    4. Глобальные роли, набор предопределенных ролей по умолчанию, куммулятивное действие ролей;
    5. Синхронная и асинхронная репликация на уровне ядра для обеспечения режимов StandBy;
    6. Запуск процедур и триггеров от имени владельца или пользователя;
    7. Шифрование трафика, БД, данных пользователя на ключах пользователя и бэкапов;
    8. Мандатный контроль доступа;
    9. Статическая и динамическая проверка целостности файлов, и защита от патчей;
    10. Хранимые процедуры и функции на языке Java;
    11. Полнотекстовый поиск;
    12. Интеграция с LDAP/AD.

В настоящее время СУБД «Ред База Данных» используется во многих компаниях и государственных организациях. Наиболее крупная база данных используется в АИС ФССП России, где суммарный объем центральной БД достигает 100ТБ, а максимальный размер одной физической БД доходит до 10 ТБ. Здесь обрабатываются сотни одновременных подключений и сотни тысяч транзакций в час, документооборот превышает 1,2 млрд. документов в год.

Функциональные возможности и безопасность

Функциональные возможности СУБД следующие:

        • SQL, используемый в СУБД «Ред База Данных», поддерживает стандарт SQL 2003.
        • Хранимые процедуры и пользовательские функции пишутся на языке Java, что позволяет пользоваться множеством библиотек, возвращать наборы данных и взаимодействовать с другими базами данных.
        • Полнотекстовый поиск, основанный на высокопроизводительной межплатформенной библиотеке lucene, который может осуществляться по нескольким таблицам и полям, а также по распространенным форматам файлов: rtf, doc, OpenDocument, Format(ГОСТ Р ИСО/МЭК 26300-2010) и pdf.
        • Поддержка LDAP/AD.
        • Наличие встраиваемой версии, не требующей выделенного сервера.
        • Мониторинг жизнедеятельности: отслеживание текущей активности и аудит всех событий за время работы сервера.
        • Возможность вынести BLOB данные в отдельный каталог на диске.

Защищенная редакция СУБД «Ред База Данных» прошла сертификацию и может использоваться при создании автоматизированных систем до класса защищенности 1Г включительно и для защиты информации в информационных системах персональных данных до 1 класса включительно.

Для обеспечения безопасности возможно использование следующих механизмов:

        • Криптографический плагин (позволяет выполнять любые криптографические операции, используется КриптоПРО или Windows Crypto API);
        • Многофакторная аутентификация (контекст безопасности ОС, пароль, сертификат и т.д.);
        • Кумулятивные роли (возможность назначать роль на роль);
        • Контроль доступа к DML и DDL;
        • Контроль доступа к сервисам (можно назначать права на запуск ряда сервисов);
        • Фильтрация записей и каталогов (права определяют видимость определённых записей и каталогов);
        • Мандатный доступ, основанный на интеграции с SELinux;
        • Полное шифрование файла БД, трафика и бэкапов;
        • Выборочное шифрование столбцов таблиц ключами пользователей.

Стоимость СУБД «Ред База Данных» и техподдержка

СУБД «Ред База Данных» работает на всех основных платформах и ОС: Windows, Linux, BSD Unix, IBM AIX, HP-UX и Sun Solaris. Однако регулярная сборка, тестирование и сертификация производится только для операционных систем Windows и Linux. Для остальных платформ это делается периодически по желанию клиентов.

Желающим использовать эту СУБД «Ред База Данных» в своих разработках, нужно знать, что существует три редакции:

    1. Открытая – бесплатная (по лицензиям здесь);
    2. Стандартная – 150000 руб. за физический процессор (не ядро) для использования на серверах с не более чем 2 процессорами архитектуры x86;
    3. Промышленная – 350000 руб. за физический процессор.

Лицензия покупается один раз и действует только на купленную версию без ограничений по времени. Т.е. если у вас есть лицензия на версию СУБД 2.5, и вы планируете, переход на версию 2.6, то нужно будет приобретать новую лицензию.

Разница между бесплатной и платной версиями состоит в том, что платные версии обладают сертификатом ФСТЭК и технической поддержкой. Конечно, для бесплатной редакции тоже есть возможность консультаций – по электронной почте (Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), в помощи вам отказано не будет, но никаких гарантий не дается.

Техническая поддержка платных версий бывает нескольких уровней:

    1. Стандартный базовый уровень. Стоимость этой техподдержки на один год составляет 20% от стоимости лицензии. Сюда включены только консультации клиентов по запросам и предоставление обновлений.
    2. Расширенный уровень (начиная с версии 2.6 этот уровень поддержки не предоставляется). Его стоимость на один год составляет 30% от стоимости лицензии. Здесь к услугам стандартного уровня добавляются рекомендации по конфигурированию и администрированию, проверка нарушения сертификата ФСТЭК России и оперативная техническая помощь при выполнении заранее оговоренных действий.
    3. Премиум. Его стоимость на один год составляет 40% от стоимости лицензии. Здесь будет всё, что есть в расширенном уровне поддержки, плюс вы получите следующее:
        • Максимальное время реакции на обращение в службу техподдержки – 1 рабочий час.
        • Вам будет назначен ответственный специалист, который будет помогать в ответах на технические вопросы и решении технических проблем.
        • Помощь в создании воспроизводимых тестовых примеров, для решения технических вопросов.
        • Анализ и исследование происшествий, с целью определение причин их возникновения и разработки рекомендаций по обходу аналогичных ситуаций в будущем.
        • Советы по настройке производительности. Решение проблем связанных со снижением производительности: сбор и анализ данных для выявления возможных причин падения производительности, определение необходимых изменениях для возврата производительности к прежнему уровню.

Стоит упомянуть также, что компания «Ред Софт» проводит курсы по подготовке администраторов и разработчиков СУБД «Ред База Данных». Подготовка может проходить на площадке «Ред Софт», на площадке заказчика или форме вебинаров.

Установка СУБД «Ред База Данных»

Углубляться в изучение СУБД «Ред База Данных» я не буду, но для лёгкого ознакомления я установлю её на компьютер под управлением 32-разрядной ОС Windows 7 и посмотрю, какие средства разработки и администрирования здесь есть. Актуальная версия СУБД на момент написания статьи - 2.6, скачать можно здесь (для скачивания нужна регистрация). На странице загрузки можно скачать исходные коды и дистрибутивы для установки на ОС Windows и Linux. Для установки я использовал файл setup_rdb_2.6.0.12321_com_x86_ru.msi.

После запуска установщика перед вами появится окно приветствия, затем окно с лицензионным соглашением. На этих окнах я не буду заострять внимание. Третьим окном вы увидите окно выбора вида установки.

Выбор вида установки СУБД "Ред База Данных"

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

Выборочный тип установки СУБД "Ред База Данных"

Как видите, СУБД можно вообще не устанавливать на компьютер. Это может пригодиться, если вы будете работать с удалённой БД, и вам понадобятся только средства администрирования. Здесь же можно выбрать устанавливаемые средства администрирования FenixSql и/или ibWebAdmin, а из коммуникационных возможностей – установку драйверов и поставщиков данных для доступа к БД из различных средств разработки и платформ: Delphi, BCB, Kylix, Lazarus, FPC, .Net, ODBC, JDBC, PHP, Python и Perl. В результате я остановился на выборочном виде установки, но менять выбор компонентов не стал.

На следующем шаге вам предстоит выбрать номер порта, на котором будет работать сервер и архитектуру сервера. Здесь я не буду ничего менять.

Выбор номера порта и архитектуры сервера СУБД "Ред База Данных"

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

После установки в меню появилась группа ярлыков Red Soft Corporation, в которой можно найти ярлыки для запуска утилит FenixSql, Firebird ISQL Tool, а также документацию на английском и русском языках в формате PDF. На русском здесь будет документация по администрированию, использованию SQL, написанию хранимых процедур и использованию полнотекстового поиска.

Работа с базой данных

Для работы с базами данных «Ред База Данных» можно использовать утилиту командной строки ISQL или программы с графическим интерфейсом IBExpert или FenixSQL. Сразу после установки у вас будут установлены утилита ISQL и программа FenixSQL (если вы выбрали этот инструмент при установке), поэтому немного с ними поразбираемся.

Утилита ISQL

Утилиту ISQL (полное название «Firebird ISQL Tool») можно запустить из меню «Пуск». После запуска в первую очередь нужно либо подключиться к существующей базе данных либо создать новую. Вот пример создания новой локальной базы данных:

CREATE DATABASE ’C:\MyDB\TEST_DB.fdb’ USER ’sysdba’ PASSWORD ’masterkey’ PAGE_SIZE = 16384 DEFAULT CHARACTER SET WIN1251;

Создание базы данных утилитой ISQL

После выполнения этой команды в папке C:\MyDB появится файл TEST_DB.fdb с новой базой данных. Теперь с базой данных можно работать: создавать таблицы, добавлять данные и т.п.

Попробую создать таблицу, добавить в неё данные и сразу прочитать их. Вот скрипт, который я использовал:

CREATE TABLE DWARF (ID INT NOT NULL PRIMARY KEY, NAME VARCHAR(12) NOT NULL, NOTE VARCHAR(100));
INSERT INTO DWARF VALUES (1, 'Умник', 'Главный среди семи гномов. Носит очки и часто путает слова.');
INSERT INTO DWARF VALUES (2, 'Соня', 'Всегда уставший и немногословный.');
COMMIT;
SELECT * FROM DWARF;

После выполнения последней строчки скрипта выдался результат, но русских букв я не увидел. Вместо них появились закорючки:

Проблема с русскими буквами в утилите ISQL

Я обратился к разработчикам СУБД и они ответили, что проблема кроется в консоли Windows, а именно в её кодировке. По умолчанию кодировка консоли CP866, а нам нужна Windows 1251. Поменять кодировку можно выполнив команду «chcp 1251» перед запуском утилиты ISQL. Чтобы это сделать я создал пакетный файл ISQL.bat, в котором сначала стоит команда на изменение кодировки, а затем – команда на запуск утилиты ISQL. Содержимое файла у меня получилось следующим:

chcp 1251
"C:\Program Files\Red Soft Corporation\Red Database\bin\isql.exe"

Кроме того, чтобы можно было писать русскими буквами после смены кодировки, нужно поменять шрифт консоли на Lucida Console или Consolas. Чтобы это сделать, запустите созданный файл ISQL.bat, и в системном меню окна выберите пункт «Свойства».

Изменение шрифта консоли Windows

В окне свойств выберите один из перечисленных выше шрифтов, его размер и нажмите «ОК».

Выбор шрифта консоли Windows

После этого вы можете увидеть, что текст «Текущая кодовая страница: 1251» стал читабельным. Но в БД уже сохранились строки в неправильной кодировке. Поэтому лучше очистить нашу таблицу DWARF и записать строки по новой. Чтобы это сделать выполним следующий скрипт:

CONNECT 'C:\MyDB\TEST_DB.fdb' USER 'sysdba' PASSWORD 'masterkey';
DELETE FROM DWARF;
INSERT INTO DWARF VALUES (1, 'Умник', 'Главный среди семи гномов. Носит очки и часто путает слова.');
INSERT INTO DWARF VALUES (2, 'Соня', 'Всегда уставший и немногословный.');
COMMIT;
SELECT * FROM DWARF;

Выполнение запроса в утилите ISQL после настройки шрифтов

Как видите, после этих манипуляций консоль полностью понимает русские буквы и при вводе и при выводе.

Пару слов хочется написать о нюансах при работе в консольном приложении ISQL. При написании скриптов всегда нужно помнить о том, что после всех изменений, которые вы делаете нужно вызывать команду COMMIT, иначе при закрытии консоли данные не сохранятся. После каждой команды нужно обязательно ставить точку с запятой, иначе утилита будет думать, что ввод команды ещё не завершён и будет ждать продолжения даже, если вы нажали клавишу Enter.

Программа FenixSQL

Теперь давайте посмотрим, как работать с программой FenixSQL. Для начала запустим её. Сделать просто это у меня не получилось: при запуске вывалилась ошибка «Запуск программы невозможен, так как на компьютере отсутствует krb5_32.dll. Попробуйте переустановить программу».

Ошибка при запуске программы FenixSql

Выяснилось, что для ярлыков, которыми эта программа запускается, не прописана рабочая папка. Чтобы ошибки не было, нужно прописать рабочую папку «C:\путь установки\RedDatabase\bin». У меня это «C:\Program Files\Red Soft Corporation\Red Database\bin».

Указываем рабочую папку программы FenixSQL

После этого программа запустилась без ошибок.

Запуск программы FenixSQL

Теперь попробуем подключиться к уже созданной БД с помощью программы FenixSQL. Для этого выберем пункт меню «Database -> Connect» и в появившемся диалоге заполним поля «Alias» (любое вымышленное имя соединения), «DBname (filename) or alias» (имя файла БД), «User» (имя пользователя) и «Password» (пароль), как показано на рисунке ниже, и нажмём кнопку «Connect».

Настройка подключения к локальной БД в программе FenixSQL

После этого программа в левом списке покажет нам сгруппированный список объектов БД. При щелчках по элементам этого списка справа будут отображаться выбранные объекты. Например, щёлкнув по нашей таблице DWARF, справа будет показан скрипт для создания этой таблицы.

Подключение к базе данных в программе FenixSQL

Теперь попробуем выполнить запрос и прочитать содержимое таблицы DWARF. Запрос будет простой:

SELECT * FROM DWARF;

Чтобы выполнить произвольный запрос переключимся на закладку «Sql», напишем запрос в текстовом поле и нажмём кнопку с зелёным треугольником или клавишу F9. Как видите, запрос выполнился. Это можно видеть по сообщениям, появившемся снизу на вкладке «Messages».

Выполнение запроса в программе FenixSQL

Чтобы посмотреть результат, переключимся на закладку «Result set».

Отображение результата запроса в программе FenixSQL

После этого я сразу проверил вставку новых записей с русскими буквами. Я использовал следующий скрипт:

INSERT INTO DWARF VALUES (3, 'Весельчак', 'Радостный и обычно смеющийся гном.');

Но здесь произошла ошибка «CHARACTER SET WIN1251 is not installed» (кодировка WIN1251 не установлена), см. картинку.

Выполнение вставки записи с русскими буквами в программе FenixSQL

Разработчики СУБД подсказали, что программа скорее всего не находит каталог intl, в котором должны быть библиотека fbintl.dll и конфигурационный файл fbintl.conf. Происходит это из-за того, что после установки СУБД программа FenixSql настроена для подключения к базе данных через сокеты, а для подключения напрямую к файлу БД нужна другая организация файлов программы. Что ж, нет ничего проще, чем подключиться к БД по-другому. Выберите в меню «Database -> Disconnect», после этого программа спросит, нужно ли применить или отменить изменения.

Вопрос о подтверждении или отмене изменений в программе FenixSQL

В нашем случае последняя команда отработала с ошибкой, поэтому смело отменяем её – нажимаем «Rollback».

После отключения снова подключаемся к БД, только теперь в поле «Protocol» выбираем «TcpIp», в поле «Host» указываем адрес сервера, остальные поля оставляем без изменений. Нажимаем «Connect».

Настройка Tcp/Ip соединения в программе FenixSQL

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

Успешное выполнение вставки записи с русскими буквами в программе FenixSQL

Чтобы изменения вступили в силу, нужно выполнить команду COMMIT. После этого при просмотре содержимого можно увидеть три записи.

Просмотр записей таблицы в программе FenixSQL

Теперь ещё немного важной информации о программе FenixSQL. Разработчики СУБД сообщили мне, что программа FenixSQL - это старая и уже не поддерживаемая программа. И в будущем планируется выпуск своего инструмента. А сейчас, рекомендуется использовать для администрирования программу IBExpert. В связи с этим напишу пару слов о программе IBExpert.

Программа IBExpert

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

Итак, сначала нужно скачать программу IBExpert Personal Edition здесь (требуется регистрация), установить её, после установки скачать архив ibe_sfx.exe и распаковать его в папку установки с заменой всех файлов (у меня – это «C:\Program Files\HK-Software\IBExpert», см. картинку). В дальнейшем, распаковку из этого архива нужно будет делать после каждого обновления программы IBExpert Personal Edition.

Распаковка архива с программой IBExpert

После распаковки архива, программу можно запустить. При первом запуске вы увидите вопрос, предпочитаете ли вы SDI-интерфейс, где у вас будет много отдельных окошек. Я ответил «No», т.к. мне больше нравится MDI-интерфейс (много окон в одном большом). В будущем это всегда можно поменять в настройках программы.

Вопрос о предпочитаемом интерфейсе программы IBExpert

Дальше появилось окошко приглашающее зарегистрировать одну или более баз данных. Нажмите «OK».

Призыв к регистрации базы данных в программе IBExpert

После первого запуска, желающие могут сразу выбрать другой язык интерфейса. Делается это в настройках (меню «Options -> Environment Options…») на вкладке «Preferences» в поле «Interface Language».

Выбор русского языка в программе IBExpert

Теперь давайте зарегистрируем в программе IBExpert нашу тестовую БД. Для этого в меню выбираем «База данных -> Зарегистрировать базу данных» и в диалоге заполним поля «Имя сервера» (здесь у нас будет «localhost»), «Файл базы данных» (файл нашей тестовой БД), «Версия сервера» (здесь нужно выбрать «Firebird 2.5»), «Пользователь», «Пароль» и «Файл клиентской библиотеки» (для Win32 библиотека должна быть в системной папке «C:\Windows\System32\», т.е. здесь должно быть указано «C:\Windows\System32\GDS32.DLL»).

Регистрация базы данных в программе IBExpert

После этого нажимаем «Регистрировать» и наша база данных появляется на панели «Эксплорер БД».

Зарегистрированная база данных в программе IBExpert

Давайте откроем её. Для этого дважды щёлкните по нашей БД на панели «Эксплорер БД». К сожалению, после этого появилась уже знакомая ошибка «Запуск программы невозможен, так как на компьютере отсутствует krb5_32.dll. Попробуйте переустановить программу». После этого окошка появляется ещё пара окошек с различными ошибками.

Ошибка при открытии базы данных в программе IBExpert

Проблема решается так же, как и для программы FenixSQL. Закройте программу, пропишите для ярлыка рабочую папку («C:\путь установки\RedDatabase\bin», у меня это «C:\Program Files\Red Soft Corporation\Red Database\bin»), перезапустите программу IBExpert снова и снова попробуйте открыть базу.

Настройка рабочей папки программы IBExpert

Открытая база данных в программе IBExpert

Как видите, база данных открылась, и в ней видно нашу таблицу DWARF. Проверим, как выглядят в программе русские буквы. Дважды щёлкнем на таблице и в открывшемся окне, перейдём на закладку «Данные». С русскими буквами всё в порядке.

Отображение таблицы в программе IBExpert

Попробуем здесь вставить ещё одну запись в таблицу. Для этого выберем меню «Инструменты -> SQL-редактор» и в появившемся окне выполним следующий скрипт:

INSERT INTO DWARF VALUES (4, 'Скромник', 'Застенчивый и часто смущённый, если на него обращают внимание.');

Вставка новой записи в таблицу в программе IBExpert

Как видите, команда выполнилась успешно. После этой команды можно выполнить команду COMMIT и проверить появилась ли новая запись в БД. У меня запись появилась, проблем с русскими буквами не было.

Подробно о программе писать не буду, т.к. есть отличная онлайн документация (на английском языке), см. меню «Помощь -> Online documentation». Документация находится здесь.

Написание внешних процедур и функций на Java

(Добавлено 27.04.2016) Возможность написания внешних процедур (External Stored Procedure - ESP) и внешних функций (External User Defined Function - EUDF) на Java была добавлена в СУБД «Ред База Данных» в версии 2.1. Чтобы использовать эту возможность у вас должна быть установлена JDK версии 1.6 или выше.

Параметры взаимодействия настраиваются с помощью файла jvm.conf, который находится в каталоге установки СУБД. В файле первой незакомментированной строкой должен быть указан путь к виртуальной машине Java или имя переменной окружения, например, <jvm_from_JAVA_HOME>. Комментарии здесь – это строки, начинающиеся с символа #. Я укажу здесь полное имя. У меня это будет C:\Program Files\Java\jdk1.7.0_25\jre\bin\client\jvm.dll.

Все используемые Java-библиотеки, в том числе и те в которых будут реализованы ваши внешние процедуры и функции, должны находиться в папке java_lib, которая находится в каталоге с установленной СУБД. Во всех остальных случаях вам нужно будет прописать полные пути к таким библиотекам в файле jvm.conf в строке, начинающейся на «-cp ». Разделяются пути символом «;» для Windows-систем или «:» для Unix-систем. Вот пример строки с перечислением Java-библиотек:

-cp C:\Test\commons-beanutils-1.6.1.jar;C:\Test\commons-collections-2.1.jar

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

    1. Тело внешней процедуры или функции. Собственно это и есть реализации вашего функционала. Тело представляет из себя публичную статическую функцию публичного класса, который находится внутри Java-библиотеки (в файле *.jar).
    2. Объявление внешней процедуры или функции. С помощью объявления СУБД знает к какому статическому классу и к какой функции Java нужно обращаться при вызове той или иной внешней процедуры или функции.

Теперь немного информации о том, что нужно знать о написании тела внешней процедуры или функции:

    1. В качестве входных параметров можно использовать типы, описанные в таблице ниже.
    2. У внешней функции не может быть больше 10-ти входных параметров.
    3. В качестве выходных параметров внешней процедуры могут быть только java.sql.ResultSet и void.
    4. Внешняя функция может возвращать параметр любого типа, указанного в таблице ниже.

А вот и таблица соответствия типов SQL и Java:

Тип SQL Примитивный тип Java Объектный тип Java
CHAR - String
VARCHAR - String
NUMERIC - java.math.BigDecimal
SMALLINT short Short
INTEGER int Integer
BIGINT long Long
FLOAT float Float
DOUBLE double Double
BLOB - org.firebirdsql.jdbc.FirebirdBlob
DATE - java.sql.Date
TIME - java.sql.Time
TIMESTAMP - java.sql.Timestamp

Итак, сделаем тело нашей функции. Я буду использовать Eclipse. В нём я создам проект (я буду использовать Maven, поэтому проект будет Maven Project) с классом Main (имя класса может быть любым). В классе Main я сделаю функцию getFiles, которая будет возвращать список всех файлов в указанной директории в виде таблицы, т.е. будет возвращаться объект ResultSet. Для того, чтобы сделать объект ResultSet я буду использовать класс MockResultSet библиотеки mockrunner-jdbc, которая есть в центральном хранилище Maven здесь (страница проекта Mockrunner находится здесь). Вот полный код класса Main:

package ru.proghouse.rdb;
 
import java.io.File;
import java.sql.ResultSet;
import java.sql.Timestamp;
 
import com.mockrunner.mock.jdbc.MockResultSet;
 
public class Main {
 
   public static ResultSet getFiles(String path) {
      //Создаём таблицу.
      MockResultSet rs = new MockResultSet("files");
      //Добавляем поля.
      rs.addColumn("FileName");
      rs.addColumn("LastModified");
      //Получаем список файлов.
      File filePath = new File(path);
      File[] files = filePath.listFiles();
      //Добавляем записи в таблицу.
      for (File file : files)
         rs.addRow(new Object[] {file.getName(), new Timestamp(file.lastModified())});
      //Возвращаем результат.
      return rs;
   }
}

После того как класс написан нужно импортировать наш проект в jar-файл и положить его в папку java_lib или прописать ссылку на него конфигурационном файле jvm.conf, о чём уже было написано выше. После того как это будет сделано лучше переподключиться к СУБД.

Затем мы должны объявить процедуру. Я сделаю это в программе IBExpert. Скрипт объявления будет следующим:

CREATE OR ALTER PROCEDURE GETFILES (PATH VARCHAR(255)) RETURNS (FILENAME VARCHAR(50), LASTMODIFIED TIMESTAMP) LANGUAGE JAVA EXTERNAL NAME 'ru.proghouse.rdb.Main.getFiles';

Как видите, здесь указывается имя процедуры (у меня это GETFILES), затем входные параметры (у меня один параметр PATH), а затем выходные поля, если они есть (у меня – это FILENAME и LASTMODIFIED). После ключевого слова LANGUAGE всегда указывается JAVA, а после EXTERNAL NAME указывается уникальное имя нашей функции (сначала идёт имя пакета «ru.proghouse.rdb», затем имя класса «Main» и затем имя функции «getFiles»).

После того как процедура объявлена нужно вызвать команду COMMIT и после этого процедурой можно пользоваться. Вот так будет выглядеть вызов нашей Java-процедуры и получение таблицы с файлами:

SELECT * FROM GETFILES('C:\Program Files\Red Soft Corporation\Red Database\bin');

В результате процедура вернёт таблицу со всеми файлами в указанной папке:

Результат вызова внешней Java-процедуры в СУБД «Ред База Данных»

Аналогично сделаю внешнюю функцию. Для этого я добавлю в свой класс Main функцию lastModified, которая будет возвращать дату последнего изменения указанного файла:

public static Timestamp lastModified(String fileName) {
   File file = new File(fileName);
   return new Timestamp(file.lastModified());
}

После того как будет готов новый jar-файл нужно будет переподключиться к СУБД. Скрипт объявления внешней функции будет следующим:

DECLARE EXTERNAL FUNCTION GETLASTMODIFIED VARCHAR(255) RETURNS TIMESTAMP LANGUAGE JAVA EXTERNAL NAME 'ru.proghouse.rdb.Main.lastModified';

А вызов функции следующим:

SELECT GETLASTMODIFIED('C:\Program Files\Red Soft Corporation\Red Database\bin\btyacc.exe') FROM RDB$DATABASE;

Подробности по синтаксису и больше примеров можно узнать в официальной документации, которая устанавливается вместе с СУБД.

Итог

Дальнейшее рассмотрение СУБД «Ред База Данных» я считаю ненужным, т.к. я не могу знать, что именно интересует каждого из читателей. Документация по СУБД достаточно подробная и полная и у разработчиков и администраторов не должно быть больших проблем в освоении. А, если какие либо вопросы и появляются, служба поддержки откликается достаточно оперативно, что меня очень порадовало.

Если у вас есть опыт использования СУБД «Ред База Данных», черкните пару строк в комментариях к этой статье и дайте свою оценку.

Tags: Firebird Ред База Данных Обзоры СУБД Обзоры программ

Комментарии   

elpik
0 #1 elpik 26.04.2016 18:37
и где заявленные хранимки на яве?...
все что показано делает ФБ, ред БД - тут никаким боком не видно...
Цитировать
Alex
0 #2 Alex 27.04.2016 15:33
Цитирую elpik:
и где заявленные хранимки на яве?...
все что показано делает ФБ, ред БД - тут никаким боком не видно...

Я добавил в статью раздел с примерами: "Написание внешних процедур и функций на Java".
Цитировать
elpik
0 #3 elpik 01.05.2016 18:32
Ну вы даете.
Это не встроенная поддержка Java, это подключение внешней функции. Таким образом можно подключать любые функции написанные на любом языке упакованные в Dll, и это снова заслуга ФБ, а не РЕД БД.
Хотелось бы увидеть реальный список доработок ФБ.
Цитировать
Роман
0 #4 Роман 04.05.2016 13:34
Цитирую elpik:
Ну вы даете.
Это не встроенная поддержка Java, это подключение внешней функции. Таким образом можно подключать любые функции написанные на любом языке упакованные в Dll, и это снова заслуга ФБ, а не РЕД БД.
Хотелось бы увидеть реальный список доработок ФБ.

Это не тоже самое. Советую внимательно изучить документацию и приведенные примеры, а не бегло посмотреть на приведенный пример. Ред База Данных подключает .jar, а не файлы dll, и использует классы, реализованные на Java, а не упакованные в dll. Кроме этого ХП на Java может быть селективной и использовать контекст, в котором вызывается.

То же, о чем говорите вы это UDF, которая берет просто адрес функции и может вызывать, подставляя параметры.

Поддержка UDR (User Defined Routins) в Firebird появилась только в 3.0 и пока отсутствует полная реализация поддержки UDR на Java. Так что, пожалуйста, читайте внимательно.
Цитировать
elpik
0 #5 elpik 09.05.2016 19:04
Роман, не обижайтесь.
Например у меня есть написанная на делфях dll, которая парсит XML, ее функции тоже можно использовать в запросах, и тем не менее это UDF. (ее ничто не называет доработкой ФБ).
Цитировать
Роман
0 #6 Роман 10.05.2016 11:22
Так с этим никто и не спорит. Ваша dll и есть UDF. Мы и не претендуем что мы это реализовывали. Я уж вроде все описал как мог. Ну давайте проще попробуем, на одном примере. Сделайте UDF из которой можно делать выборку, типа select * from myfunc(
Цитировать

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