Post on 01-Jan-2016
description
Миграция приложенийOracle->Sql Server
Алексей Ковалев DB-Best Technologiesalexeyk@dbbest.com
Причины и цели миграцииТехнические проблемы миграции
План доклада
Причины и цели миграцииОжидания от миграции
Причины и цели миграции
• Уменьшить стоимость владения и содержания
• Повысить производительность• Привести ИС к единой платформе• Провести общую ревизию системы
Что ожидают от миграции
• Приложение работает правильно• Миграция проведена в срок• Производительность не хуже, чем
у исходного приложения
Технические проблемы миграции
Объект миграции
DB App
Миграция с
помощью SSMA
Ручная миграция
Sql Server Migration Assistant•
http://www.microsoft.com/sqlserver/2005/en/us/migration-oracle.aspx
Оценка
Миграция объектов
Миграция данных
Тестирование
Миграция приложения
Тестирование
SSMA migration analyzer
SSMA data migrator
SSMA migration tester
SSMA schema converter1
2
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 Technologiesalexeyk@dbbest.comhttp://www.dbbest.com