Продукты

Все продукты

				21.06.2013
				

Основы администрирования СУБД QDB в ЗОСРВ «Нейтрино»

А. Ермолинский 

В состав ЗОСРВ «Нейтрино» входит компактная встраиваемая СУБД QDB, основанная на проекте SQLite. Эта легковесная СУБД поддерживает систему команд SQL-92 и достаточно проста в администрировании. QDB содержит серверную и клиентские части, а также использует собственный менеджер ресурсов в виде псевдоустройства.

Основным инструментом, отвечающим за функционирование баз данных QDB в ЗОСРВ «Нейтрино» является сервер-утилита qdb. С помощью нее происходит инициализация БД с параметрами, указанными в командной строке и конфигурационном файле.

Рассмотрим на примере, как создать простейшую БД, и основные возможности управления ею.

Создание БД с использованием минимальной конфигурации

Для начала нужно создать каталог, в котором будут находиться файл БД, файл конфигурации и другие служебные файлы. Это могут быть разные каталоги, но для удобства в данном примере все необходимые файлы мы будет помещать в один корневой для нашей БД каталог - /db.
В каталоге /db создадим пустой файл конфигурации qdb.cfg, который в дальнейшем будет иметь следующую структуру:

 [имя базы данных
      
     Filename=имя файла базы данных 
      
     другие параметры 

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

Для того, чтобы начать работать хотя бы с одной БД, заполним файл qdb.cfg как минимум двумя строками:

 [mybase] 
      
     Filename=mybase 

Таким образом, мы указали, что имя БД – mybase, а также одноименное название имеет и сам файл БД, хотя названия могли и отличаться. Также нужно иметь ввиду, что мы указали относительный путь файла БД, то есть файл БД mybase будет создан при запуске qdb в том же каталоге, где располагается и файл конфигурации qdb.cfg. Если требуется создать файл БД в другом месте, следует указать полный путь в опции Filename.

На данном этапе уже можно запустить сервер qdb с указанием пути конфигурационного файла:

 # qdb –c /db/qdb.cfg 

В результате будут созданы следующие файлы и каталоги:
  • псевдоустройство (ресурс-менеджер) /dev/qdb, в котором находятся файлы .control иmybase. Путевое имя ресурс-менеджера можно изменить, задав его опцией –n точка монтирования; 
  • файл БД mybase в каталоге /db нулевого размера, т.е. пустой. 
Можно запустить клиентскую утилиту qdbc и проверить возможность работы с БД mybase, указав в параметрах имя БД в каталоге ресурс-менеджера:

 # qdbc –d /dev/qdb/mybase 

Если соединение с БД прошло успешно, появится командная строка, в которой можно вводить команды формата SQL. Создадим тестовую таблицу test в нашей БД:

 SQL> create table test (a char, b char) ; 

После чего можем убедиться, что файл /db/mybase перестал быть пустым, а также в каталоге/db появился служебный файл mybase-journal, который содержит в себе информацию о действиях с данными БД mybase.

Мы создали минимальную конфигурацию БД, для того, чтобы можно было производить элементарные действия – создавать и редактировать БД. Но QDB предоставляет множество других функций и возможностей, которые обеспечивают легкое управление созданными БД с помощью добавления новых опций в файл конфигурации и параметров запуска сервера qdb. Рассмотрим некоторые из них.

Инициализация БД по шаблону

При создании БД с минимальной конфигурацией, как мы могли убедиться, создается пустой файл mybase, который затем можно заполнять с помощью программных API или интерфейса клиента qdbc. Но существует возможность создания файла БД по уже заранее приготовленному шаблону, например, с готовыми пустыми таблицами или другими элементами БД. Для этого нужно:
  • создать файл schema.sql (так как мы снова не указали явный путь, то создадим файлschema.sql в одном каталоге с конфигурационным файлом, все в том же /db) и заполнить его, например, следующим образом:

 CREATE TABLE workers( 
      
     workerid INTEGER PRIMARY KEY AUTOINCREMENT, 
      
     firstname TEXT, 
      
     lastname TEXT 
      
     ); 
  • указать путь к schema.sql в секции [mybase] конфигурационного файла, т.е. добавить опцию Schema File=schema.sql.
Удалим созданный ранее файл БД /db/mybase. Теперь при повторном запуске qdb –c /db/qdb.cfg будет создан непустой файл mybase с уже готовой для заполнения таблицейworkers.

При каждом редактировании файла qdb.cfg, для вступления изменений в силу, необходимо уничтожать текущий процесс qdb и перезапускать его.

Резервное копирование

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

Создадим каталог /db/backup.

В конфигурационном файле добавим в секцию нашей БД [mybase] опцию Backup Dir=/db/backup. Также добавим опцию Compression=bzip (более эффективное сжатие) илиCompression=lzo (более быстрое сжатие), если требуется архивировать резервную копию. По умолчанию сжатие копии не производится.

Создание резервной копии БД можно произвести одним из трех способов:
  • из программного приложения, используя API qdb_backup(); 
  • запуском клиента qdbc с опцией –B: 
 # qdbc –d /dev/qdb/mybase –B 
   
  • передачей сообщения ресурс-менеджеру QDB: 

 # echo backup mybase >/dev/qdb/.control 

Восстановление поврежденной или отсутствующей БД из копии выполняется запуском сервераqdb с опцией –R и указанным типом восстановления (auto, manual и set).

Удалим существующую /db/mybase и перезапустим сервер qdb с параметром auto:

 # qdb –c /db/qdb.cfg –R auto 

Если в каталоге /db/backup находилась резервная копия, то файл БД /db/mybase будет восстановлен из него, но если копии по указанному пути не было, то будет создана новая БД согласно шаблону schema.sql или пустой файл, если файл шаблона не используется.

Опция –R manual не восстанавливает файл БД из резервной копии, если он поврежден или отсутствует, а только лишь создает новый файл БД в случае его отсутствия, согласноschema.sql. Если БД повреждена, никакие действия не производятся. Это может быть полезно для дальнейшего анализа поврежденной БД, так как файл поврежденной БД сохраняется.

Для того, чтобы поврежденная БД могла восстанавливаться автоматически, можно использовать опцию –X при старте qdb. В качестве параметра выступает путь к скрипту, который содержит команды, обеспечивающие при обнаружении поврежденной БД: 
  • завершение процесса qdb и связанных с БД приложений; 
  • удаление поврежденной БД; 
  • запуск qdb, восстановление БД, запуск приложений, использующих QDB. 

Связывание баз данных

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

Для связывания нескольких БД (attached DB) в одну необходимо в файл конфигурации в секции главной БД (master DB) добавить параметр Auto Attach = имя_базы_данных столько раз, сколько частей требуется присоединить. Разумеется, до этого в файле должны присутствовать секции привязываемых БД. Например:

 [mybase1] 
      
     Опции mybase1\\ [mybase2] 
      
     Опции mybase2 
      
     [mybase] 
      
     Auto Attach = mybase1 
      
     Auto Attach = mybase2 
      
     Другие опции mybase 
   
     
Здесь mybase1 и mybase2 – имена привязываемых БД (именно самих БД, но не их файлов), которые необходимо объединить в общую БД mybase (или добавить к ней).

Важно! Названия привязываемых БД в параметре Auto Attach должны быть перечислены в том же порядке, что их секции вначале, как показано в примере.

Для управления связанными БД в конфигурационном файле предусмотрены опции Vacuum Attached, Backup Attached и Size Attached. Например, для корректного создания резервной копии и восстановления из нее главной БД (master BD) рекомендуется в ее секции указать опцию Backup Attached = TRUE. При старте QDB сервер qdb должен быть запущен с параметром –R set (назначение других параметров - auto и manual приведено выше).

Итак, были перечислены и рассмотрены в примерах основные возможности администрирования СУБД QDB в ЗОСРВ «Нейтрино».  

Дополнительная информация:




				

Возврат к списку