• Главная
  • Карта сайта
Не найдено

DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows

  1. DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows DB2 9.7 DB2 9.7 надає додаткам...
  2. Цей контент є частиною серії: DB2 9.7
  3. переслідувані цілі
  4. Малюнок 1. Вавілонське стовпотворіння SQL
  5. DB2 9.7 доповнена засобами сумісності з Oracle
  6. Таблиця 1. Часто використовувані функції
  7. Управління конкурентним доступом
  8. Таблиця 2. Управління конкурентним доступом Oracle
  9. Таблиця 3. Традиційне управління конкурентним доступом DB2 при CS
  10. Малюнок 2. Письменники не заважають читачам
  11. Таблиця 4. Нове управління конкурентним доступом DB2 при CS-блокування
  12. Нові типи даних
  13. Таблиця 5. Нові типи даних DB2
  14. Неявне приведення і визначення типів
  15. Розширена вбудована бібліотека функцій в DB2
  16. Підтримка діалектів Oracle SQL
  17. Таблиця 6. Нова підтримка SQL
  18. Підтримка PL / SQL в DB2
  19. Малюнок 3. Підтримка компілятора PL / SQL
  20. Малюнок 4. Підтримка відладчика PL / SQL в DB2
  21. Підтримка об'єктів PL / SQL
  22. Підтримка пакетів PL / SQL
  23. DB2 містіть Вбудовані пакети Загальне призначення
  24. Таблиця 7. Пакети, включені в DB2
  25. Спеціальні розширення JDBC для Oracle
  26. Підтримка сценаріїв SQL * Plus з використанням CLPPlus
  27. Малюнок 5. SQL * Plus-сумісний інструмент CLPLus
  28. Малюнок 6. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement
  29. Малюнок 7. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement
  30. Малюнок 8. Звіт інструменту оцінки MEET DB2
  31. Малюнок 9. Середній рівень операторов 98%
  32. Висновок
  33. Часто задавані питання
  34. Ресурси для скачування
  35. DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows
  36. Серія контенту:
  37. Цей контент є частиною серії: DB2 9.7
  38. переслідувані цілі
  39. Малюнок 1. Вавілонське стовпотворіння SQL
  40. DB2 9.7 доповнена засобами сумісності з Oracle
  41. Таблиця 1. Часто використовувані функції
  42. Управління конкурентним доступом
  43. Таблиця 2. Управління конкурентним доступом Oracle
  44. Таблиця 3. Традиційне управління конкурентним доступом DB2 при CS
  45. Малюнок 2. Письменники не заважають читачам
  46. Таблиця 4. Нове управління конкурентним доступом DB2 при CS-блокування
  47. Нові типи даних
  48. Таблиця 5. Нові типи даних DB2
  49. Неявне приведення і визначення типів
  50. Розширена вбудована бібліотека функцій в DB2
  51. Підтримка діалектів Oracle SQL
  52. Таблиця 6. Нова підтримка SQL
  53. Підтримка PL / SQL в DB2
  54. Малюнок 3. Підтримка компілятора PL / SQL
  55. Малюнок 4. Підтримка відладчика PL / SQL в DB2
  56. Підтримка об'єктів PL / SQL
  57. Підтримка пакетів PL / SQL
  58. DB2 містіть Вбудовані пакети Загальне призначення
  59. Таблиця 7. Пакети, включені в DB2
  60. Спеціальні розширення JDBC для Oracle
  61. Підтримка сценаріїв SQL * Plus з використанням CLPPlus
  62. Малюнок 5. SQL * Plus-сумісний інструмент CLPLus
  63. Малюнок 6. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement
  64. Малюнок 7. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement
  65. Малюнок 8. Звіт інструменту оцінки MEET DB2
  66. Малюнок 9. Середній рівень операторов 98%
  67. Висновок
  68. Часто задавані питання
  69. Ресурси для скачування
  70. DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows
  71. Серія контенту:
  72. Цей контент є частиною серії: DB2 9.7
  73. переслідувані цілі
  74. Малюнок 1. Вавілонське стовпотворіння SQL
  75. DB2 9.7 доповнена засобами сумісності з Oracle
  76. Таблиця 1. Часто використовувані функції
  77. Управління конкурентним доступом
  78. Таблиця 2. Управління конкурентним доступом Oracle
  79. Таблиця 3. Традиційне управління конкурентним доступом DB2 при CS
  80. Малюнок 2. Письменники не заважають читачам
  81. Таблиця 4. Нове управління конкурентним доступом DB2 при CS-блокування
  82. Нові типи даних
  83. Таблиця 5. Нові типи даних DB2
  84. Неявне приведення і визначення типів
  85. Розширена вбудована бібліотека функцій в DB2
  86. Підтримка діалектів Oracle SQL
  87. Таблиця 6. Нова підтримка SQL
  88. Підтримка PL / SQL в DB2
  89. Малюнок 3. Підтримка компілятора PL / SQL
  90. Малюнок 4. Підтримка відладчика PL / SQL в DB2
  91. Підтримка об'єктів PL / SQL
  92. Підтримка пакетів PL / SQL
  93. DB2 містить вбудовані пакети загального призначення
  94. Таблиця 7. Пакети, включені в DB2
  95. Спеціальні розширення JDBC для Oracle
  96. Підтримка сценаріїв SQL * Plus з використанням CLPPlus
  97. Малюнок 5. SQL * Plus-сумісний інструмент CLPLus
  98. Малюнок 6. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement
  99. Малюнок 7. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement
  100. Малюнок 8. Звіт інструменту оцінки MEET DB2
  101. Малюнок 9. Середній рівень операторов 98%
  102. висновок
  103. Часто задавані питання
  104. Ресурси для скачування

DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows

DB2 9.7

DB2 9.7 надає додаткам на платформі Oracle ведмежу хватку завдяки підтримці PL / SQL і іншим удосконаленням

Серія контенту:

Цей контент є частиною # з серії # статей: DB2 9.7

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=db2+9.7

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: DB2 9.7

Слідкуйте за виходом нових статей цієї серії.

переслідувані цілі

У березні, під час присвяченій 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 в 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

Так що ж саме має на увазі підтримка 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 укладена в так звані пакети (PACKAGE s). Пакет 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

Перехід на 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. Перезапустіть менеджер бази даних:
  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
  5. Перенесіть бажані схеми з Oracle на DB2 за допомогою режиму інтерактивного розгортання (Interactive deploy). У режимі інтерактивного розгортання ( рисунок 7 ) Відображається дерево навігації з усіма об'єктами, витягнутими з бази даних Oracle. Виділіть всі об'єкти і виконайте опцію меню deploy. В результаті інструмент скопіює об'єкти в DB2 і запише хід виконання цього процесу. Деякі об'єкти можуть не встановитися в автоматичному режимі, і інструмент надасть вам можливість попрацювати з ними. При виборі об'єкта ви побачите DDL і повідомлення про помилку DB2. Ви маєте можливість виправити визначення за допомогою вбудованого редактора і повторити установку. Завдання полягає в тому, щоб інтерактивно перенести всі об'єкти в DB2.
    Малюнок 7. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement

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

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

Малюнок 8. Звіт інструменту оцінки MEET DB2

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

Малюнок 9. Середній рівень операторов 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.

Ресурси для скачування

Схожі тими

  • оригінал статті (EN).
  • Сторінка, присвячена випуску версії DB2 9.7 : Загальні відомості про достоїнства DB2 (EN).
  • Чат з лабораторією : Аудіо- та відеозаписи, присвячені технічним питанням, пов'язаним з DB2 9.7, а також Web-трансляція цієї статті (EN).
  • "Перейти на DB2 легко" (YouTube): Відеодемонстрація з оглядом процесу перенесення додатків на DB2 (EN).
  • " DB2 9.7 CLPPlus "(YouTube): Відеодемонстрація використання SQL * Plus-сумісної оболонки CLPPlus (EN).
  • Підтримка PL / SQL в DB2 9.7: (YouTube): коротка відеозапис, що демонструє багато функцій PL / SQL, підтримувані в DB2 9.7 (EN).
  • IBM DB2 9.7 звільняє від залежності (YouTube): відеосвідчення численних клієнтів і партнерів (EN).
  • Розділ Information Management сайту developerWorks : Дізнайтеся більше про рішення IBM для управління інформацією. Технічна документація, інформаційні статті, навчальні курси, матеріали для завантаження, відомості про продукти та багато іншого.
  • DB2 9.7 для Linux, Unix і Windows : Завантажте безкоштовну пробну версію DB2 9.7 для Linux, UNIX та Windows. (EN)
  • DB2 Express-C 9.7 : Завантажте DB2 Express-C 9.7, загальнодоступну безкоштовну версію сервера бази даних DB2 Express. (EN)
  • Створіть свій наступний проект за допомогою пробного програмного забезпечення IBM , Яке можна завантажити прямо з сайту DeveloperWorks. (EN)

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows

DB2 9.7

DB2 9.7 надає додаткам на платформі Oracle ведмежу хватку завдяки підтримці PL / SQL і іншим удосконаленням

Серія контенту:

Цей контент є частиною # з серії # статей: DB2 9.7

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=db2+9.7

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: DB2 9.7

Слідкуйте за виходом нових статей цієї серії.

переслідувані цілі

У березні, під час присвяченій 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 в 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

Так що ж саме має на увазі підтримка 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 укладена в так звані пакети (PACKAGE s). Пакет 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

Перехід на 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. Перезапустіть менеджер бази даних:
  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
  5. Перенесіть бажані схеми з Oracle на DB2 за допомогою режиму інтерактивного розгортання (Interactive deploy). У режимі інтерактивного розгортання ( рисунок 7 ) Відображається дерево навігації з усіма об'єктами, витягнутими з бази даних Oracle. Виділіть всі об'єкти і виконайте опцію меню deploy. В результаті інструмент скопіює об'єкти в DB2 і запише хід виконання цього процесу. Деякі об'єкти можуть не встановитися в автоматичному режимі, і інструмент надасть вам можливість попрацювати з ними. При виборі об'єкта ви побачите DDL і повідомлення про помилку DB2. Ви маєте можливість виправити визначення за допомогою вбудованого редактора і повторити установку. Завдання полягає в тому, щоб інтерактивно перенести всі об'єкти в DB2.
    Малюнок 7. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement

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

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

Малюнок 8. Звіт інструменту оцінки MEET DB2

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

Малюнок 9. Середній рівень операторов 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.

Ресурси для скачування

Схожі тими

  • оригінал статті (EN).
  • Сторінка, присвячена випуску версії DB2 9.7 : Загальні відомості про достоїнства DB2 (EN).
  • Чат з лабораторією : Аудіо- та відеозаписи, присвячені технічним питанням, пов'язаним з DB2 9.7, а також Web-трансляція цієї статті (EN).
  • "Перейти на DB2 легко" (YouTube): Відеодемонстрація з оглядом процесу перенесення додатків на DB2 (EN).
  • " DB2 9.7 CLPPlus "(YouTube): Відеодемонстрація використання SQL * Plus-сумісної оболонки CLPPlus (EN).
  • Підтримка PL / SQL в DB2 9.7: (YouTube): коротка відеозапис, що демонструє багато функцій PL / SQL, підтримувані в DB2 9.7 (EN).
  • IBM DB2 9.7 звільняє від залежності (YouTube): відеосвідчення численних клієнтів і партнерів (EN).
  • Розділ Information Management сайту developerWorks : Дізнайтеся більше про рішення IBM для управління інформацією. Технічна документація, інформаційні статті, навчальні курси, матеріали для завантаження, відомості про продукти та багато іншого.
  • DB2 9.7 для Linux, Unix і Windows : Завантажте безкоштовну пробну версію DB2 9.7 для Linux, UNIX та Windows. (EN)
  • DB2 Express-C 9.7 : Завантажте DB2 Express-C 9.7, загальнодоступну безкоштовну версію сервера бази даних DB2 Express. (EN)
  • Створіть свій наступний проект за допомогою пробного програмного забезпечення IBM , Яке можна завантажити прямо з сайту DeveloperWorks. (EN)

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

DB2 9.7: Виконання Oracle-додатків на DB2 9.7 для Linux, UNIX і Windows

DB2 9.7

DB2 9.7 надає додаткам на платформі Oracle ведмежу хватку завдяки підтримці PL / SQL і іншим удосконаленням

Серія контенту:

Цей контент є частиною # з серії # статей: DB2 9.7

https://www.ibm.com/developerworks/ru/views/global/libraryview.jsp?series_title_by=db2+9.7

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: DB2 9.7

Слідкуйте за виходом нових статей цієї серії.

переслідувані цілі

У березні, під час присвяченій 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 в 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

Так що ж саме має на увазі підтримка 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 укладена в так звані пакети (PACKAGE s). Пакет 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

Перехід на 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. Перезапустіть менеджер бази даних:
  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
  5. Перенесіть бажані схеми з Oracle на DB2 за допомогою режиму інтерактивного розгортання (Interactive deploy). У режимі інтерактивного розгортання ( рисунок 7 ) Відображається дерево навігації з усіма об'єктами, витягнутими з бази даних Oracle. Виділіть всі об'єкти і виконайте опцію меню deploy. В результаті інструмент скопіює об'єкти в DB2 і запише хід виконання цього процесу. Деякі об'єкти можуть не встановитися в автоматичному режимі, і інструмент надасть вам можливість попрацювати з ними. При виборі об'єкта ви побачите DDL і повідомлення про помилку DB2. Ви маєте можливість виправити визначення за допомогою вбудованого редактора і повторити установку. Завдання полягає в тому, щоб інтерактивно перенести всі об'єкти в DB2.
    Малюнок 7. Перенесення схем Oracle в DB2 з застосуванням інструменту IBM Data Movement

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

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

Малюнок 8. Звіт інструменту оцінки MEET DB2

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

Малюнок 9. Середній рівень операторов 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.

Ресурси для скачування

Схожі теми

  • оригінал статті (EN).
  • Сторінка, присвячена випуску версії DB2 9.7 : Загальні відомості про достоїнства DB2 (EN).
  • Чат з лабораторією : Аудіо- та відеозаписи, присвячені технічним питанням, пов'язаним з DB2 9.7, а також Web-трансляція цієї статті (EN).
  • "Перейти на DB2 легко" (YouTube): Відеодемонстрація з оглядом процесу перенесення додатків на DB2 (EN).
  • " DB2 9.7 CLPPlus "(YouTube): Відеодемонстрація використання SQL * Plus-сумісної оболонки CLPPlus (EN).
  • Підтримка PL / SQL в DB2 9.7: (YouTube): коротка відеозапис, що демонструє багато функцій PL / SQL, підтримувані в DB2 9.7 (EN).
  • IBM DB2 9.7 звільняє від залежності (YouTube): відеосвідчення численних клієнтів і партнерів (EN).
  • Розділ Information Management сайту developerWorks : Дізнайтеся більше про рішення IBM для управління інформацією. Технічна документація, інформаційні статті, навчальні курси, матеріали для завантаження, відомості про продукти та багато іншого.
  • DB2 9.7 для Linux, Unix і Windows : Завантажте безкоштовну пробну версію DB2 9.7 для Linux, UNIX та Windows. (EN)
  • DB2 Express-C 9.7 : Завантажте DB2 Express-C 9.7, загальнодоступну безкоштовну версію сервера бази даних DB2 Express. (EN)
  • Створіть свій наступний проект за допомогою пробного програмного забезпечення IBM , Яке можна завантажити прямо з сайту DeveloperWorks. (EN)

Підпишіть мене на повідомлення до коментарів

Jsp?
Що це означає?
Як швидко буде працювати моє Oracle-додаток на DB2?
Як багато роботи треба було, щоб забезпечити ці функції?
Які типові труднощі при переході з Oracle на DB2?
Jsp?
Що це означає?
Як швидко буде працювати моє Oracle-додаток на DB2?
Як багато роботи треба було, щоб забезпечити ці функції?
Які типові труднощі при переході з Oracle на DB2?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью