DB2 9.7: Исполнение Oracle-приложений на DB2 9.7 для Linux, UNIX и Windows

DB2 9.7 придает приложениям на платформе Oracle медвежью хватку благодаря поддержке PL/SQL и другим усовершенствованиям

IBM® DB2® 9.7 for Linux®, UNIX® и Windows® обеспечивает встроенную поддержку диалектов Oracle SQL и PL/SQL. Это позволяет многим приложениям, написанным для Oracle, работать с DB2. В настоящей статье содержится общий обзор того, что именно означает совместимость DB2 с Oracle. Она поможет тем, кто хотел бы перевести свои специальные приложения на DB2 или распространить на DB2 поддержку СУБД заказчиков.

Преследуемые цели

В марте, во время посвященной DB2 9.7 презентации на выставке Cebit, я сжег компьютерный динамик на 110 В, который неосмотрительно подключил без трансформатора к немецкой сети 230 В. В той же командировке я точно так же испортил зарядное устройство своей электрической зубной щетки и машинки для стрижки бороды. Оставляя в стороне мою очевидную неспособность учиться на собственных ошибках, неудивительно, что одно из моих любимых высказываний (происхождение неизвестно): "Проблема стандартов в том, что их слишком много".

В мире реляционных систем управления базами данных (СУБД) мы облагодетельствованы по крайней мере тремя основными стандартами и бесчисленным количеством их вариаций:

  • ANSI SQL и ANSI SQL/PSM
  • Oracle SQL и PL/SQL
  • Sybase и Microsoft TSQL

На рисунке 1 приведена диаграмма Венна, иллюстрирующая перекрытие диалектов SQL.

Рисунок 1. Вавилонское столпотворение SQL
области перекрытия стандартов

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

IBM DB2 9.7 для Linux, UNIX и Windows (DB2) ставит перед собой цель существенно понизить барьеры при переносе на DB2 приложений, написанных для Oracle. Это предоставляет заказчикам и поставщикам возможность выбора СУБД на основе ее достоинств, а не истории приложений.


DB2 9.7 дополнена средствами совместимости с Oracle

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

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

Таблица 1. Часто используемые функции
Oracle-->DB2
Управление конкурентным доступом--> Встроенная поддержка
Диалект SQL-->Встроенная поддержка
PL/SQL-->Встроенная поддержка
Пакеты PL/SQL-->Встроенная поддержка
Встроенные пакеты-->Встроенная поддержка
Клиент JDBC с расширениями-->Встроенная поддержка
Сценарии SQL*Plus -->Встроенная поддержка

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

Иными словами, приспособить приложение Oracle для DB2 становится не сложнее, чем исполнять C-программы, написанные для HP-UX, на AIX.


Управление конкурентным доступом

В прошлом одним из самых заметных различий между Oracle и DB2 был подход к управлению конкурентным доступом. Есть легко запоминающееся выражение: "Читатели не мешают писателям, а писатели не мешают читателям" (таблица 2).

Таблица 2. Управление конкурентным доступом Oracle
Ожидающая транзакцияПоведениеНовая транзакция
Читательне мешаетЧитатель
Читательне мешаетПисатель
Писательне мешаетЧитатель
ПисательмешаетПисатель

Не вдаваясь в детали уровней изоляции, можно сказать, что подавляющее большинство приложений, использующих по умолчанию уровень изоляции Oracle Statement Level Isolation, будет прекрасно работать с уровнем изоляции Cursor Stability (CS), принятым в DB2 по умолчанию.

Однако традиционно CS реализована таким образом, что писатели мешают читателям, а в некоторых случаях, читатели могут мешать писателям (таблица 3). Причина в том, что традиционно при CS-изоляции новая транзакция будет "дожидаться результатов" изменений, вызванных текущей транзакцией.

Таблица 3. Традиционное управление конкурентным доступом DB2 при CS
Ожидающая транзакцияПоведениеНовая транзакция
Читательне мешаетЧитатель
Читательредко мешаетПисатель
ПисательмешаетЧитатель
ПисательмешаетПисатель

Оказывается, нет никакой семантической причины, по которой транзакция с изоляцией CS должна ожидать результатов, когда сталкивается с измененной строкой. Вполне можно было бы считать зафиксированную на данный момент версию измененной строки.

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

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

Рисунок 2. Писатели не мешают читателям
Писатели не мешают читателям

Важно отметить, что такое поведение:

  • Не вводит новые объекты, такие как сегмент отката;
  • Не создает дополнительной нагрузки на ресурсы писателя, так как запись в журнал должна быть сделана в любом случае;
  • не может вызвать такой ситуации, как "слишком старый снимок", потому что в том крайне редком случае, когда необходимый файл журнала уже был заархивирован (а транзакция все еще открыта!), DB2 просто отступит и подождет снятия блокировки.

В дополнение к этим изменениям в DB2 введены дополнительные методы предупреждения блокировки, чтобы при CS-изоляции читатели не блокировали записи.

Таблица 4. Новое управление конкурентным доступом DB2 при CS-блокировке
Ожидающая транзакцияПоведениеНовая транзакция
Читательне мешаетЧитатель
Читательне мешаетПисатель
Писательне мешаетЧитатель
ПисательмешаетПисатель

Как видите, управление конкурентным доступом теперь идентично поведению Oracle. На самом деле, вновь созданные базы данных DB2 демонстрируют такое поведение по умолчанию.


Новые типы данных

Сердце каждой базы данных — ее данные. Несоответствие типов или несоответствие семантики этих типов может серьезно повлиять на возможность переноса приложения на другую СУБД. Поэтому чтобы приложения для Oracle работали на DB2, важно поддерживать их нестандартные основные типы данных, такие как строки, даты и числа. Помимо согласования этих основных типов, в DB2 9.7 добавлены другие, более сложные типы, которые обычно используются в PL/SQL Oracle (таблица 5).

Таблица 5. Новые типы данных DB2
Тип данныхОписание
NUMBERДобавлена поддержка типов NUMBER и NUMBER(P [, S]) на основе DECFLOAT (с аппаратным ускорением Power6) и DECIMAL.
VARCHAR2Поведение VARCHAR2-типа включает интерпретацию пустых строк как NULL и сортировку, чувствительную к замыкающему пробелу.
Oracle DATEБаза данных в режиме Oracle DATE в дополнение к календарной дате содержит компонент TIME.
TIMESTAMP(n)Шкала долей секунд может быть выбрана в интервале от 0 (дата + время) до 12 (пикосекунды).
BOOLEANЭтот тип может использоваться в процедурной логике, переменных и параметрах процедур.
VARRAYПоддержка типа ARRAY в процедурах дополнена поддержкой методов и синтаксиса стиля VARRAY.
INDEX BYВ дополнение к обычным массивам DB2 поддерживает также ассоциативные массивы.
ROW TYPEЭтот сложный тип может использоваться в переменных и параметрах, а также как элемент массивов и ассоциативных массивов.
Тип REF CURSORКурсоры можно присваивать переменным или передавать с использованием параметров.

Неявное приведение и определение типов

"То, что ходит как утка и говорит как утка, должно быть уткой".

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

К сожалению, раньше, если приложение Oracle использовало в своем SQL-коде слабую типизацию, его нельзя было скомпилировать для DB2. В DB2 9.7 добавлено неявное приведение типов (или слабая типизация). Другими словами, строки и числа можно сравнивать, присваивать друг другу и очень гибко оперировать ими.

Кроме того, во многих местах можно использовать значения NULL без контроля типов, а маркеры параметров можно использовать практически повсюду благодаря отсроченной подготовке. DB2 не определяет тип маркера параметра, пока не встретит его значение.

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


Расширенная встроенная библиотека функций в DB2

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

В дополнение к своему традиционному набору функций DB2 теперь поддерживает библиотеку, совместимую с Oracle. Ниже представлен далеко не полный обзор:

  • Функции преобразования и приведения
    • TO_DATE
    • TO_CHAR
    • TO_CLOB
    • TO_NUMBER
    • TO_TIMESTAMP
    Каждая из этих функций поддерживает богатый набор совместимых строк форматирования.
  • Арифметика с датами
    • EXTRACT
    • ADD_MONTHS
    • MONTHS_BETWEEN
    • NEXT_DAY
    • Плюс (+) добавление частей суток
  • Манипуляции со строками
    • LPAD
    • RPAD
    • INSTR
    • INITCAP
    • Расширения функции SUBSTR
  • Прочие функции
    • NVL
    • DECODE
    • LEAST
    • GREATEST
    • BITAND

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


Поддержка диалектов Oracle SQL

До сих пор эта статья охватывала управление конкурентным доступом, типы данных, преобразование типов и функции. Но различия между Oracle и DB2 простираются еще глубже. В некоторых местах различается сама ткань диалектов SQL, их ключевые слова и семантика. Кроме того, каждый продукт поддерживает некоторые функции, которых в другом просто нет. Если эти функции популярны, они ограничивают возможности по созданию SQL-команд, пригодных для обоих продуктов. В таблице 6 приведены некоторые основные моменты.

Таблица 6. Новая поддержка SQL
ФункцияОписание
Рекурсия CONNECT BYДо сих пор DB2 поддерживала рекурсию ANSI SQL. Теперь добавлен CONNECT BY в стиле Oracle, в том числе различные функции и псевдостолбцы, такие как LEVEL и CONNECT_BY_PATH.
Синтаксис (+) joinЭтот синтаксис не одобряет даже сама Oracle, однако существует множество приложений и разработчиков, которые все еще используют эту форму синтаксиса OUTER JOIN.
Таблица DUALТаблицы в одну строку и один столбец повсеместно используются в приложениях Oracle в качестве модели.
Псевдостолбец ROWNUMЭтот псевдостолбец обычно используется для ограничения числа возвращаемых строк и подсчета строк в результирующем множестве.
Псевдостолбец ROWIDПсевдостолбцы ROWID используются для быстрого поиска строки, которая уже извлекалась ранее, по ее физическому адресу.
SQL-оператор MINUSВ Oracle MINUS используется вместо EXCEPT для вычитания одного результирующего множества из другого.
SELECT INTO FOR UPDATEКонструкция FOR UPDATE в SELECT INTO позволяет извлекать строку из DB2 с намерением позднее изменить ее без использования курсора.
PUBLIC SYNONYMПубличный синоним представляет собой псевдоним без имени схемы. DB2 поддерживает публичные синонимы для табличных объектов, последовательностей и пакетов PL/SQL.
CREATE TEMPORARY TABLEВ дополнение к объявленным глобальным временным таблицам DB2 поддерживает созданные глобальные временные таблицы.
Оператор TRUNCATE tableЭтот оператор быстро удаляет содержимое целой таблицы без запуска триггеров.
Разрешение ослабленных именDB2 9.7 больше не требует именовать вложенные представления. Кроме того, имена столбцов могут легче наследоваться из операторов множеств, таких как UNION.

На этом мы завершаем обзор изменений, внесенных в DB2 для того, чтобы Oracle-приложения, которые обращаются с SQL-запросами к базе данных, могли работать практически без изменений. Однако важные разделы многих приложений выполняются на самом сервере. Основной язык Oracle-приложений на сервере – это PL/SQL. Поэтому без поддержки PL/SQL никакие претензии на совместимость нельзя рассматривать всерьез.


Поддержка PL/SQL в DB2

Обычно, когда приложение переносится с одного продукта на другой, SQL-выражения и процедурный язык также переводится с одного диалекта SQL на другой. Это создает ряд проблем:

  • Переведенный результирующий код, как правило, получается запутанным вследствие применения автоматизации и несоответствия между исходным и целевым диалектами.
  • Разработчики приложения не знакомы с целевым диалектом языка SQL. Это затрудняет отладку перенесенного кода. Из-за отсутствия навыков становится проблематичным дальнейшее обслуживание.
  • В случае коробочных продуктов для каждой новой версии приложения перевод приходится выполнять заново.
  • Наконец, в результате получается эмуляция, которая по определению работает медленнее, чем оригинал.

Чтобы избежать этих проблем, в DB2 9.7 включена поддержка стандартного PL/SQL. Что это значит?

Как видно из рисунка 3, теперь механизм DB2 наряду с компилятором SQL PL содержит компилятор PL/SQL. Оба компилятора производят код виртуальной машины для единого механизма исполнения SQL DB2 (SQL Unified Runtime Engine). Важно отметить, что инструменты мониторинга и разработки, такие как Optim Development Studio, сцеплены с DB2 на уровне механизма исполнения.

Рисунок 3. Поддержка компилятора PL/SQL
Поддержка компилятора PL/SQL в Optim Development Studio

Интеграция PL/SQL в DB2 в качестве первоклассного процедурного языка имеет несколько следствий:

  • Не требуется перевод. Исходный код остается тем же, что и в каталоге схемы.
  • Разработчики могут продолжать работу на том языке, с которым они знакомы. Не нужно переносить логику на диалект DB2, даже если новая логика написана на SQL PL. Подпрограммы, использующие разные диалекты, могут вызывать друг друга.
  • Поставщики коробочных приложений могут использовать один и тот же исходный код как для Oracle, так и для DB2.
  • Оба компилятора PL/SQL и SQL PL выдают один и тот же код виртуальной машины для Единого механизма исполнения SQL DB2. Оба компилятора PL/SQL и SQL PL выдают один и тот же код виртуальной машины для единого механизма исполнения SQL DB2. Следовательно, обе платформы, PL/SQL и SQL PL, работают с одной и той же скоростью.
  • Так как инфраструктура отладчика непосредственно связана с единым механизмом исполнения SQL, PL/SQL естественным образом поддерживается средой Optim Development Studio.

Сеанс отладки PL/SQL иллюстрируется на рисунке 4. Отладчик поддерживает стандартные функции, такие как step into, step over и точки останова. Кроме того, он позволяет пользователю изменять локальные переменные PL/SQL во время работы программы.

Рисунок 4. Поддержка отладчика PL/SQL в DB2
Поддержка отладчика PL/SQL в DB2

Детали синтаксиса PL/SQL

Так что же именно подразумевает поддержка PL/SQL? Во-первых, это поддержка основного синтаксиса. DB2 поддерживает все основные конструкции PL/SQL, например:

  • конструкции if then else
  • циклы while
  • операторы присваивания :=
  • локальные переменные и константы
  • #PRAGMA EXCEPTION и обработку исключений
  • Различные формы циклов for (range, cursor и query)
  • Связывание (%TYPE и %ROWTYPE) переменных и параметров с другими объектами
  • Транзакции #PRAGMA AUTONOMOUS, которые позволяют выполнять процедуры внутри транзакции с секретным ключом.

Поддержка объектов PL/SQL

PL/SQL может использоваться в самых разных объектах, допускающих использование процедурной логики:

  • Скалярные функции
  • Триггеры типа «before each row» (выполняющиеся перед каждой строкой)
  • Триггеры типа «after each row» (выполняющиеся после каждой строки)
  • Процедуры
  • Анонимные блоки
  • Пакеты PL/SQL

Поддержка пакетов PL/SQL

Большая часть Oracle-приложений PL/SQL заключена в так называемые пакеты (PACKAGEs). Пакет PL/SQL (не путать с пакетом DB2!) представляет собой набор отдельных объектов с возможностью различать объекты, доступные извне, и те, что используются как вспомогательные лишь в рамках пакета. Эквивалентом пакета в ANSI SQL служит модуль (MODULE). Теперь DB2 обеспечивает поддержку как модулей ANSI SQL, так и пакетов PL/SQL. В частности, предусмотрены следующие возможности:

  • CREATE [OR REPLACE]PACKAGE — определяет прототипы процедур, видимых извне. Также определяет все видимые извне непроцедурные объекты, такие как переменные и типы.
  • CREATE [OR REPLACE] PACKAGE BODY — выполняет все публичные или частные процедуры, а также все прочие частные объекты.
  • В рамках пакета или тела пакета могут быть определены следующие объекты:
    • Переменные и константы;
    • Типы данных;
    • Исключения;
    • Скалярные функции;
    • Процедуры;
    • Курсоры.
  • Инициализация пакета.
  • Публичные синонимы пакетов.

DB2 содержит встроенные пакеты общего назначения

Некоторые приложения Oracle используют пакеты, которые включены в СУБД. В частности, популярны библиотеки, которые обеспечивают создание отчетов, электронную почту или связь. Чтобы обеспечить работоспособность этих приложений с DB2, в DB2 включены пакеты, перечисленные в таблице 7.

Таблица 7. Пакеты, включенные в DB2
ПакетОписание
DBMS_OUTPUTОбеспечивает основные функции создания отчетов, которые могут быть включены или выключены из командной строки.
UTL_FILEМодуль, который позволяет работать с файлами на сервере DB2.
DBMS_SQLПакет, который в дополнение к существующим операторам EXECUTE и EXECUTE IMMEDIATE обеспечивает API SQL для выполнения динамического SQL.
UTL_MAILМодуль, который позволяет отправлять из SQL уведомления по электронной почте.
UTL_SMTP Более низкоуровневый API, подобный UTL_MAIL, который обеспечивает интеграцию с SMTP.
DBMS_ALERTПакет, который позволяет разным сеансам подавать сигналы друг другу.
DBMS_PIPEМодуль, позволяющий сеансам обмениваться данными.
DBMS_JOBОбеспечивает совместимый API, интегрированный с планировщиком задач DB2.
DBMS_LOB API Oracle для обработки LOB, дублирующий встроенные функции DB2 для работы с LOB.
DBMS_UTILITYНабор разнообразных процедур, используемых в приложениях.

Специальные расширения JDBC для Oracle

JDBC представляет собой стандартный клиентский интерфейс Java. Однако в драйвер JDBC Oracle добавлены расширения, поддерживающие некоторые нестандартные типы данных.

Для достижения максимальной совместимости с Java-приложениями в драйвер JDBC DB2 9.7 среди прочего добавлена поддержка вызова процедур с параметрами типов ref cursor и VARRAY.


Поддержка сценариев SQL * Plus с использованием CLPPlus

Часто сценарии DDL и даже отчеты пишутся с использованием процессора командной строки SQL*Plus. Чтобы было легче перенести эти сценарии, а также опыт их разработчиков, в DB2 включен SQL*Plus-совместимый процессор командной строки, названный CLPPlus (рисунок 5). Этот инструмент предоставляет следующие функциональные возможности:

  • SQL*Plus-совместимые опции команд.
  • Подстановка переменных.
  • Форматирование столбцов.
  • Функции отчетности.
  • Управляющие переменные.
Рисунок 5. SQL*Plus-совместимый инструмент CLPLus
SQL*Plus-совместимый инструмент CLPLus

Переход на DB2 очень прост

Благодаря точному согласованию DB2 с PL/SQL и Oracle SQL отпадает необходимость в сложном инструментарии для осуществления миграции. Вместо этого можно использовать инструмент IBM Data Movement, просто перетаскивая таблицы, пакеты или целые схемы из Oracle в DB2. Достаточно минимальной настройки, в редких исключениях, чтобы либо перенести приложение на DB2, либо изменить его так, чтобы один и тот же исходный код мог работать и с DB2, и с Oracle.

Делается это довольно просто:

  1. Установите необходимые переменные реестра:
    • db2set DB2_COMPATIBILITY_VECTOR=ORA
    • db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
  2. Перезапустите менеджер базы данных:
    • db2stop
    • db2start
  3. Создайте Oracle-совместимую базу данных:
    • db2 create database mydb pagesize 32 K
    • db2 update db cfg for mydb using auto_reval deferred_force
  4. Запустите инструмент IBM Data Movement и подключитесь к базам данных Oracle и DB2 (рисунок 6). Теперь можно выбрать извлечение только DDL или DDL и данных. Наконец, у вас есть два пути: либо непосредственно разворачивать приложение, исполняя сгенерированные сценарии, либо продолжить работу с панелью интерактивного развертывания. (Для большинства нетривиальных приложений рекомендуется второй вариант.)
    Рисунок 6. Перенос схем Oracle в DB2 с применением инструмента IBM Data Movement
    Перенос схем Oracle на DB2 с применением инструмента IBM Data Movement
  5. Перенесите желаемые схемы с Oracle на DB2 с помощью режима интерактивного развертывания (Interactive deploy). В режиме интерактивного развертывания (рисунок 7) отображается дерево навигации со всеми объектами, извлеченными из базы данных Oracle. Выделите все объекты и выполните опцию меню deploy. В результате инструмент скопирует объекты в DB2 и запишет ход выполнения этого процесса. Некоторые объекты могут не установиться в автоматическом режиме, и инструмент предоставит вам возможность поработать с ними. При выборе объекта вы увидите DDL и сообщение об ошибке DB2. Вы имеете возможность исправить определение с помощью встроенного редактора и повторить установку. Задача состоит в том, чтобы интерактивно перенести все объекты в DB2.
    Рисунок 7. Перенос схем Oracle в DB2 с применением инструмента IBM Data Movement
    Перенос схем Oracle на DB2 с применением инструмента IBM Data Movement

Оценка возможности перехода на DB2

Итак, насколько легко будет перенести приложение на DB2 9.7? Ответ, конечно, неоднозначный. В IBM есть внутренний инструмент под названием MEET DB2, который позволяет проанализировать все объекты базы данных Oracle и оценить ее. Он создает отчет о том, что будет работать сразу, и указывает, где потребуется корректировка. Ваше контактное лицо в IBM может запустить эту утилиту, чтобы быстро оценить совместимость Вашей текущей базы данных Oracle с DB2 (рисунок 8).

Рисунок 8. Отчет инструмента оценки MEET DB2
Отчет инструмента оценки MEET DB2

За год бета-тестирования DB2 9.7 было детально проанализировано множество приложений с общим объемом свыше 750 тыс. строк кода PL/SQL кода. Средний показатель успешного переноса кода без необходимости корректировок составил 90–99% (рисунок 9).

Рисунок 9. Средний уровень поддерживаемых операторов 98%
Средний уровень поддерживаемых операторов 98%

Ограничения

PL/SQL, встроенная библиотека пакетов и CLPPlus в настоящее время недоступны для редакций DB2 Express, DB2 Express-C и DB2 Personal.


Заключение

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

Чтобы проверить эти возможности, загрузите пробную версию DB2 9.7 (см. раздел Ресурсы).


Часто задаваемые вопросы

Какую версию Oracle поддерживает DB2 9.7?

Охват диалектов SQL и PL/SQL определяется исключительно тем, что используется приложениями. Есть поддерживаемые функции, которые появились только в последней версии Oracle 11g, тогда как некоторые конструкции Oracle 8i не поддерживаются. При анализе 18 приложений, содержащих в общей сложности свыше 750 тыс. строк, 90-99% кода было перенесено на DB2 без изменений. Многие из оставшихся корректировок можно автоматизировать или использовать многократно.

Как быстро будет работать мое Oracle-приложение на DB2?

Это вопрос на миллион долларов! К сожалению, условия лицензирования Oracle запрещают публикацию любых результатов тестирования без предварительного письменного согласия компании. Конечно, мы не стали ее беспокоить. Однако по самой своей конструкции, и это подтверждается тестами контроля качества, приложение, написанное на PL/SQL, работает на DB2 так же быстро, как написанное на SQL PL. Поставщики, которые уже прошли этот процесс, как правило, бывают приятно удивлены.

Как много работы потребовалось, чтобы обеспечить эти функции?

Гораздо меньше, чем может показаться. Определенная работа, например, по CONNECT BY и NUMBER, была заблаговременно проделана еще в версии DB2 9.5. На самом деле все было сделано менее чем за 18 месяцев.

Каковы типичные трудности при переходе с Oracle на DB2?

Понятно, что 100%-ной совместимости с DB2 не получится. Так что при первом запуске на DB2 не исключены какие-то эксцессы. Однако многие из этих осложнений тривиальны, и их легко устранить. Например, DB2 поддерживает триггеры PL/SQL, но не позволяет комбинировать их действия, т.е. создать один общий триггер для действий UPDATE, DELETE и INSERT. Теперь, благодаря универсальному триггеру PL/SQL, его легко скопировать в три триггера DB2 PL/SQL с помощью булевой переменной для предикатов INSERTED, UPDATED и DELETED.

Ресурсы

Научиться

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

Обсудить

Комментарии

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=439656
ArticleTitle=DB2 9.7: Исполнение Oracle-приложений на DB2 9.7 для Linux, UNIX и Windows
publish-date=10272009