Продолжается подписка на наши издания! Вы не забыли подписаться?

Centura (Gupta) SQLBase 7.0.1

Технические характеристики

Centura SQLBase существует только на платформе PC и позиционируется производителем, как встраиваемый сервер баз данных масштаба рабочих групп, не требующий администратора баз данных, для поддержки до 100 пользователей. Существуют реализации SQLBase для Windows 3.x/9x/NT и Novell NetWare, но средства администрирования доступны только для платформы Windows, но позволяют администрировать серверы как под Windows, так и под NetWare. Главные достоинства этого сервера - малая цена (причем допускается даже оплата в рассрочку) и умеренные требования к аппаратному обеспечению. Поддерживаемые протоколы:

TCP/IP: Win16 и Win32.
NetBios: Win16 и Windows NT.
Anonymous Pipes: Win32
IPX/SPX

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

Сейчас доступны версии для 1, 5, 10, 25, 50 пользователей и версия для неограниченного числа пользователей. Версия для одного пользователя поставляется отдельно и называется SQLBase Desktop. Кроме того, имеется версия сервера SQLBase 7.5 с повышенным уровнем защиты данных:

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

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

Инсталляция и первичная настройка

Установить сам сервер на машину с Windows NT или Windows 95 очень просто. Программа инсталляции не задает лишних вопросов и в тоже время делает все необходимое.

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

Стоит упомянуть, что как отдельный продукт фирмой Centura поставляется SQLBase Embedded Deployment Pack (на 50 пользователей). Основная возможность SQLBase Embedded Deployment Pack – инсталляция SQLBase в любой конфигурации в пределах общего допустимого количества пользователей. Установка с помощью этого пакета чрезвычайно гибка и позволяет использовать SQLBase как часть приложения в любой комбинации. Например, можно устанавливать сервер на 20 пользователей для одного заказчика, четыре сервера на 5 пользователей для другого, и 10 Desktop с одним, используя один и тот же SQLBase Embedded Deployment Pack. SQLBase Embedded Deployment Pack предназначен для разработчиков приложений с использованием SQLBase. Ранее покупателю вместе с самим приложением приходилось дополнительно приобретать СУБД SQLBase. Это затрудняло распространение конечных приложений, так как существенно влияло на стоимость приобретения. Использование SQLBase Embedded Deployment Pack решает эту проблему, так как позволяет поставлять конечные приложения, уже включающие SQLBase.

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

Администрирование

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

Но ощущения от использования этого средства двояки:

с одной стороны:

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

с другой:

постоянные "передергивания" интерфейса, неправильное выполнение некоторых функций, в общем, сырость.

Если говорить коротко, это средство справляется с поставленной перед ним задачей, но оставляет неприятное впечатление. То есть оно, с нашей точки зрения, не соответствует гордому званию коммерческой программы, а скорее тянет на программку, наспех слепленную в стенах небольшой компании для внутреннего использования. Будем надеяться, что в следующей версии SQLConsole будет доведена до коммерческого вида.

Прямая работа с SQL из консоли

Для профессионалов командной строки имеется утилита SQLTalk Interactive – интерактивный интерпретатор SQL запросов. С его помощью можно производить любые манипуляции над базой данных. SQLTalk не отличается расширенными возможностями (подсветкой синтаксиса или графическим отображением плана SQL запроса), но зато является простой и удобной утилитой, позволяющей выполнить любой SQL запрос и посмотреть план выполнения запроса. Эта утилита имеет небольшой, но вполне достаточный набор настроек.

Драйверы

В поставку включены драйверы следующих стандартов:

ODBC – производства компании INTERSOLV Inc., поддерживает большинство возможностей стандарта ODBC 3.0

Собственный API – имеет много интересных особенностей, но не отвечает никаким стандартам.

JDBC – обеспечивается поддержка Pure Java (level 4) JDBC драйвера.

Расширения

В SQLBase поддерживается возможность подключения внешних процедур. Разработчики называют их внешними функциями (External Functions). Их можно вызывать из триггеров и хранимых процедур на правах полноправной функции. Но, хотя эти функции могут возвращать значения, они все же не могут быть использованы непосредственно в SQL-запросе. Как вы помните, в нашем определении внешней функции оговаривалась именно возможность использования такой функции в SQL-запросах. Поэтому (извините за кажущееся противоречие) мы констатируем тот факт, что SQLBase не поддерживает внешних функций. Главным достоинством External Functions является то, что их не нужно писать специальным образом. Можно просто описать любую экспортированную из DLL функцию. Например можно использовать функции из стандартной библиотеки производства Microsoft (MSVCRT40.DLL) или даже из системных DLL (USER32.DLL…).

На вопрос, можно ли использовать в запросе внешние источники данных, однозначный ответ дать нельзя. В принципе, специального API для подключения внешних источников данных нет, но внутри хранимых процедур и триггеров можно использовать внешние источники данных за счет использования External Functions. Такой подход несколько ограничен, так как использовать внешние источники данных непосредственно в SQL-запросах не получится, но все же он снимает многие проблемы.

Хранимые процедуры

SQLBase поддерживает хранимые процедуры (созданные пользователем процедуры, хранимые и исполняемые непосредственно на сервере). В качестве языка программирования в них используется SAL (SQLWindows Application Language – 4-GL язык собственной разработки). С ним есть некоторые проблемы. SAL разрабатывался специально для использования в среде SQLWindows, которая определяла логические блоки программы отступом в древесной структуре редактора (смотри Рисунок 1), так что нужды в блоках не было. Для триггеров такого редактора сделано не было, а логические блоки решено было определять по количеству табуляций (отступом). Это зачастую приводит к ошибкам и очень неудобно.

Рисунок 1

Работа с SQL в этом языке не встроена, она базируется на так называемых вызовах SQL API. SQL API - это набор функций с префиксом “SQL”, позволяющих производить SQL-запросы и возвращать данные в программные переменные. Есть две основные функции, позволяющие получать данные из БД: SqlExecute и SqlImmediate.

SqlExecute – позволяет (совместно с SqlPrepare) выполнить заранее подготовленный (откомпилированный) запрос и потом в цикле считывать ResultSet по одной записи. SqlImmediate – позволяет выполнить SQL-запрос, не возвращающий ни одной записи (INSERT, UPDATE, DELЕTE), или получить данные из первой записи, возвращенной оператором SELECT. То есть эта функция не создает курсора, непосредственно возвращая результат в программные переменные. SAL поддерживает основные присущие процедурным языкам программирования возможности: циклы, условные переходы, математические и булевы операторы, вызовы процедур (в том числе и рекурсивные). Скорость выполнения процедур написанных на SAL мало отличается от всех других интерпретаторов (скоростью не блещет, но вполне приемлемо).

В следующем примере происходит изменение поля BALANCE в таблице CHECKING, новое значение которого возвращается через параметр nNewBalance. nAccount – задает номер счета (идентификатор записи), для которого надо произвести изменение. NAmount – задает сумму, на которую необходимо уменьшить остаток на счете.

STORE WD_PROC
PROCEDURE: WITHDRAW
Parameters
	Number: nAccount
	Number: nAmount
	Receive Number: nNewBalance
Local Variables
	String: sUpdate
	String: sSelect
Actions
	Set sUpdate = 'UPDATE CHECKING set \
	               BALANCE = BALANCE - :nAmount \
	               where ACCOUNTNUM =:nAccount'
	Call SqlImmediate(sUpdate)
	Set sSelect = 'SELECT BALANCE from CHECKING \
                   where ACCOUNTNUM = :nAccount \
                   into :nNewBalance'
Call SqlImmediate(sSelect)

С помощью хранимых процедур SQLBase можно возвращать не только отдельные параметры, но и ResultSet-ы. Для этих целей хранимые процедуры разбиваются на блоки состояний: On Procedure Execute – выполняется при первом вызове процедуры (если процедура статическая) или при каждом вызове хранимой процедуры, On Procedure Fetch – выполняется при считывании каждой записи, On Procedure Close – выполняется при закрытии процедуры.

Вот так выглядит процедура, возвращающая ResultSet:

procedure: COMPANY_SP static
Parameters
	Receive String: sName
Local Variables
	Sql Handle: hSqlCur1
	Number:	nInd
Actions
	On Procedure Execute
		Call SqlConnect( hSqlCur1 )
		Call SqlPrepareAndExecute ( hSqlCur1, 'select COMPANY_NAME
			from COMPANY order by COMPANY_NAME into :sName' )
	On Procedure Fetch
		If NOT SqlFetchNext( hSqlCur1, nInd )
			Return 1
		Else
			Return 0
	On Procedure Close
		Call SqlDisconnect( hSqlCur1 )

Для обработки списков можно воспользоваться динамическими массивами. К сожалению, информацию из БД в массивы придется переносить вручную, но сами массивы очень удобны.

Ниже приведена процедура, заполняющая таблицу tmr миллионом записей. Оговоримся - дождаться загрузки 1 000 000 записей при наличии кластерного индекса нам не удалось.

Добавление новых записей после 30 000 (2xPII-300, 256MB RAM, UWSCSI...) происходило очень долго даже после выполнения update statistics on database. Дождаться добавления даже 10 записей в таблицу tmr, содержащую 30 000 записей, было невозможно. По-видимому, проблема связана с некорректной реализацией кластерных индексов. Очень сильно зависит от правильности создания индекса. При создании индекса в операторе “SIZE xxx ROWS” нужно указывать максимальное количество строк в таблице. Проще всего вообще не использовать кластерных индексов. При работе с другими серверами применение кластерных индексов давало существенный прирост производительности. Вторая проблема связана с тем, что для использования функций SAL SalNumberRandom (получение случайного числа), SalNumberToStrX (преобразование числа в строку) и других необходимо их продекларировать. В документации сказано, что для этого нужно выполнить скрипт, находящийся в файле “Sqlsal32.sql”. Проблема в том, что этот скрипт говорит серверу, что эти функции находятся в cdlli10.dll. На самом деле такой DLL в поставке. Зато есть “сdlli11.dll” и “сdlli15.dll”. Поэтому, в файле “Sqlsal32.sql” предварительно необходимо заменить по контексту “cdlli10.dll” на “сdlli11.dll” или на “сdlli15.dll”.

Скрипт, создающий таблицу:

CREATE TABLE tmr (
       f_int1               INTEGER NOT NULL,
       f_int2               INTEGER,
       f_vchar1             VARCHAR(250),
       f_dec1               DECIMAL(12,3),
       f_float1             FLOAT,
       f_Date1              DATETIME
);

CREATE UNIQUE CLUSTERED HASHED INDEX XPKtmr ON tmr
(
       f_int1
)
SIZE 100 ROWS;


ALTER TABLE tmr
       PRIMARY KEY (f_int1);

Процедура FILL1m, вносящая 1 000 000 записей в таблицу tmr:

-- Перед созданием этой процедуры необходимо выполнить 
-- скрипт "Sqlsal32.sql", предварительно заменив по контексту 
-- "cdlli10.dll" на "сdlli11.dll".
ERASE FILL1m;
store FILL1m
procedure: FILL1m static
Parameters
Local Variables
	Sql Handle:	hSql
	Number:		F_INT1
	Number:		F_INT2
	String:		F_VCHAR1
	Number:		F_DEC1
	Number:		F_FLOAT1
	Number:		nTo
	Date/Time:	F_DATE1
Actions
	On Procedure Startup
		Call SqlConnect( hSql )
	On Procedure Execute
		Call SqlImmediate(  'select count(*) from tmr into :F_INT1' )
		Set F_INT1 = F_INT1 + 1
		Set nTo = F_INT1 + 100000
		While F_INT1 < nTo
			Set F_INT2   = SalNumberRandom (  )
			Set F_VCHAR1 = SalNumberToStrX( F_INT1, 0 ) || ' Test Item'
			Set F_DEC1   = SalNumberRandom (  ) / 3
			Set F_FLOAT1 = SalNumberRandom (  ) / 3
			Set F_DATE1  = SalDateCurrent (  ) + (SalNumberRandom (  ) / 32767 * 365)
			Call SqlImmediate(  'INSERT INTO tmr( F_INT1, F_INT2, F_VCHAR1, F_DEC1, F_FLOAT1, F_DATE1 )
			VALUES( :F_INT1, :F_INT2, :F_VCHAR1, :F_DEC1, :F_FLOAT1, :F_DATE1 )' )
			Call SqlImmediate(  'COMMIT' )
			Set F_INT1 = F_INT1 + 1
	On Procedure Close
		Call SqlDisconnect( hSql )
;

Другие расширения

Создание пользовательских функций, которые можно было бы использовать в SQL-запросах, в SQLBase невозможно. Также невозможно в SQLBase создавать собственные типы данных, расширять синтаксис SQL и создавать хранимые процедуры и триггеры на стандартных языках.

Отладка хранимых процедур

Средства отладки хранимых процедур отсутствуют.

Средства разработки

Вместе с SQLBase непосредственно никаких средств разработки не поставляется, но сам SQLBase входит в поставку: Centura Builder (32-разрядное 4-GL средство разработки этой же фирмы) и SQLWindows (16-разрядный предшественник Centura Builder (смотри Рисунок 1). Количество поставляемых лицензий зависит от типа (Enterprise, Solo…) продукта. Минимально с версией Solo поставляется однопользовательский вариант SQLBase Desktop.

Четез ODBC SQLBase прекрасно стыкуется с такими известными продуктами как Inprise Delphi, Sybase Power Builder, MS Visual Basic и многими другими. Он поддерживается большинством популярных CASE- средств.

Для справки:

Centura Builder – является современным, основанным на 4-GL языке средством быстрой разработки. Этот язык, SAL, похож на Кобол. Именно этот язык используется в хранимых процедурах SQLBase. Отличительной особенностью этого средства является среда разработки, которая осуществляет представление исходного кода в виде аутлайна (дерева) и предоставляет технологию помощи в наборе кода, которая очень похожа на IntelliSense в MS Visual Basic, но появилась раньше.

Во многих средствах разработки третьих фирм можно использовать доступ к SQLBase через ODBC. Для C/C++ разработчиков также доступен прямой доступ к SQLBase. Необходимые для этого заголовочные файлы и библиотеки поставляются непосредственно с SQLBase.

Связь с серверами приложений и другими продуктами

Специальной поддержки серверов приложений в SQLBase не предусмотрено, но так как имеется Multi-threaded API и Multiple Independent Connections, то проблем с использованием SQLBase из серверов приложений быть не должно. Multi-threaded API вместе с Multiple Independent Connections позволяют создавать несколько независимых транзакций в одном приложении и вести их параллельную обработку в разных потоках. Поддержка такого API просто необходима при взаимодействии с Web-серверами.

Centura/Gupta выпускает и собственный сервер приложений, с которым, естественно, SQL Base полностью совместим.

Устойчивость к аварийным ситуациям

SQLBase поддерживает транзакции и .LOG-файлы для восстановления после сбоев. Вложенных транзакций не поддерживается, но имеются так называемые точки отката (save point).

Поддержка русского языка

Без русификации SQLBase позволяет работать с русским языком, но при этом режим независимости от регистра недоступен (функция @UPPER не работает). То есть, слово Ялта будет стоять перед словами арбуз и як. Русификация позволяет использовать для русского языка функции типа @UPPER, иначе эта функция при запросе работать не будет. Для русификации надо заменить файл country.sql на аналогичный, поддерживающий русский алфавит. Никаких дополнительных модификаций не нужно. Но такой файл в поставку не входит. В ближайшее время компания Interface планирует выложить этот файл на свой сайт (www.interface.ru).

В целом SQLBase версии 7 - не самый сильный SQL-сервер. Наиболее целесообразно использовать его в кооперации с другими продуктами фирмы Centura/Gupta. Применение SQLBase версии 7 оправдано в рабочих группах, но как средство управления корпоративными базами данных его рассматривать не приходится. Впрочем, на этом рынке он фирмой-создателем и не позиционируется. Из технических возможностей особо стоит отметить, что подключение внешних процедур не требует никакого дополнительного кодирования - возможно подключение любой динамической библиотеки. Вся необходимая информация вводится при подключении .DLL.


Copyright © 1994-2016 ООО "К-Пресс"