<Insert Picture Here> Oracle ISV Migration Center Миграция решений партнеров с SQL Server на Oracle Вадим Мельников Консультант по базам данных План 1. Обзор архитектуры СУБД Oracle 2. Сравнение SQL Server и Oracle 3. Технология миграции с помощью Oracle SQL Developer Migration Workbench 2 Oracle 11g Обзор архитектуры 3 Серверная архитектура Oracle 11g • • • • • • • • Экземпляр (Oracle Instance) База данных (Oracle Database) Файлы базы данных (Database Files) Серверные процессы (Server Processes) Структура памяти (Memory Structures) Транзакции (Transactions) Словарь данных (Data Dictionary) Схема и пользователи (Schema And Users) Серверная Архитектура Oracle Сервер СУБД Oracle • Oracle – система управления базами данных которая предоставляет открытый, всеобъемлющий, интегрированный подход к управлению информацией • Состоит из экземпляра и базы данных 5 Oracle Server Экземпляр (Oracle Instance) • Средство доступа к базе данных Oracle • Состоит из набора процессов операционный системы и используемой ими памяти. • Открывает только одну базу данных в один момент времени Instance Shared pool Library cache Data Dictionary cache SGA Redo log Database buffer cache buffer cache PMON SMON DBWR LGWR CKPT Others 6 Memory structures Background structures Физическая структура Физическая структура БД Oracle определяется файлами операционной системы которые обеспечивают физическое хранение информации в базе данных. • Control files • Data files • Redo log files Header Online redo log files) 7 Data files (includes data dictionary) Control files Логическая структура данных в Oracle Логическая структура представлена иерархией: tablespaces, segments, extents, and blocks. Tablespace Data file Segment Extent 8 Segment Blocks SYSTEM and Non-SYSTEM Tablespaces • SYSTEM tablespace: • • • Создается вместе с базой данных Содержит словарь данных (data dictionary) Содержит сегмент отката SYSTEM • Non-SYSTEM tablespaces: • • 9 Содержит пользовательские сегменты Управляются администратором БД Database Block • Минимальная единица ввода-вывода • Состоит из одного или нескольких блоков данных операционной системы • Устанавливается при создании tablespace • DB_BLOCK_SIZE – значение блока по умолчанию 10 Одновременная поддержка блоков с разным размером • • Oracle11g поддерживает создание баз данных с различными размерами блока данных Преимущества: • • Возможность расположить объекты в табличные пространства с наиболее подходящим размером блока и увеличить производительность Возможно перемещать табличные пространства между базами с различными размерами блока (OLTP to Enterprise Data Warehouse) Структура блока данных Header Free space Data 12 Типы данных Oracle Data Datatype type User-defined User-defined Scalar Scalar CHAR(N), NCHAR(N) VARCHAR2(N), NVARCHAR2(N) NUMBER(P,S) DATE RAW(N) BLOB, CLOB, NCLOB, BFILE LONG, LONG RAW ROWID Built-in Built-in Collection Collection VARRAY TABLE Relationship Relationship REF Системные типы данных Built-In Built-InDatatype Datatype Native NativeDatatypes Datatypes CHARACTER CHARACTER NUMBER NUMBER DATE DATE LOB LOB Extended Datatypes Text ANSI ANSI Image DB2 DB2 Video SQL/DS SQL/DS RAW RAW Audio PL/SQL Datatypes ROWID ROWID Spatial BOOLEAN XML Time Series 14 Support SupportDatatypes Datatypes BINARY_INTEGER Таблицы в Oracle Обычные таблицы (heap) Организованные по индексу(IOT) 15 Секционированные таблицы (partitioned tables) Кластерные (Cluster) Oracle Database Oracle Database Parameter file Password file 16 Data files Control files Redo log files Archived log files Redo Log: Назначение В журналы повторного выполнения записываются все изменения в базе данных для проведения восстановления в случае сбоя. • Redo log объединяются в группы. • Необходимо как минимум 2 группы. • Данные в файлах внутри группы идентичны Database Redo log files 17 Redo Logs: Как работает? • Группы Redo log используются циклично. • Когда файлы группы заполнены, LGWR переключается на следующую группу. • • • 18 Это называетcя переключением логов В этот момент происходит Checkpoint Информация записывается в control file Принудительное переключение логов • Переключение логов - ALTER SYSTEM SWITCH LOGFILE • Checkpoint : • Setting FAST_START_MTTR_TARGET parameter • ALTER SYSTEM CHECKPOINT command ALTER SYSTEM CHECKPOINT; 19 Архивные Redo Log Заполненные Redo log могут быть заархивированы. • Два преимущества использования архивных журналов: • Восстановление: Backup вместе с redo и archived логами гарантирует восстановление всех committed транзакций. • Backup: Может выполняться без остановки базы данных. • Режим базы данных при создании NOARCHIVELOG. 20 Архивные Redo Log • Архивирование журналов осуществляется процессом ARCn. Запускается автоматически или в ручную при помощи SQL команд. • В управляющий файл записывается название архивного журнала, № последовательности и мин. и макс. SCN в этом логе. • Заполненный redo log file не может быть использован снова пока не произойдет checkpoint и файл не будет заархивирован процессом ARCn. • Archived redo log могут быть дублированы. 21 Undo: Обзор • Перед тем как сделать изменения в блоке данных Oracle копирует его в Undo. • Это необходимо для Rollback и Read Consistency. 22 Undo: Схема Old image Table New image Undo segment Update transaction 23 Согласованность чтения Table SELECT * FROM table New image Image at start of statement 24 Структура памяти Структура памяти Oracle состоит из двух основных областей: • System Global Area (SGA): Выделяется при старте экземпляра, базовый компонент экземпляра Oracle • Program Global Area (PGA): Выделяется при запуске серверного процесса 25 System Global Area (SGA) • SGA состоит из следующих структур: • • • • Shared pool Database buffer cache Redo log buffer Other structures (e.g. lock and latch management, statistical data) • Опциональные структуры SGA: • • 26 Large pool Java pool Обзор основных компонентов User process Instance Shared pool Library cache Server process PGA Data Dict. cache SGA Redo log Database buffer cache buffer cache PMON SMON DBWR LGWR Parameter file Password file 27 Data files Control files CKPT Redo log files Database Others Archived log files System Global Area (SGA) • • Размер SGA может меняться динамически с помощью параметра SGA_TARGET, без перезагрузки экземпляра Память для SGA выделяется дифференцированно под каждый компонент SGA в зависимости • • • Преимущества: • • 28 Необходимости в памяти Размера SGA_TARGET Сервер Oracle может самостоятельно изменять количество используемой им памяти. SGA может расти и сжиматься динамически под управлением DBA Program Global Area (PGA) PGA – это память зарезервированная для процессов подключающихся к базе данных. PGA Server process User process Dedicated server Session Stack information space sort area, cursor information SGA Stack sort area, cursor information space SGA Session information Shared SQL areas 29 Shared server Shared SQL areas Структура процессов User process Instance SGA Server process PGA PMON SMON DBWR LGWR CKPT Database 30 Others Фоновые процессы Взаимодействие между физическими и логическими структурами памяти осуществляется с помощью фоновых процессов. • Обязательные фоновые процессы DBWn LGWR PMON SMON CKPT • Возможные фоновые процессы ARCn QMNn CJQ0 LCKn 31 LMON LMDn Pnnn Dnnn Snnn RECO Транзакции • Oracle использует неявную транзакционную модель. • Транзакция начинается сразу за окончанием предыдущей • COMMIT или ROLLBACK заканчивают транзакцию 32 Словарь данных Во время создания базы данных сервер Oracle создает дополнительные объектные структуры в файлах данных. • Таблицы словаря данных • Таблицы dynamic performance Data files Control files Database Data Data Dictionary Dictionary Tables Tables Dynamic Dynamic Performance Performance Tables Tables 33 Redo log files Словарь данных Словарь данных – это набор read-only таблиц и представлений который содержит информацию о базе данных. • Описывает базу данных и ее объекты • Включая два типа объектов: • Базовые таблицы • Хранят описание БД • Создаются вместе с CREATE DATABASE • Data Dictionary views • Summarize base table information • Created using catalog.sql script 34 Словарь данных содержит Словарь данных предоставляет информацию о: • Логической и физической структуре БД • Свойствах и размерах объектов • Ограничениях целостности • Пользователях • Ролях • Привилегиях • Аудите 35 Как используется Data Dictionary • Сервером Oracle для поиска информации о: • • • Users Schema objects Storage structures • Oracle вносит изменения в словарь данных когда выполняется DDL. • Пользователи и DBA могут получать информацию о базе данных. 36 Категории объектов Data Dictionary • DBA: What is in all the schemas • ALL: What the user can access • USER: What is in the user's schema DBA_xxx All of the objects in the database ALL_xxx Objects accessible by the current user USER_xxx Objects owned by the current user 37 Схема Схема • Схема – это набор объектов • Схема может быть создана для каждого созданного пользователя Tables Пользователь может быть связан только с одной схемой. Views Пользователю не обязательно соответствует схема Synonyms • • 38 Schema Objects Triggers Constraints Indexes Sequences Stored program units User-defined data types Database links <Insert Picture Here> Сравнение SQL Server и Oracle 39 Сравнение Oracle and SQL Server Что похоже? • • • • • • • 40 Объекты схем (tables, views) Типы данных Ссылочная целостность Constraints Поддержка транзакций Триггеры и хранимые процедуры Доступ к системным каталогам при помощи SQL Типы данных 41 SQL Server Oracle INTEGER NUMBER(10) SMALLINT NUMBER(6) TINYINT NUMBER(3) DECIMAL(p,[q]) NUMBER(p,[q]) NUMERIC(p,[q]) NUMBER(p,[q]) REAL FLOAT FLOAT[(p)] FLOAT[(p)] BIT NUMBER(1) CHAR(n) CHAR(n) VARCHAR(n) VARCHAR2(n) NCHAR(n) CHAR(n*2) NVARCHAR(n) VARCHAR2(n*2) Типы данных 42 SQL Server Oracle TEXT CLOB IMAGE BLOB BINARY(n) RAW(n), BLOB VARBINARY(n) RAW(n), BLOB DATETIME DATE (or TIMESTAMP) SMALLDATETIME DATE MONEY NUMBER(19,4) SMALLMONEY NUMBER(10,4) TIMESTAMP NUMBER SYSNAME VARCHAR2(30) Сравнение Oracle и SQL Server Основные различия: • Организация • Терминология • Модель подключений • Транзакционная модель • Временные таблицы • Разработка приложений • Хранимые процедуры • Утилиты (Пакетная загрузка) 43 Сравнение Oracle и SQL Server Что такое база данных? Oracle instance (Database plus processes) Oracle database: • Collection of schemas • Stored in tablespaces • Central schema: SYSTEM Memory Processes SYSTEM Schema 1 Schema 2 Schema 3 44 = SQL Server server SQL Server database = Oracle schema Memory Processes Master, model,msdb, tempdb Database 1 Database 2 Database 3 Сравнение структур хранения данных • Oracle • • • • • 45 Database Tablespace Segment Extent Block • SQL Server • • • • Database Filegroup Extent (64 KB fixed) Page (8 KB fixed) SQL Server • Fundamental storage unit: Page (8 KB fixed) • Basic unit to allocate space to tables and indexes: Extent (64 KB fixed) Database OS file: Primary data file Secondary data file Log file 46 Filegroup Oracle • Fundamental storage unit: Block • A logical block consists of one or more OS blocks. • The size of a logical block is defined by an initialization parameter. Logical Physical Tablespace Data file Segment Extent Block 47 OS block Различия в терминологии • • • • • • 48 Oracle spfile(auto managed binary) = SQL Server sysconfig Oracle v$, USER_TABLES = SQL Server sp_ stored procedures, sysxxx tables Oracle has schemas/tablespaces = SQL Server databases/devices Oracle has redo buffer cache, redo logs for archiving = SQL Server transaction log Oracle has UNDO space for read consistency = no equivalent in SQL Server* (SS2K5) Oracle SQL*PLUS (/) = SQL Server ISQL (go) Подключение к БД • Для переключения между несколькими БД в SQL Server используется команда: SQL> Use hr • Переключения между несколькими схемами в одной БД Oracle: SQL> CONNECT hr/hr; • ИЛИ SQL> ALTER SESSION SET CURRENT_SCHEMA=HR; 49 Сравнение объектов схем • Объекты Oracle которых нет в SQL Server: • Database link • Profile • Materialized view • Sequence (SQL Server: Serial data type) • Synonym 50 Именование объектов СУБД Oracle • Длинна имен должна быть то 1 до 30 байт, действуют следующие ограничения: • Имена БД ограничены 8 байтами. • Имена DB link ограничены 128 байтами. • Нельзя использовать зарезервированные Oracle слова без кавычек. • Имена не в кавычках должны начиниться с буквы алфавита. Именование объектов БД • Имена не в кавычках могут содержать только: • Символы алфавита кодировки БД • Подчеркивания (_) • Знак доллара ($) • Знак фунта (#) • В одном пространстве имен не может быть двух объектов с одинаковым именем. Различия в моделях подключения • The Oracle server is “connection-based”. It offers: • • • • Multiple active result-sets per connection Only one connection needed Multiple transactions per session Distributed database access via database links • SQL Server is “stream-based”. It offers: • One active result-set per connection • Typically several connections used 53 Обработка Result Sets • SQL Server automatically put resultsets in stream • Returns data in Tablular Data Stream format (TDS) • Multiple resultsets possible • Oracle provides cursor variables • Client receives cursor variable • Cursor Variable is a handle to server side memory resident cursor • Client fetches as much of data as desired • Multiple Cursor Variables easily accommodated • Can pass Cursor Variable to other clients or servers 54 Сравнение модели транзакций 55 Oracle SQL Server ‘Readers’ never block ‘writers’ Read locks provide consistency, but may block ‘writers’. ‘Read’ transactions are always consistent. ’Dirty reads’, i.e. reads of uncommitted data allowed to bypass locks True row-level locks N/A Locks never escalate Locks escalate as numbers increase Locking on with the block Locking in memory Модель Транзакций • Oracle supports always full Isolation Model • Only committed data visible to other users • Allows repeatable reads • SQL Server allows several modes • SET TRANSACTION ISOLATION LEVEL … for each transaction • Uses BROWSE mode (timestamp) to detect update conflicts (optimistic locking) 56 Сравнение модели транзакций • Ключевая разница между транзакционными моделями: SQL Server Oracle Явное Неявное Завершение По-умолчанию Требуется COMMIT транзакции. используется auto- Начало транзакции. commit mode 57 Начинаем транзакцию В SQL Server транзакция начинается явно: SQL> 2 3 4 BEGIN TRANSACTION INSERT INTO regions VALUES (5, ‘Southeast Asia’) INSERT INTO countries VALUES (‘VN’, ‘Vietnam’, 5) COMMIT TRANSACTION В Oracle - неявно: SQL> INSERT INTO regions VALUES (5, Southeast Asia’); 2 3 58 INSERT INTO countries VALUES (‘VN’,‘Vietnam’, 5); COMMIT; Завершение транзакции В SQL Server – авто-коммит: SQL> INSERT INTO regions 2 VALUES (6, ‘South America’) 3 INSERT INTO countries 4 VALUES (‘PE’, ‘Peru’, 6) Transaction #1 Transaction #2 В Oracle всегда требуется делать COMMIT или ROLLBACK SQL> INSERT INTO regions 2 3 4 5 6 59 VALUES (6, ‘South America’); COMMIT; INSERT INTO countries VALUES (‘PE’, ‘Peru’, 6) COMMIT; Transaction #1 Transaction #2 Временные таблицы • SQL Server: • Local temporary tables, имена начинаются с # • Global temporary tables, имена начинаются с ## • Не совместимы с именованием в Oracle conventions • Oracle: • Temporary ANSI-style (global temporary) tables • Multitable joins (optimized internally) • Materialized views 60 Временные таблицы CREATE CREATE GLOBAL GLOBAL TEMPORARY TEMPORARY TABLE TABLE emp_temp( emp_temp( eno eno NUMBER, NUMBER, ename ename VARCHAR2(20), VARCHAR2(20), sal sal NUMBER) NUMBER) ON ON COMMIT COMMIT DELETE DELETE ROWS; ROWS; INSERT INSERT INTO INTO emp_temp emp_temp VALUES( VALUES( 101,’Inga’,1000); 101,’Inga’,1000); SELECT SELECT count(*) count(*) FROM FROM emp_temp; emp_temp; 61 • Данные хранятся только во время сессии или транзакции • Данные видит только одна сессия/транзакция • Redo не пишется, только undo • Для сегментов данных используется user’s temporary tablespace Миграция таблицы со столбцом с IDENTITY • Oracle не поддерживает атрибут IDENTITY. Для использования авто-инкремента в Oracle создайте sequence и используйте его в триггере для этой таблицы. 62 Миграция таблицы со столбцом с IDENTITY • SQL Server version • Create the Table SQL> CREATE TABLE Friend ( 2 3 4• FriendID INT IDENTITY PRIMARY KEY NOT NULL, Name VARCHAR(50), PhoneNo Insert RowVARCHAR(15)DEFAULT ‘Unknown Phone’) SQL> INSERT INTO Friend (Name, PhoneNO) 2 63 VALUES (‘Mike’,’123-456-7890’); Миграция таблицы со столбцом с IDENTITY • Oracle version • Create the Table SQL> CREATE TABLE Friend ( 2 3 4• FriendID NUMBER PRIMARY KEY NOT NULL, Name VARCHAR(50), PhoneNo Insert RowVARCHAR(15)DEFAULT ‘Unknown Phone’) SQL> INSERT INTO Friend (Name, PhoneNO) 2 64 VALUES (‘Mike’,’123-456-7890’); Миграция таблицы со столбцом с IDENTITY • Oracle version cont. • Create the Sequence SQL> CREATE SEQUENCE SEQ; • Create the Trigger SQL> CREATE OR REPLACE TRIGGER FRIEND_AUTO_NUMBER 2 3 4 5 6 65 BEFORE INSERT ON Friend FOR EACH ROW BEGIN SELECT SEQ.NEXTVAL INTO :NEW.FriendID FROM DUAL; END; Обработка NULL • SQL Server воспринимает пустую строку как пробел. SQL> SELECT customer_id, date_of_birth 2 FROM customers 3 WHERE cust_email = ‘’ • Oracle воспринимает пустую строку как NULL. Перепишите SQL запрос для его корректной работы. SQL> SELECT customer_id, date_of_birth 2 FROM customers 3 WHERE cust_email = ‘ ’ 66 Сравнение SQL 67 Зарезервированные слова Oracle • Много зарезервированных слов Oracle 11g допускается использовать в SQL Server 2005: Word SQL Server Oracle ACCESS COMMENT DATE GROUP LEVEL • 68 Исправьте SQL для его работы в Oracle, избавьтесь от зарезервированных слов. Доступ через имена объектов • Существуют различия в обращении к таблице или представлении через SQL: • SQL Server • database_name.owner_name.table_name • Oracle • user_schema.table_name • Пример запроса к другой схеме: 69 SQL Server Oracle SELECT * FROM oe.oe_dba.orders SELECT * FROM oe.orders Запрос информации об объекте • В Oracle SQL*Plus используйте команду DESCRIBE чтобы получить структуру таблицы. 70 Microsoft SQL Server Oracle SP_HELP table_name DESCRIBE table_name SELECT Statement: FROM Clause В SQL Server, FROM опционально. SQL> SELECT getdate() В Oracle, FROM обязательно!. SQL> SELECT sysdate FROM dual; 71 SELECT Statement: SELECT INTO Clause В SQL Server, используется выражение SELECT INTO. SQL> SELECT cust_first_name, cust_last_name 2 INTO contacts 3 FROM customers В Oracle, если таблица уже существует то используется INSERT INTO. SQL> INSERT INTO contacts 2 SELECT cust_first_name, cust_last_name 3 FROM customers; 72 SELECT Statement: SELECT INTO Clause cont. В SQL Server, используется выражение SELECT INTO. SQL> SELECT cust_first_name, cust_last_name 2 INTO contacts 3 FROM customers В Oracle, если таблица не существует используется Create table as select. SQL> CREATE contacts AS 2 SELECT cust_first_name, cust_last_name 3 FROM customers 73 SELECT Statement: Column Alias SQL Server, пример использования псевдонима: SQL> SELECT email = cust_email 2 FROM customers В Oracle, псевдоним идет за названием столбца SQL> SELECT cust_email email 2 74 FROM customers; SELECT Statement: TOP n Clause В SQL Server, TOP дает первые n строк выборки. SQL> SELECT TOP 5 empname, total_com FROM emp ORDER BY total_com В Oracle, необходимо делать подзапрос и использовать ROWNUM SQL> SELECT * FROM (SELECT empname, total_com FROM emp ORDER BY total_com )WHERE ROWNUM < 6 75 INSERT Statement • В SQL Server, INTO опционально. SQL> INSERT regions 2 VALUES (202, ‘Southeast’) • В Oracle, INTO обязательно. SQL> INSERT INTO regions 2 76 VALUES (202, ‘Southeast’); UPDATE statement • Пример на SQL Server: SQL> 2 3 4 5 UPDATE inventories SET quantity_on_hand = 0 FROM inventories i, product_information p WHERE i.product_id = p.product_id and product_status=‘planned’ • Вариант для Oracle: SQL> 2 3 4 5 77 UPDATE inventories SET quantity_on_hand = 0 WHERE product_id IN (SELECT product_id FROM product_information WHERE product_status = ‘planned’); DELETE statement • SQL Server: SQL> 2 3 4 DELETE FROM inventories FROM inventories i, product_information p WHERE i.product_id = p.product_id AND supplier_id = 102066 • Вариант для Oracle: SQL> 2 3 4 78 DELETE FROM inventories WHERE product_id IN (SELECT product_id FROM product_information WHERE supplier_id = 102066); Операторы • Примеры разницы в операторах: SQL Server Oracle WHERE qty !< 100 WHERE qty >= 100 WHERE status = NULL WHERE status IS NULL String SELECT fname + ‘ ‘ + SELECT fname || ‘ ‘ Concatenation lname AS name || lname AS name Value Comparison Null Value Comparison and Literals 79 Встроенные функции SQL Server Oracle Character char() chr() Null Test isnull(qty, 0) nvl(qty,0) Conditional Test CASE cust_type WHEN 1 THEN ‘Gold’ 80 DECODE (cust_type, 1,’Gold’, WHEN 2 THEN ‘Silver’ 2,’Silver’, WHEN 3 THEN ‘Bronze’ 3, ‘Bronze’) END Oracle also has CASE Преобразование типов данных • SQL Server использует функцию CONVERT для преобразования типов. SQL> SELECT CONVERT(char, GETDATE()) • В Oracle есть несколько соответствующих функций: SQL> SELECT TO_CHAR(sysdate) 2 81 FROM dual; Хранимые процедуры • Для Oracle хранимые процедуры пишутся на Java или PL/SQL • Они могут быть представлены PROCEDURES или FUNCTIONS • Которые могут собираться в PACKAGES 82 Хранимые процедуры • В SQL Server хранимые процедуры представлены Transact SQL. • Могут быть также процедурами или функциями. 83 Важно при преобразовании Transact SQL • • • • • • 84 Обработка и контроль над транзакциями Хранимые процедуры которые возвращают Resultsets (CURSOR) Обработка ошибок SQL Syntax Специфические встроенные функции Динамический SQL Business Logic Transact-SQL T-SQL issues - Error Handling • SQL Server / Sybase propagate errors back to client via global variable • @@Error needs to be checked regulary • Oracle has Exception Handling in PL/SQL to deal with errors • Throw/Catch exception model • SQL statements are embedded in a PL/SQL block with optional EXCEPTION section • Use EXCEPTION to trap exactly the error conditions you wish • Un-handled exceptions propagate to higher levels 85 Сравнение Триггеров Oracle и SQL Server SQL Server Oracle Типы INSERT, UPDATE, and INSERT, UPDATE, триггеров DELETE statements DELETE statements Тип AFTER and INSTEAD OF BEFORE, AFTER and trigger INSTEAD OF triggers Тип Statement level Row or statement level Ссылка на Uses DELETED and Accessed via :OLD and прошлое и INSERTED temporary tables :NEW новое значение 86 Различия в утилитах/названиях • • • • • 87 Oracle has scott/tiger schema = SQL Server PUBS database Oracle has System/manager = SQL Server SA/ Oracle Oracle Call Interface = SQL Server DB-Library/CT-Library Oracle SQL*Loader = SQL Server BCP Oracle Warehouse Builder = SQL Server Data Transformation Services (DTS) <Insert Picture Here> Миграция с SQL Server на Oracle11g 88 Ключевые аспекты миграции • Что такое миграция? • Перевод существующей среды приложения в новую архитектуры с сохранением всех данных и функциональных возможностей. • Ключевые аспекты миграции: • Schema (table definitions) • Data (content of tables) • Application • Основные шаги при выполнении миграции: • • • • 89 Анализ Миграция Тестирование Развертывание Migration Tools Support 1. Evaluation 2. Assessment 8. Project Support 7. Production Migration Lifecycle 6. Customer Acceptance 4. Testing 5. Optimization 90 3. Migration Процесс миграции 1. Схема БД и данные 2. Бизнес логика 3. Клиентские приложения 91 Схема и данные Объекты в БД • • • • • • • 92 Tables and Data Primary Keys Check Constraints Foreign Keys Indexes Views Groups / Users • Databases • Stored Procedures • Triggers • Grants • Rules • Defaults • User Defined Types Бизнес логика Бизнес логика в SQL Server • Transact-SQL (T/SQL) • • • Дополнительные хранимые процедуры • • • DLL’s вызываемые из БД, написанные на C,C++ Переносятся вручную .NET CLR Stored Procedures • • 93 Триггеры, Хранимые процедуры Переводятся на PL/SQL с помощью SQL Developer Migration Workbench Хранимые процедуры написанные на .NET Работают с Oracle 10gR2, под Windows Миграция клиентских приложений • • • • • 94 Использование бизнес логики - вызов хранимых функций/процедур Управление полученными данными Изменение способа подключения к БД Обработка ошибок Исправление проблемного SQL SQL Developer Migration Workbench • • • Утилита написанная на Java Упрощает процесс миграции на СУБД Oracle с других платформ Осуществляет миграцию БД в целом, включая триггеры и хранимые процедуры http://www.oracle.com/technology/products/database/sql_developer/index.html Возможности SQL Developer Migration Workbench • Произвести миграцию за несколько шагов используя GUI и скрипты • Получить информацию об исходной БД с помощью online захвата или скриптов • Редактировать объекты хранящиеся в репозитории на промежуточном этапе • Разбирать и преобразовывать хранимые процедуры, триггеры, представления в Oracle PL/SQL • Следить за процессом миграции с помощью отчетов и информационных сообщений SQL Developer Migration Workbench Использование Workbench Within Migrations 1. 2. Создаем репозиторий (для 1-го использования) Capture структуры исходной БД в Source Model (online/offline) Convert в Oracle Model 3. • 4. Migrate исходной БД • • 97 Создается представление захваченной структуры для целевой БД (Oracle) Создание схемы (online / offline) Перенос данных (online / offline) 98 Migration Workbench UI 99 Translation Scratch Editor Statement Level Translation 100 Translation Diff Editor Matching Statements and Blocks 101 T-SQL Editor Code Folding / Syntax Highlighting 102 Ручное преобразование скорее всего потребуется для: • • • • 103 Сложные триггеры Ссылки на таблицы словаря данных (systables,…) Динамический SQL Последние расширения к T-SQL (например XML extensions) Обработка ошибок • В TSQL ошибки обрабатываются с помощью переменной @@ERROR, остановка выполнения хранимой процедуры не обязательна. • В PL/SQL любая ошибка приводит к остановке выполнения если ее перехват не обработан BEGIN...EXCEPTION...END. • В SQL Server RAISERROR не останавливает выполнение хранимой процедуры. Эквивалент в Oracle RAISE_APPLICATION_ERROR приводит к остановке! 104 Эмулируемые функции • Migration workbench предоставляет набор функций для эмуляции встроенных функции SQL Server • • • • • • • • • • • 105 ATN CDATE CDBL CEILING CHAR_LENGTH CSTR DATEADD DATEDIFF DATESERIAL DATETOSTR YEAR_ DATE_ DAY_ DBNAME DDL_MANAGER DEBUG_TABLE FIX GETDATE INSTR_ INT_ ISNULL LCASE LEFT LEN MID MONTH_ NOW OBJECT_NAME REPLICATE REVERSE_ RIGHT SGN SHELL SPACE_ SQR STR STRING SUBSTRING TIME_ UCASE VAL Oracle ODBC • • • Основан на последнем Oracle OCI Возможности • Встроенный Scroll Cursor • Прозрачная поддержка ResultSet Поддерживает массивы • Поддерживает LOB • • 106 Oracle ODBC Microsoft ODBC www.oracle.com www.eu.microsoft.com Информация • Общая информация: www.oracle.com/database • Технологическая информация: Oracle Technology Network otn.oracle.com • Metalink: metalink.oracle.com Информация для контактов : Вадим Мельников vmelnikov@fors.ru +7(495) 913-75-75 (доб. 220) 107