DB2

DB2
Логотип программы DB2
Тип Система управления базами данных
Разработчик IBM
Написана на C, C++
Операционная система Кроссплатформенное ПО
Первый выпуск 23 мая 1995
Последняя версия 11.5
Лицензия Проприетарная EULA
Сайт ibm.com/db2/ (англ.)
Логотип Викисклада Медиафайлы на Викискладе

DB2 — семейство систем управления реляционными базами данных, выпускаемых корпорацией IBM. Чаще всего, ссылаясь на DB2, имеют в виду реляционную систему управления базами данных DB2 Universal Database (DB2 UDB)[1].

Реализации

[править | править код]

В 2000-е годы СУБД DB2 представлена версиями на следующих платформах:

  • DB2 for Linux, UNIX and Windows v10 для платформ AIX, HP-UX, Linux, Solaris, Windows и Mac OS X
  • DB2 for z/OS v10 для платформ z/OS и OS/390
  • DB2 Server for VM v7.5 для платформ z/VM и z/VSE
  • DB2 for i для платформы IBM i (встроена в систему на аппаратно-программном уровне)

В 1990-е годы также выпускались версии сервера DB2 для OS/2, UnixWare, PTX.

Клиенты СУБД DB2, помимо перечисленных платформ, выпускаются или выпускались в различных версиях также для SINIX, IRIX, классической Mac OS и для MS-DOS, а также в мобильной версии DB2 Everyplace для Windows CE, Palm OS, Symbian OS, Neutrino и виртуальной машины Java.

Начиная с 2000-х годов помимо коммерческих продуктов семейства, IBM распространяет также бесплатный дистрибутив Db2 Community Edition, до середины 2019 года называвшийся DB2 Express-C [2]:

Ограничения DB2 Express-C
  • платформы: Linux (x86, x86-64, POWER), Windows (x86, x86-64), Solaris (x86-64), Mac OS X (x86-64).[3]
  • один экземпляр СУБД использует не более двух процессорных ядер, независимо от того, сколько процессорных ядер имеется на сервере.
  • один экземпляр СУБД использует не более 2 Гбайт оперативной памяти. Это верно для версии 9. Но уже в DB2 Express-C 10-й версии максимальный объём памяти удвоен и составляет 4 ГБ.

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

В начале 1970-х годов Эдгар Кодд, работавший на IBM, разработал теорию реляционных баз данных и в июне 1970 года опубликовал модель манипуляции данными. Для воплощения этой модели он разработал язык реляционных баз данных и назвал его Alpha. IBM предпочла передать дальнейшую разработку группе программистов, неподконтрольной Кодду. Нарушив некоторые принципы реляционной модели, они реализовали её как «структурированный английский язык запросов», сокращённо SEQUEL. Поскольку акроним SEQUEL был на тот момент сторонней зарегистрированной торговой маркой, название сократили до SQL — «структурированный язык запросов».

С 1975 по 1982 год прототип DB2 разрабатывался в IBM под названием System Relational, или System R. Язык SQL впервые был реализован именно в IBM System R, но эта система имела исследовательский характер, а коммерческий продукт, включающий SQL, первой выпустила компания Oracle в 1979 году.

СУБД DB2 получила своё название в 1982 году, когда был выпущен первый коммерческий релиз для VM под названием SQL/DS, и затем релиз для MVS под названием DB2. Долгое время наряду с «DB2» употреблялся вариант «Database 2», также являющийся торговой маркой IBM.

Таким образом, исторически СУБД DB2 возникла из продуктов DB2 для MVS (потомком которого является DB2 for z/OS) и родственного ему SQL/DS для VM (потомок — DB2 Server for VSE & VM). В дальнейшем другим коллективом разработчиков в IBM был реализован сервер OS/2 EE Database Manager, впоследствии эволюционировавший в DB2 v2 для OS/2, AIX и затем Windows, а потом в DB2 UDB (его потомок — DB2 for Linux, UNIX and Windows). Ещё одним коллективом была выполнена интеграция архитектуры DB2 со встроенной базой данных AS/400 (потомок — DB2 for i). IBM постепенно движется по пути интеграции всех этих веток.

Особенности

[править | править код]

Диалект языка SQL, используемый в DB2, за редкими исключениями строго декларативен, система снабжена многофазовым оптимизатором, строящим по этим декларативным конструкциям план выполнения запроса. В диалекте SQL DB2 отсутствуют[обтекаемое выражение] подсказки оптимизатору, мало развит (а долгое время вообще отсутствовал) язык хранимых процедур, и, таким образом, всё направлено на поддержание декларативного стиля написания запросов.

Традиционно для написания хранимых процедур используются обычные языки программирования высокого уровня (Си, Java, PL/I, Кобол и т. д.), это позволяет программисту легко оформлять один и тот же код либо как часть приложения, либо как хранимую процедуру, в зависимости от того, на клиенте или на сервере его целесообразнее выполнять. В настоящее время в DB2 также реализовано процедурное расширение SQL для хранимых процедур в соответствии со стандартом ANSI SQL/PSM.

Оптимизатор DB2 широко использует статистику распределения данных в таблицах (если процесс её сбора был выполнен администратором базы данных), поэтому один и тот же запрос на языке SQL может быть оттранслирован в совершенно различные планы выполнения в зависимости от статистических характеристик данных, которые он обрабатывает.

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

DB2 является единственной реляционной СУБД общего назначения, имеющей реализации на аппаратно-программном уровне (система IBM i; также в оборудовании мэйнфреймов IBM System z реализуются средства поддержки DB2).

Современные версии DB2 обеспечивают расширенную поддержку использования данных в формате XML, в том числе операции с отдельными элементами документов XML.

Обработка ошибок

[править | править код]

Полезной особенностью SQL-сервера DB2 является возможность обработки ошибок. Для этой цели используется структура SQLCA (англ. SQL Communications Area — область связи SQL), возвращающая информацию об ошибке прикладной программе после каждого выполнения SQL-выражения.

Поля структуры SQLCODE и их значения

[править | править код]

Основная, но не всегда полезная диагностика ошибки содержится в поле SQLCODE (тип данных — целое число) внутри SQLCA блока. Она может принимать следующие значения:

  • 0 означает успешное выполнение.
  • Положительное число означает успешное выполнение с одним или более предупреждениями. Например, +100 означает, что не найдены столбцы.
  • Отрицательное число означает неудачу с ошибкой. Например, −911 означает обнаруженный истёкший интервал ожидания блокировки (или мёртвую блокировку), запускающий последовательный откат.

SQLERRM (тип данных — строка из 71 символа). Содержит текстовую строку с описанием ошибки в случае, если поле SQLCODE меньше нуля.

SQLERRD (тип данных — массив, 6 целых чисел). Описывает результат выполнения последнего оператора SQL:

  • 1 элемент — внутренняя информация;
  • 2 элемент — содержит сгенерированное сервером значение поля типа SERIAL для оператора INSERT, либо дополнительный код ошибки;
  • 3 элемент — равен количеству обработанных записей;
  • 4 элемент — примерная стоимость выполнения данного оператора;
  • 5 элемент — смещение ошибки в текстовой записи оператора SQL;
  • 6 элемент — внутренняя информация.

Примечания

[править | править код]
  1. Иногда встречается написание «DB/2», но такое написание неверно: в системе обозначений IBM число в знаменателе дроби означает платформу и «/2» означает продукт для операционной системы OS/2 (или серии компьютеров PS/2). Например, версия DB2 для OS/2 обозначалась «DB2/2»
  2. Get a Jumpstart with IBM Db2 Community Edition
  3. IBM DB2 Express-C Overview. Дата обращения: 23 мая 2009. Архивировано 2 сентября 2010 года.

Литература

[править | править код]
  • Дейт К. Руководство по реляционной СУБД DB2. — М.: Финансы и статистика, 1988. — 320 с. — ISBN 5-279-00063-9.
  • Зикопулос П. К., Бакларц Дж., деРус Д., Мельник Р. Б. DB2 версии 8: официальное руководство = DB2 Version 8: The Official Guide. — М.: КУДИЦ-ОБРАЗ, 2004. — 400 с. — ISBN 5-9579-0031-1.
  • Смирнов С. Н. Работаем с IBM DB2: Учебное пособие. — М.: Гелиос, 2001. — 304 с. — ISBN 5-85438-007-2.
  • Сьюзен Виссер, Билл Вонг. Освой самостоятельно DB2 Universal Database за 21 день = Sams Teach Yourself DB2 Universal Database in 21 Days. — 2-е изд. — М.: Вильямс, 2004. — 528 с. — ISBN 0-672-32582-9.
  • Hook J., Harbus R., Snow D. The Universal Guide to DB2 for Windows NT®. — New Jersey: Prentice Hall PTR, 1999. — P. 504. — ISBN 0-13-099723-4.