СУБД IBM® DB2® Express-C недавно дополнена несколькими важными функциями и усовершенствованиями, которые прежде были доступны только в платных версиях DB2 для Linux®, UNIX® и Windows®. Из этой статьи вы узнаете, как можно воспользоваться новыми возможностями, относящимися к производительности, разработке приложений, хранению и защите данных, а также многим другим аспектам использования СУБД.

Рауль Ф. Чонг, руководитель программы DB2 on Campus, IBM

фото Рауля ЧонгаРауль Ф. Чонг (Raul F. Chong) – популяризатор и руководитель программы DB2 on Campus – работает в лаборатории IBM в Торонто. Его главная обязанность заключается в расширении сообщества DB2 во всем мире. Рауль – сертифицированный специалист по решениям и администрированию DB2, а также по разработке приложений. С 1997 года он занимал различные должности в IBM и является основным автором книги "Understanding DB2, Learning Visually with Examples" (DB2 – наглядное обучение на примерах), второе издание (ISBN-10: 0131580183).



02.07.2010

Введение

DB2 Express-C – это бесплатная, общедоступная редакция DB2. Ее можно использовать в составе производственной системы, внедрять в свои приложения и распространять вместе с ними или просто применять в целях разработки. Все это бесплатно! Это изображение представляет собой ссылку для бесплатной загрузки СУБД DB2 Express-C 9.7.2.

СУБД DB2 Express-C можно установить на сервер любого размера, но она будет использовать только два процессорных ядра и 2 ГБ оперативной памяти. Более того, не существует никаких ограничений на размер базы данных. На фоне общедоступных редакций СУБД других производителей широкий набор функций, предоставляемых DB2 Express-C, смотрится впечатляюще.

Версия DB2 Express-C 9.7 вышла в июне 2009 года. С тех пор образ DB2 Express-C обновлялся дважды. Последним было обновление 9.7.2, выпущенное 28 мая 2010 г. В этой статье рассматриваются некоторые из ключевых функций и усовершенствований, добавленных между версией 9.7 и текущей версией 9.7.2. Полное описание всех новых функций, включенных в версию 9.7, и два ее обновления содержатся в разделе Что нового – обзор Информационного центра IBM DB2 Database для Linux, UNIX и Windows.

Усовершенствования в области блокировок

С появлением новой семантики Currently Committed (CC) уровня изоляции Cursor Stability (CS) «писатели» (операции UPDATE) больше не мешают «читателям» (операции SELECT). Теперь операции чтения получают зафиксированные на данный момент значения, не дожидаясь завершения операции UPDATE. Это усовершенствование повышает параллелизм и уменьшает число взаимных блокировок.

Например, предположим, что имеется таблица T1 со следующим содержанием:

Таблица 1. Содержание таблицы T1
FIRSTNAME LASTNAME
Raul Chong
Jin Xie

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

update T1 set lastname = 'Smith' where firstname = 'Raul'

Затем приложение AppB выдает следующий оператор:

select lastname from T1 where firstname = 'Raul' with CS

До DB2 9.7 оператор, выданный AppB, ожидал бы окончания исключительной блокировки, выполненной оператором update приложения AppA (команда записи). При включении этого нового поведения CS (в новых базах данных DB2 9.7 это поведение по умолчанию) оператор из AppB, вместо ожидания, возвращает зафиксированное на данный момент значение. В данном случае возвращается значение Chong, потому что обновление, выданное AppA, еще не зафиксировано.


Повышение производительности

В DB2 9.7 добавлена функция концентратора операторов, которая повышает производительность программ, использующих динамический SQL и написанных на таких языках, как Ruby и PHP. Концентратор операторов ищет SQL-операторы, которые выглядят в точности одинаково, за исключением значений параметров. Затем он, как предполагает название, концентрирует эти многочисленные операторы в один оператор. Например, с помощью концентратора операторов следующие операторы

SELECT name FROM employee WHERE empid = 10
SELECT name FROM employee WHERE empid = 20
SELECT name FROM employee WHERE empid = 30

концентрируются в один:

SELECT name FROM employee WHERE empid = ?

Вопросительный знак (?) служит маркером параметра. В данном конкретном примере DB2 на этапе выполнения подставит значения 10, 20 и 30.

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

Другое усовершенствование в области производительности связано с хранением крупных объектов (LOB). Теперь крупные объекты, не превышающие определенного размера, можно хранить вместе со строками данных. Это повышает производительность при работе с такими крупными объектами, поскольку к ним можно обращаться через буферный пул.


Усовершенствования в сфере разработки приложений

В DB2 9.7 появилось много усовершенствований для разработчиков приложений.

  • Триггеры и определяемые пользователем функции (UDF) дополнены расширенной поддержкой SQL PL. До версии DB2 9.7 поддерживался только встроенный SQL PL, который представляет собой лишь небольшое подмножество SQL PL.
  • Для хранимых процедур и UDF SQL PL можно задавать значения параметров по умолчанию и присваивать им имена. Кроме того, теперь поддерживаются новые типы данных: Boolean, cursor, row и array.
  • Теперь поддерживается альтернативный синтаксис SQL, допускающий использование, например, ROWNUM и ROWID.
  • DB2 9.7 поддерживает концепцию модуля (она напоминает идею "пакета" в Oracle). Модуль можно использовать для связывания определений родственных объектов базы данных.
  • DB2 9.7 теперь поддерживает неявное приведение между типами данных. Это полезно для динамических языков, таких как PHP и Ruby. Например, теперь допустимо следующее:
    create table t1 (col1 int)
    select * from t1 where col1 = '42'

    В этом примере можно сравнить строковое значение '42' со значением столбцаcol1, имеющего тип integer.
  • Появилось множество новых функций для работы с датами, строками и другими типами данных.
  • Теперь DB2 поддерживает созданные глобальные временные таблицы (Create Global Temporary Tables – CGTT), которые представляют собой временные таблицы с данными, доступными только в продолжение сеанса. Разница между CGTT и объявленными глобальными временными таблицами (Declared Global Temporary Tables – DGTT) состоит в том, что в случае CGTT определение таблицы сохраняется в таблицах каталога DB2. Поэтому после создания CGTT ее можно использовать в любом сеансе, не создавая заново. Однако строки таблицы между сеансами не сохраняются.
  • Для ссылки на глобальные объекты теперь можно использовать публичные псевдонимы (или публичные синонимы). До версии DB2 9.7 все объекты DB2 имели уникальное имя, состоящее из двух частей. Первая часть – имя схемы, а вторая – имя объекта. Создав публичный синоним, можно ссылаться на объект без имени схемы, независимо от идентификатора пользователя, связанного с базой данных. Например:
    connect to sample user arfchong using mypsw
    create public synonym raul for table arfchong.staff
    select * from raul                                 ## работает правильно
    select * from arfchong.raul                        ## ошибка
    connect to sample user db2admin using psw
    select * from raul                                 ## работает правильно
  • В DB2 9.7 правила зависимости объектов ослаблены в целях обеспечения более гибкого развития схемы. Например, предположим, что имеет место следующая зависимость:

    View2 --> View1 --> Table1

    Раньше, если нужно было изменить представление View1, сначала пришлось бы удалить представление View2, поскольку оно зависит от View1. Начиная с версии DB2 9.7, удаление View2 больше не потребуется. Теперь DB2 автоматически выполняет ревалидацию View2 либо сразу, либо при использовании представления. Это может быть полезно при тестировании приложений или в тех случаях, когда нужно изменить схему базы данных (например, добавить столбцы).

    Вот некоторые другие усовершенствования в области развития схемы:

    • столбцы можно переименовывать;
    • к нескольким операторам CREATE добавлен параметр REPLACE, так что больше не нужно сначала выполнять операцию удаления. Таким образом, все права на объект сохраняются;
    • в операторе ALTER COLUMN теперь можно использовать SET DATA TYPE для всех типов.
  • Расширены надстройки для Visual Studio, а также IBM Data Server Provider для .NET. Теперь он поддерживает хост-переменные, модули, данные типа ARRAY, составные операторы и метки времени переменной длины.

    В обновлении 9.7.2 32-разрядные версии IBM Data Server Provider для .NET включены в пакет 64-разрядных драйверов. При установке 64-разрядных драйверов устанавливаются и 32-разрядные драйверы в каталоге sqllib\bin\netf20_32.

    Появилось новое ключевое слово файла db2dsdriver.cfg, QueryTimeout, которое определяет, сколько времени клиент должен ожидать исполнения запроса.

    В число других усовершенствований входит способность операторов CALL принимать именованные аргументы в любом порядке.

  • В JDBC и SQLJ внесены дополнения для поддержки некоторых усовершенствований, описанных выше.
  • Поддерживается быстрое удаление при исполнении оператора TRUNCATE SQL.
  • Поддерживаются новые типы данных, такие как NUMBER, VARCHAR2 и TIMESTAMP с точностью, поддерживающей доли секунды.
  • Улучшена поддержка приложений Python-DB2.
  • В число усовершенствований в области pureXML входит поддержка декларируемых глобальных временных таблиц.
  • Поддерживается новый SQL-синтаксис с выражениями LIMIT и OFFSET. Выражение LIMIT полезно, когда нужно ограничить количество записей, возвращаемых SQL-оператором. Например, если таблица USERS содержит 100 записей, но вы хотите, чтобы возвращались всего пять, можно использовать следующий оператор:
    SELECT * FROM users LIMIT 5

    Выражение OFFSET указывает, сколько строк пропустить, начиная с первой строки, прежде чем начать выдавать результат. Например, если нужно получить строки таблицы USERS с 11 по 15, можно использовать следующий оператор:

    SELECT * FROM users LIMIT 5 OFFSET 10

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

    Выражения LIMIT и OFFSET разрешены по умолчанию. Однако если эти выражения не работают, их можно включить, выполнив следующие команды:

    $ db2set DB2_COMPATIBILITY_VECTOR=MYS
    $ db2stop
    $ db2start

Усовершенствования в области хранения данных

«Сколько данных может хранить DB2?» — популярный вопрос, который задают пользователи и потенциальные пользователи DB2. С каждой новой версией продукта группа разработки IBM DB2 продолжает раздвигать эти границы. В DB2 9.7 ограничения по размеру больших и временных табличных пространств увеличены вчетверо. Например, в большом табличном пространстве со страницами по 32 КБ теперь может храниться 64 ТБ данных. Раньше оно могло вместить «всего» 16 ТБ.


Усовершенствования в области безопасности

В предыдущих версиях DB2 системные администраторы имели очень широкий доступ ко всему. В DB2 9.7 модель безопасности дополнена возможностью разделения обязанностей. Это сводит к минимуму риск утечки данных и может помочь организациям соблюдать нормативные требования. Добавлено несколько новых уровней административных полномочий. Два из них – это DATAACCESS и ACCESSCTRL, которые теперь можно использовать соответственно для наделения пользователя правами доступа к данным или для предоставления ему прав по предоставлению доступа к данным другим пользователям. Это означает, что администратор безопасности может отменить эти уровни полномочий для системного администратора или администратора базы данных, что, по существу, оставляет этого пользователя без прав доступа к любым данным.

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


Усовершенствования в области управления

Теперь DB2 предоставляет возможность динамически перемещать таблицы в другое табличное пространство. Это означает, что местоположение таблицы можно изменять даже в то время, когда пользователи обращаются к этой таблице. Это еще один пример стремления DB2 к обеспечению круглосуточной доступности данных. Если администратор БД обнаруживает, что емкость одного из табличных пространств быстро заполняется, он может использовать хранимую процедуру ADMIN_MOVE_TABLE, входящую в поставку DB2 9.7, для перемещения таблицы в другое табличное пространство, где есть свободное место. Это не оказывает никакого влияния на пользователей; они, как обычно, могут выполнять операции SELECT, INSERT, UPDATE и DELETE. Для реализации этой функции DB2 создает теневую копию таблицы и отслеживает изменения, внесенные в исходную таблицу. Затем эти изменения применяются к теневой копии.

Другие усовершенствования в области управления относятся к переносу схемы базы данных. SQL-схему в DB2 можно представить как способ группирования различных объектов базы данных, таких как таблицы, представления, индексы и т.д. Например, предположим, что таблица RFCHONG.T1 и представление RFCHONG.V1 используют одну и ту же схему с именем RFCHONG. Иногда может потребоваться переместить все объекты, использующие одну и ту же схему, в другую базу данных. Один из способов, который применим только к таблицам, заключается в использовании утилиты db2move. В обновлении 9.7.2 можно воспользоваться командой RESTORE с параметром TRANSPORT, чтобы скопировать набор табличных пространств и SQL-схем из образа резервной копии базы данных в другую активную базу данных.


Усовершенствования в области установки

Теперь, чтобы быстро проверить правильность настройки своей установки DB2 Express-C, можно использовать команду db2val инструмента валидации копии DB2.


Расширение DB2 для работы с пространственными данными (Spatial Extender)

DB2 обладает возможностями для работы с пространственными данными почти 10 лет – правда, немногие пользователи об этом знают. Так что, хотя эта функциональность – не новинка версии 9.7.2, следует отметить, что преимущества расширения Spatial Extender DB2 можно использовать бесплатно во всех редакциях DB2, в том числе и в DB2 Express-C. Spatial Extender позволяет работать с пространственными и геодезическими данными с помощью SQL. Например, он может помочь решать задачи типа: «Найти ближайший магазин для каждого клиента, который живет в Торонто и в прошлом году потратил у нас более $3000». DB2 Spatial Extender можно использовать даже для медицинских приложений. Например, он поможет ответить на вопрос: «Какие виды злокачественных клеток присутствуют на МРТ-снимке головного мозга?» Подробности см. в разделе About DB2 Spatial Extender Информационного центра СУБД IBM DB2 Database для Linux, UNIX и Windows.


Заключение

В этой статье освещены некоторые из наиболее примечательных усовершенствований, добавленных в DB2 Express-C, начиная с версии 9.7 и вплоть до текущего обновления 9.7.2. Эта новейшая версия бесплатной общедоступной редакции DB2 содержит новые возможности, относящиеся к производительности, разработке приложений, хранению данных, безопасности и другим областям, которые раньше были доступны только в платных версиях DB2.

Получите удовольствие от работы с новой DB2 Express-C 9.7.2!

Ресурсы

Научиться

Получить продукты и технологии

  • Загрузите DB2 Express-C 9.7.2, полностью лицензионный продукт, предлагаемый сообществу разработчиков бесплатно. (EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=498924
ArticleTitle=Что нового в DB2 Express-C 9.7.2
publish-date=07022010