СУБД Sybase SQL Anywhere
Sybase SQL Anywhere версии 5.5 благодаря высокой отказоустойчивости и штатной поддержке протокола FLEET получила широкое распространение среди разработчиков АС на основе ОСРВ QNX 4.25.
Состав
Основу SQL Anywhere составляют сервер и клиент. Сервер SQL Anywhere – это сетевое приложение, содержащее движок СУБД и предоставляющее все сервисы СУБД. Клиент SQL Anywhere в QNX 4.25 представляет собой разделяемую библиотеку (dbclient), обеспечивающую для прикладных программ доступ к услугам сервера SQL Anywhere. Взаимодействие между клиентом и сервером может осуществляться как по протоколу TCP/IP, так и по протоколу FLEET.
Вторыми по значимости программными компонентами SQL Anywhere являются компонент поддержки режима репликации (SQL Remote), а так же утилита интерактивного взаимодействия с базами данных (Interactive SQL, ISQL).
И наконец, в состав SQL Anywhere входит ряд служебных утилит. Краткие сведения о некоторых из них представлены в таблице:
| Имя файла | Назначение утилиты |
|---|---|
| dbbackup | Создание резервных копий БД |
| dbshrink | Сжатие файлов БД (обычно на 40-60%) |
| dbinit | Создание новой базы данных |
| dbwrite | Управление «записываемыми» файлами (write file) и обеспечение механизма работы с БД только для чтения |
| dbinfo | Вывод в указанный файл информацию о параметрах базы данных, заданных при создании её утилитой dbinit |
| dbxtract | Синхронизация баз данных при организации репликации |
| dbtran | Конвертирование журнала транзакций в командный SQL-файл |
| dbunload | Выгрузка БД. При этом создаётся командный файл RELOAD.SQL |
| dbvalid | Проверка правильности табличных индексов. Используется совместно с dbbackup для поддержки целостности БД |
Программные интерфейсы
Версия СУБД Sybase SQL Anywhere для QNX 4.25 предоставляет разработчикам два программных интерфейса для взаимодействия между клиентом и сервером:
- ODBC, реализован в виде API.
- Встроенный SQL – позволяет "встраивать" SQL-операторы прямо в тексты программ-приложений на языках C или C++. Впоследствии такие приложения подвергаются обработке специальным препроцессором, который заменяет SQL-операторы на вызовы соответствующих функций и процедур. После этого преобразованные тексты приложений представляют собой тексты программ на языке программирования C или C++. Этот интерфейс наиболее широко используется для разработки клиентских приложений в среде QNX, его используют все утилиты СУБД SQL Anywhere.
Защита от сбоев
SQL Anywhere обеспечивает защиту данных от двух категорий сбоев:
- Сбои носителей, возникающие, когда файлы БД, файловая система и устройство хранения становятся недоступными для использования
- Системные сбои, возникающие при отключении питания, или других случаев отказа ЭВМ или ОС, возникшие во время выполнения транзакции.
Защита от сбоев носителей осуществляется своевременным созданием резервных копий, а так же ведением журнала транзакций на отдельном физическом устройстве.
Восстановление после системных сбоев основано на том, что всё выполнение транзакции сохранено на диске, а все прерванные транзакции откатываются, т.е. данные всегда находятся в целостном состоянии. Во время работы SQL Anywhere ведёт три журнала (для каждого из журналов можно задать формирование зеркального файла):
- журнал контрольных точек (checkpoint log) - используется при восстановлении БД после системных сбоев или при крахе серверного процесса. Файл БД состоит из страниц. Перед тем, как обновить страницу всегда создается копия ее оригинала. Эти копии и составляют журнал контрольных точек
- журнал откатов (rollback log) - создаётся отдельно для каждой транзакции для отслеживания изменений, вносимых в таблицы текущей транзакцией. Журнал используется для того, чтобы выполнить операцию ROLLBACK при восстановлении после сбоя. При завершении транзакции её журнал отката удаляется.
- журнал транзакции (transaction log) – хранит все изменения в БД (вставки, удаления, модернизация, commits, откаты, изменения схемы БД и т.д.). Можно запускать сервер без журнала транзакций. При этом сохранение изменённых страниц будет выполняться при окончании каждой транзакции, что снижает производительность сервера. Для повышения защищённости данных SQL Anywhere позволяет вести 2 идентичных журнала транзакций.
Существует метод ускоренного восстановления, основанный на так называемом «живом» резервировании (live backup). Файл «живого» резерва представляет собой дополнительная копия журнала транзакций, задаваемый в утилите dbbackup опцией –l. Этот файл формируется путём периодического резервирования журнала транзакций, прекращаемого лишь при остановке сервера. «Живое» резервирование используется при нестабильной работе системы, чтобы можно было быстро перезапустить систему.
Репликация
В комплект поставки Sybase SQL Anywhere входит утилита SQL Remote, обеспечивающая формирование системы репликации (тиражирования данных) между базами данных SQL Anywhere. Эта система администрируется из единого центра и наиболее подходит для обмена данными с портативными компьютерами и другими пользователями, связь с которыми есть от случая к случаю. SQL Remote реплицирует данные между "консолидированной" БД и одной или несколькими "удалёнными" БД (рис. 1).

Рис.1. Консолидированная БД и удалённые БД
Консолидированная БД содержит все данные. Удалённые БД могут содержать часть данных или все данные (удалённые БД, разумеется, могут содержать любые другие таблицы, не участвующие в репликации). В качестве удалённых могут выступать как сетевые серверы SQL Anywhere, так и локальные однопользовательские БД.
Рис.1 иллюстрирует общий случай, когда одни данные предназначены для каждого конкретного пользователя, а другие должны совместно использоваться множеством пользователей. Изменения, проведённые в консолидированной БД, тиражируются в удалённые БД. Изменения, проведённые в одной из удалённых БД, попадают в консолидированную БД и затем в другие удалённые БД.
Задача разработчика АС состоит в том, чтобы определить с помощью таблиц, публикаций и триггеров, какие именно данные должны совместно использоваться и с какими удалёнными пользователями.
Применяемый в SQL Remote метод репликации данных с помощью сообщений позволяет центральному серверу обмениваться данными с удалёнными машинами без установления непосредственного соединения между ними. При этом SQL Remote реализует специальный протокол, который гарантирует проведение обновлений в правильном порядке. Кроме того, SQL Anywhere поддерживает иерархическую модель репликации (рис. 2).

Рис.2. Схема репликации в SQL Anywhere




