170 likes | 378 Views
Миграция приложений Oracle-> Sql Server. Алексей Ковалев DB-Best Technologies alexeyk@dbbest.com. Причины и цели миграции Технические проблемы миграции. План доклада. Причины и цели миграции Ожидания от миграции. Причины и цели миграции. Уменьшить стоимость владения и содержания
E N D
Миграция приложенийOracle->Sql Server Алексей Ковалев DB-Best Technologies alexeyk@dbbest.com
Причины и цели миграцииТехнические проблемы миграции План доклада
Причины и цели миграцииОжидания от миграции
Причины и цели миграции • Уменьшить стоимость владения и содержания • Повысить производительность • Привести ИС к единой платформе • Провести общую ревизию системы
Что ожидают от миграции • Приложение работает правильно • Миграция проведена в срок • Производительность не хуже, чем у исходного приложения
Объект миграции DB App Миграция с помощью SSMA Ручная миграция
Sql Server Migration Assistant • http://www.microsoft.com/sqlserver/2005/en/us/migration-oracle.aspx SSMA migration analyzer Оценка SSMA schema converter 1 Миграция объектов SSMA data migrator 2 Миграция данных SSMA migration tester 3 Тестирование 4 Миграция приложения Тестирование
Основные проблемы миграции • Замена поставщика данных • Различие в типах данных • Различие в поведение SQL кода • Эмуляция встроенных функций Oracle • Динамический и Embedded Sql • Подход к обработке транзакций • Обработка ошибок/исключений • Различие в системных данных и ограничениях
Замена поставщика данных • OCI • ODBC • OleDb • ADO.Net • JDBC • Pro*C
Типы данных,встроенные функции • Различие в типах данных • Различие в поведение SQL кода • Эмуляция встроенных функций Oracle
Динамический SQL • Тяжело обнаружить • Sqlзашит в литералах, ресурсах • Тяжело отлаживать • Окончательный Sqlдоступен только в режиме выполнения/отладки • Трудоемкая конверсия • Использовать SSMA->Statements для конверсии
Embedded Sql, Pro*C EXEC SQL INSERT INTO emp (empno, comm) VALUES (:emp_number, NULL); EXEC SQL SELECT ename, sal, comm INTO :emp_name, :salary, :commission:ind_comm FROM emp WHERE empno = :emp_number; • Большой объем ручной работы по конверсии как Sqlкода, так и кода приложения • Относительно простой поиск (можно искать по ключевым словам типа EXEC SQL и т.д.) • Достаточно формальная замена на вызовы функций клиентского приложения • Во многих случаях имеет смысл заменить Embedded sqlна вызов ХП, реализующей ту же логику
Транзакции • Неявные транзакции • SET IMPLICIT_TRANSACTIONS • COMMIT в процедурах • DDL • Locks, long running transactions • SET TRANSACTION ISOLATION LEVEL SNAPSHOT, READ_COMMITTED_SNAPSHOT • Логика приложения – user input inside transaction
Обработка ошибок • NO_DATA_FOUND, TOO_MANY_ROWS • Unique indexes • Разные коды ошибок • User defined message, system messages
Самая большая проблема Empty string is null
Спасибо! Алексей Ковалев DB-Best Technologies alexeyk@dbbest.com • http://www.dbbest.com