Неотразимые доводы в пользу перехода на версию DB2 10 for z/OS

Сравнение версии IBM® DB2® 10 for z/OS® с предшествующими версиями; введение в некоторые примечательные функции версии DB2 10 for z/OS.

Ганджан Верма, технический директор, Infosys Technologies Limited

Ганджан Верма (Gunjan Verma) – фотографияГанджан Верма (Gunjan Verma) - технический руководитель с восьмилетним опытом консультирования финансовых учреждений по вопросам определения и реализации стратегии работы с базами данных. Недавно она руководила внедрением DB2 в одной из ведущих банковских систем. С ней можно связаться по адресу gunjan_verma@infosys.com или gunjan.verma@rediffmail.com.



11.03.2013

Введение

Имеющаяся у вас версия DB2 for z/OS ограничивает ваши возможности тем или иным образом? У вас вызывает отвращение явное приведение типов или отсутствие некоторых встроенных функций, таких как CHAR? Если это так, то вам пора переходить на версию DB2 10, которая имеет совершенно новый набор функций, существенно расширяющий возможности пользователя при работе с продуктом DB2 for z/OS. Для перехода к версии DB2 10 вам даже не нужно иметь версию DB2 9. Благодаря миграции с возможностью пропуска уровня вы сможете перейти к версии V10 непосредственно с версииV8. В качестве одного из членов группы по миграции банковских систем я имею большой опыт работы с продуктом DB2 for z/OS V9, в том числе по миграции на версию DB2 10 for z/OS, и мой личный опыт говорит о том, что на DB2 10 перейти гораздо проще, чем на другие СУБД. Миграция на уровне приложений осуществляется достаточно просто — она требует лишь незначительных изменений программного кода, а скрипты базы данных продолжают работать без каких-либо изменений, "как есть". Основное внимание в данной статье уделяется нескольким ключевым преимуществам версии DB2 10 с точки зрения написания SQL-кода. Кроме того, я кратко рассмотрю преимущества DB2 10 for z/OS с точки зрения производительности. Версия DB2 10 for z/OS превосходит предшествующие версии с точки зрения обработки, безопасности и масштабируемости. В приведенных в статье примерах различные функции DB2 9.1 сравниваются с соответствующими функциями DB2 10.


Ключевые дифференцирующие признаки версии DB2 10 — с точки зрения написания программного кода на SQL

Приведение типов

Приведение типов — это одна из важнейших областей, в которых версия DB2 10 превосходит своих предшественников. Предыдущие версии DB2 не поддерживают неявное приведение типов. Другими словами, при выполнении любой операции сравнения или присвоения левая и правая части выражения должны иметь одинаковый тип данных. В противном случае одна часть выражения будет нуждаться в явном приведении к типу данных другой части выражения. Активное использование неявного приведения типов считается плохим стилем программирования; в идеальном случае при выполнении операции сравнения или присвоения желательно использовать одинаковые типы данных. Тем не менее, неявное приведение типов по-прежнему является небесполезной функцией в любой СУБД. Такие СУБД, как Oracle, поддерживают эту функцию, поэтому в случае миграции с Oracle на DB2 это избавит вас от необходимости внесений в программный код значительных изменений, которые потребовались бы в противном случае.

Таблица 1. Пример приведения типов
Запрос с явным приведением типовЗапрос с неявным приведением типов
Select * from Tab1 where a=TO_NUMBER(b)Select * from Tab1 where a=b

ПРИМЕЧАНИЕ: В данном случае данные столбца A таблицы Tab1 имеют тип INTEGER, а данные столбца B таблицы Tab1 имеют тип CHAR.

Встроенные типы данных поддерживают широкий диапазон приведения типов. Соответствующие сведения приведены в Таблице 2.

Таблица 2. Неявные преобразования типов, поддерживаемые в версии DB2 10
Тип исходных данных Тип целевых данных
SMALLINTVARCHAR(6)
INTEGERVARCHAR(11)
BIGINTVARCHAR(20)
DECIMAL(p,s)VARCHAR(p+2)
REAL, FLOAT, DOUBLE VARCHAR(24)
DECFLOATVARCHAR(42)
CHAR, VARCHAR, GRAPHIC, VARGRAPHIC DECFLOAT(34)

CURRENT TIMESTAMP

CURRENT TIMESTAMP— это специальный регистр, возвращающий текущие значения даты/времени. Версия V10 позволяет задать точность в микросекундах в диапазоне 0-12. По умолчанию точность имеет значение 6. Кроме того, мы можем использовать SYSDATE в качестве синонима для CURRENT TIMESTAMP. Возможность использования SYSDATE или задания точности результата недоступна в предыдущих версиях DB2.

Таблица 3. Пример SYSDATE/TIMESTAMP
ЗапросРезультат
SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY12011-08-02-12:40:10.214516
SELECT CURRENT TIMESTAMP(12) FROM SYSIBM.SYSDUMMY12011-08-02-12:40:10.214516126547
SELECT SYSDATE FROM SYSIBM.SYSDUMMY12011-08-02-12:40:10

Оператор ALTER

Оператор ALTER используется для изменения атрибутов табличного пространства, таблицы или индекса. В DB2 10 некоторые типовые функции оператора ALTER по изменению схемы доступны с помощью оператора ONLINE ALTER. После него следует процесс REORG. Это существенно упрощает процедуру администрирования.

CHAR

Функция CHAR используется для преобразования вводимого числа в строку. Встроенная в версию DB2 9 функция CHAR возвращает значения, выровненные по правому краю, т. е. слева она добавляет нули. В версии DB2 10 функция CHAR возвращает значения, выровненные по левому краю. В этом случае нули слева не добавляются, строковый вывод совпадает с числовым вводом, и дополнительная обрезка для исправления вывода не требуется.

Листинг 1. Пример вставки с использованием функции CHAR
CREATE TABLE TEST_CHAR (C1 DECIMAL(5,0)!
INSERT INTO TEST_CHAR VALUES (1)!
INSERT INTO TEST_CHAR VALUES (11)!
INSERT INTO TEST_CHAR VALUES (111)!
INSERT INTO TEST_CHAR VALUES (1111)!
INSERT INTO TEST_CHAR VALUES (11111)!
SELECT CHAR(C1) FROM TEST_CHAR!
Таблица 4. Результаты выполнения функции CHAR в версии V9 и в версии V10
Результаты в версии V9Результаты в версии V10
00001.1
00011.11
00111.111
01111.1111
11111.11111

CONCAT

Функция CONCAT или оператор || используется для объединения двух строк. В версии DB2 9 неявное приведение типов не поддерживается, поэтому функция CONCAT способна принять только два строковых аргумента. В версии V10 неявное приведение типов поддерживается, поэтому мы можем привязать строку к числовому аргументу.

Запрос в DB2 9 для связывания строки a с числом 5 имеет следующий вид:

Листинг 2. Связывание строки в версии V9
SELECT ‘a’||’5’ FROM SYSIBM.SYSDUMMYU
Or
SELECT ‘a’||CAST(5 AS CHAR(1) FROM SYSIBM.SYSDUMMYU

В версии V10 будет работать следующий запрос.

Листинг 3. Связывание строки в версии V10
SELECT ‘a’ ||5 FROM SYSIBM.SYSDUMMYU

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

TO_NUMBER

Версия DB2 9 не поддерживает функцию TO_NUMBER(STRING). Доступными альтернативными вариантами являются функции DECIMAL (), INTEGER () и LONG (), которые базируются на целевом типе данных. Версия V10 поддерживает функцию TO_NUMBER непосредственно.

TRIM

Функция TRIM используется для удаления из строки ведущих и замыкающих пробелов. Версия DB2 9 не поддерживает функцию TRIM. В версии V9 имеется другая функция под названием STRIP, которая выполняет ту же работу, что и функция TRIM. В версии V10 функция TRIM доступна.

DECODE

Функция DECODE используется в качестве сокращенной IF-конструкции в SQL-запросах. Эта функция поддерживается в Oracle, а в DB2 9 аналогичная функциональность обеспечивается функцией CASE. Синтаксис этих двух функций имеет небольшие различия, что несколько усложняет портирование из Oracle в DB2 9. DB2 10 поддерживает CASE таким же образом, как и Oracle, что существенно упрощает любое портирование на версию DB2 10.

NVL

Как и функция DECODE, Oracle-функция NVL доступна и в DB2, но под другим именем: COALESCE. Версия DB2 10 имеет преимущество, поскольку поддерживает функцию NVL непосредственно.

MONTHS_BETWEEN

В версии DB2 9 функция MONTHS_BETWEEN возвращает выраженное в месяцах различие между двумя датами после игнорирования в этих датах соответствующих timestamp-частей. Версия DB2 10 обеспечивает более качественную поддержку, поскольку при вычислении результата она учитывает TIMESTAMP-часть даты.

Таблица 5. Пример функции MONTHS_BETWEEN
ЗапросSELECT MONTHS_BETWEEN (TO_DATE('12/05/2011 3:24:20 PM', 'DD/MM/YYYY HH:MI:SS PM'), TO_DATE('12/04/2011 2:24:20 PM', 'DD/MM/YYYY HH:MI:SS PM')) FROM SYSIBM.SYSDUMMYU
Результат при использовании V91.0000000000 (Игнорирует разницу по времени в 1 час)
Результат при использовании V101.001388888888 (учитывает разницу по времени в 1 час)

Ключевые дифференцирующие признаки версии V10 — с точки зрения производительности

Сбор статистических сведений

В версии DB2 10 был представлен новый набор хранимых процедур и таблиц каталога для управления сбором статистики. За сбор статистики отвечает автоматический процесс календарного планирования, что избавляет от необходимости частого выполнения команды RUNSTATS, которая не очень удобна для пользователей.

Быстрый доступ к данным

DB2 10 использует метод хеширования для ускорения доступа к данным. В этой версии для локализации строк данных используется внутренний алгоритм хеширования.

Поддержка одновременно работающих пользователей

Благодаря увеличению объема памяти DB2 10 поддерживает в 5-10 раз больше пользователей, одновременно работающих с одним экземпляром DB2. Это мощный стимул для применения DB2 10, особенно для больших приложений, испытывающих огромные нагрузки.

Параллельный доступ к данным

DB2 10 предлагает новые параметры и новые настройки, предоставляющие пользователям мощные средства контроля в процессе доступа к данным в параллельных средах. К этой категории относится, в частности, параметр CURRENTACCESSRESOLUTION. Этому параметру может быть присвоено значение USECURRENTLYCOMMITTED или значение WAITFOROUTCOME. Значение USECURRENTLYCOMMITTED позволяет пользователям гибко извлекать из базы данных текущие подтвержденные данные (committed data), что повышает степень параллелизма. При этой настройке система проигнорирует измененные строки (вставленные/обновленные) и выберет только подтвержденные строки. Значение WAITFOROUTCOME гарантирует, что в процессе обновления данных все запросы на доступ к данным ждут завершения текущей транзакции. При этой настройке система не будет игнорировать измененные строки (вставленные/обновленные).

Сокращение количества конфликтных ситуаций при доступе к каталогу

В предыдущих версиях DB2 таблицы каталога используют блокировку на уровне страницы. Другими словами, команды, записывающие данные в таблицы каталога (CREATE TABLESPACE, CREATE TABLE, CREATE VIEW и CREATE INDEX) блокируют эти таблицы каталога, а одновременное использование таких команд вызывает конфликтную ситуацию при обращении к таблицам каталога. В версии DB2 10 таблицы каталога используют блокировку на уровне строки, что значительно сокращает количество конфликтных ситуаций при доступе к каталогу.


Заключение

С учетом множества преимуществ DB2 10, а также наличия поддержки этой версии со стороны IBM, разумность перехода на DB2 10 for z/OS не вызывает никаких сомнений. Эта версия поддерживает обратную совместимость, обладает преимуществами с точки зрения написания SQL-запросов, а также существенно превосходит предыдущие версии с точки зрения производительности.

Ресурсы

Комментарии

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=861066
ArticleTitle=Неотразимые доводы в пользу перехода на версию DB2 10 for z/OS
publish-date=03112013