20
Microsoft SQL Server Migration Assistant™ para Oracle Facilitando a Migração de Bancos de Dados Publicado: Março de 2005 Para as informações mais recentes, consulte http://www.microsoft.com/brasil/sql/solutions/ssm/default.mspx .

SSMA for Oracle-BRZ

Embed Size (px)

DESCRIPTION

Curso Oracle SQL

Citation preview

Microsoft SQL Server Migration Assistant for Oracle

Microsoft SQL Server Migration Assistant para Oracle

Facilitando a Migrao de Bancos de Dados

Publicado: Maro de 2005

Para as informaes mais recentes, consulte http://www.microsoft.com/brasil/sql/solutions/ssm/default.mspx.

ndice

1Introduo

Fase de Avaliao1

Converso de Esquemas3

Migrao de Dados5

Converso da Lgica de Negcio5

Validao, Integrao e Anlise de Desempenho12

Concluso14

Introduo

O SQL Server o principal sistema de gerenciamento de bancos de dados relacional no mercado hoje. Segundo recentes relatrios do IDC (consulte http://news.com.com/Database+sales+show+some+life/2100-1012_3-5602603.html), O SQL Server o banco de dados que cresce mais rapidamente no mercado. Os clientes esto adotando o SQL Server por causa de seu baixo custo total de propriedade, facilidade de gerenciamento, segurana robusta e escalabilidade de classe empresarial. Contudo, muitos clientes continuam executando seus aplicativos com outros bancos de dados tais como Oracle e DB2. Isto se deve principalmente pelo custo e complexidade de migrao desses bancos de dados para o SQL Server.

Para tratar dessa situao, a Microsoft est oferecendo um novo produto para facilitar a migrao para o SQL Server. O Microsoft SQL Server Migration Assistant (SSMA - Assistente de Migrao do Microsoft SQL Server) automatiza o processo de migrao a partir de outros bancos de dados para o SQL Server. Este documento explicar cada passo do processo de migrao de bancos de dados e discutir como o SSMA significativamente acelera, e reduz os custos de cada um dos passos. O lanamento inicial do SSMA dedica-se migrao do Oracle para o Oracle to Microsoft SQL Server 2000.

O SQL Server Migration Assistant consiste nos seguintes componentes principais:

Migration Analyzer avalia a complexidade do projeto de migrao.

Schema & Data Migrator and SQL Converter realiza a converso do banco de dados e proporciona uma poderosa interface para desenvolvedores de bancos de dados de plataformas cruzadas.

Migration Tester oferece validao automatizada do processo de migrao.

Migrar sua aplicao a partir de um outro sistema de banco de dados para o SQL Server inclui as seguintes fases.

Fase de Avaliao

Converso de Esquema

Migrao dos Dados

Converso da lgica de negcio

Validao, integrao e anlise de desempenho.

As sees a seguir cobrem cada um desses passos usando o Assistente de Migrao do SQL Server para mostrar como a migrao realizada.

Fase de Avaliao

Quando TI determina que seria benfico migrar um nmero de bancos de dados de Oracle para SQL Server; o primeiro passo avaliar a dificuldade, tempo e custo da migrao. Fatores que contribuem diretamente para isso so a complexidade dos bancos de dados e das aplicaes que os usam. Embora no haja uma medida formal para complexidade de bancos de dados, seria cada vez mais complexo e custoso migrar quanto mais objetos de lgica de negcio (procedimentos armazenados, funes, triggers, pacotes e assim por diante) que ele contm. Aumentando a complexidade da migrao esto as diferenas de funes de sistema entre as duas plataformas. Funes fornecidas por uma plataforma podem no ser oferecidas pela outra, ou pode haver diferenas sintticas ou semnticas na implementao de funes comuns.

A complexidade da migrao das aplicaes para o novo banco de dados tambm precisa ser avaliada. O nmero de solicitaes de SQL feitas pela aplicao contribui para essa complexidade, porque todas elas devem ser convertidas. Ainda mais importante, o grau no qual SQL dinmico usado aumenta significativamente a complexidade da converso, porque pode ser necessrio reescrever um grande cdigo para se converter as consultas de SQL dinmica.

O resultado da avaliao da migrao uma estimativa da quantidade de esforo necessrio para a concluso de cada passo do processo de migrao, e a despesa total do projeto. Deve-se notar que conduzir a avaliao da migrao pode, ela prpria, ser um esforo dispendioso em tempo e dinheiro. No incomum que uma avaliao leve vrios meses para um grande projeto de migrao e custe dezenas de milhares de dlares.

Felizmente, existe uma nova ferramenta de avaliao de migrao, o SSMA Migration Analyzer, que realiza uma anlise profunda para obter estimativas do tempo e esforo necessrios para a migrao de um banco de dados. Tipicamente, uma avaliao levar menos de um dia para se completar. A ferramenta oferece uma estimativa do trabalho necessrio para migrar o banco de dados manualmente, assim como a porcentagem do banco de dados que pode ser convertida automaticamente. O Migration Analyzer computa aproximadamente 100 estatsticas especficas que caracterizam o banco de dados de maneira abrangente. O SQL Converter converte tipicamente mais de 90 por cento do cdigo SQL, automaticamente, e j realizou at 99 por cento de converso automtica do cdigo. Alm do perfil abrangente do banco de dados em Oracle, o relatrio da avaliao indica os objetos do banco de dados que o SQL Converter no pode converter, com as construes especficas no cdigo que provocam o problema.

A seguir esto algumas das estatsticas computadas pelo Migration Analyzer sobre todos os objetos do banco de dados no banco de dados de origem em Oracle. Elas incluem:

Nmero total de objetos de banco de dados tais como procedimentos, funes, triggers, tabelas, ndices, pacotes, seqncias e visualizaes.

Nmero total de linhas de cdigo, inclusive estatsticas por objeto.

Nmero total de instrues SELECT, INSERT, DELETE, e UPDATE.

Nmero total de CURSORs , RECORDs, e EXCEPTIONs.

Nmero total e porcentagem dos componentes automaticamente conversveis.

Complexidade estimada da converso.

Durao estimada da migrao do projeto em termos de horas de trabalho manual (considerando-se a NO utilizao do SSMA).

As estatsticas fornecidas pelo Migration Analyzer podem ser salvas em um arquivo externo em formato compatvel com Excel para possibilitar ao usurio o trabalho com esses dados offline se preferir.

A tomada de tela a seguir mostra como o Migration Analyzer apresenta essas estatsticas ao usurio:

Converso de Esquemas

Mapeamento de esquemas e objetos

O esquema a base para definir o banco de dados de destino. Na migrao a partir do Oracle para o SQL Server, o novo esquema pode ser derivado de uma maneira bastante direta a partir do esquema original. Em virtude de diferenas de recursos entre as duas plataformas, o mapeamento entre os esquemas no pode ser de um para um. Um exemplo de onde isso se manifesta em lidar-se com atributos de como BLOBs.

O Oracle suporta mltiplos atributos com valores de BLOB por tabela enquanto o SQL suporta apenas um por tabela. Neste caso, uma nica tabela em Oracle pode mapear mltiplas tabelas em SQL Server. Por causa de tais diferenas, migrar os dados entre bancos de dados pode no ser uma simples cpia de tabelas, porque as novas estruturas de tabela podem ser um pouco diferentes das antigas. H muitos anos j existem ferramentas disponveis para ajudar na definio manual de esquemas de banco de dados. Existe outro conjunto de ferramentas para transformar e mover fisicamente grandes bancos de dados entre plataformas. O Schema & Data Migrator (SSMA) converte automaticamente um esquema de banco de dados em Oracle (tabelas, restries, ndices) em um esquema em Microsoft SQL Server, migrando os dados fisicamente para ocupar o novo banco de dados.

Quando o SSMA inicia, o usurio se conecta com:

O banco de dados de origem em Oracle especificando os seguintes parmetros:

Hotsname, port, SID, username, password.

O banco de dados de destino em Microsoft SQL Server (SQL SERVER) especificando os seguintes parmetros:

Hostname, port, instance name, database name, schema, username, password.

O usurio ver a seguinte interface grfica:

A metade superior representa os objetos do banco de dados de origem, acessvel atravs dos controles de navegao esquerda. Semelhantemente, a metade inferior apresenta objetos traduzidos prontos para a insero no banco de dados de origem. O usurio pode selecionar os objetos de origem, neste caso do banco de dados em Oracle (padro ou qualquer outro esquema), que sero convertidos no esquema do SQL Server. Os objetos convertidos podem ento ser pesquisados na metade inferior da tela. Alm disso, depois que o usurio verifica os objetos gerados e possivelmente faz alguma reviso no esquema, ele pode gerar um script para carregar o esquema gerado no SQL Server.

Para funes e procedimentos de sistema Oracle que no tm contrapartes em SQL Server, h um de banco de dados SYSDB com esquema SYS, e os scripts de instalao carregaro UDFs, procedimentos armazenados, e procedimentos armazenados estendidos que emulam o comportamento de objetos em Oracle. Quando uma tabela salva com script, dois arquivos so produzidos: um com definies de tabela e ndice, e outra com restries e triggers. Uma nova coluna ROWID de tipo de dados de identificador exclusivo com valor padro NEWID() ser adicionado a cada tabela convertida para auxiliar com as converses de trigger.

Mapeamento de tipo de dados

Quando da converso de tabelas, os tipos de dados escalares sero convertidos em tipos de dados em SQL Server baseados nas regras a seguir:

varchar2 varchar

char char

number numeric

date datetime

long text

nvarchar2 nvarchar

boolean smallint

Mapeamento e converso de restries

Padres em Oracle sero convertidos em padres em SQL Server, chaves primrias em chaves primrias, chaves exclusivas em chaves exclusivas, chaves externas em chaves externas, restries NOT NULL em NOT NULL, restries de verificao em restries de verificao. Padres, chaves primrias, exclusivas e externas conservaro seus nomes.

Converso de visualizao (view)

Visualizaes em Oracle sero convertidas em visualizaes em SQL Server.

Converso de ndices

ndices em Oracle sero convertidos em ndices em SQL Server.

Converso de seqncia

Seqncias em Oracle sero emuladas em SQL SERVER usando uma tabela e duas funes. Cada seqncia ser representada como uma linha em uma tabela SequenceEmulator .

SeqName.CURRVAL ser convertida em uma chamada de funo db_get_curr_sequence_value.

SeqName.NEXTVAL ser convertida em uma chamada de funo db_get_next_sequence_value.

Migrao de Dados

Existe outro conjunto de ferramentas para transformar e mover fisicamente grandes bancos de dados entre plataformas. O Schema & Data Migrator (SSMA) converte automaticamente um esquema em Oracle (tabelas, restries, ndices) em um esquema em Microsoft SQL Server, migrando fisicamente os dados para ocupar o novo banco de dados.

Depois que o esquema convertido, os dados podem ser migrados. Sero migrados numa base de tabela em tabela ou todas as tabelas selecionadas de uma s vez. Como o processo de migrao de dados insere registros na tabela de destino, responsabilidade do usurio cuidar que nenhuma restrio ou trigger evite que os registros sejam inseridos na tabela.

Converso da Lgica de Negcio

Como notado anteriormente, a complexidade do banco de dados do ponto de vista de uma migrao uma funo do nmero de objetos de lgica de negcio que ele contm, do tamanho desses objetos e dos recursos particulares da linguagem usada para implement-los. Uma complexidade adicional deriva de diferenas nas bibliotecas de funo do sistema fornecidas nas duas plataformas.

Por exemplo, a linguagem de procedimento armazenada, PL/SQL, possui muitos recursos no suportados em Transact-SQL (T-SQL), a linguagem de procedimento armazenada do SQL Server, e mesmo onde existem recursos similares, as linguagens contm muitas diferenas sintticas e semnticas. Para migrar um objeto em PL/SQL que usa um recurso que no possui uma contraparte em T-SQL requer que essa capacidade seja emulada em T-SQL usando os recursos disponveis. Desenvolver uma boa emulao pode ser bastante sutil e demorado. De fato, vrias sutilezas precisam ser tratadas na migrao seja para desenvolver emulaes para recursos que faltam como para esclarecer diferenas semnticas em recursos correspondentes.

Converso de SQL

Os ingressos externos de forma (+) no Oracle sero convertidos em ingressos externos do padro ANSI no SQL Server.

Dicas em Oracle sero convertidas em dicas em SQL Server. As dicas atualmente suportadas incluem FIRST_ROWS, INDEX (tablename indexname), APPEND, MERGE_AJ, MERGE_SJ, MERGE(tablename). Algumas das dicas em Oracle no tm equivalentes em SQL Server, e sero ignoradas.

Exemplo:

Oracle

Microsoft SQL Server

select /*+ first_rows index (rank_table ix_rank_table_1) */ r_id

from rank_table;

select r_id

from rank_table with (index (ix_rank_table_1))

option (fast 1)

O tipo Booleano de dados em Oracle convertido em smallint em SQL Server, usando vrias regras.

Exemplo:

Oracle

Microsoft SQL Server

declare

v1 boolean := true;

v2 boolean := false;

begin

v1 := (x>3) and v2;

end;;

Declare

@v1 smallint,

@v2 smallint

set @v1 = /* TRUE */ 1

set @v2 = /* FALSE */ 0

begin

set @a = case when ((@x>3) and (@v2 /* FALSE */ 0)) THEN /*TRUE*/ 1 ELSE /*FALSE*/ 0 end

end

Procedimento armazenando e converso de funo

Procedimentos armazenados em Oracle sero convertidos em procedimentos armazenados em SQL Server.

Cadeias de parmetros com extenso no especificada sero convertidas e um aviso ser relatado.

Parmetros numricos com extenso e preciso no especificadas sero convertidos em numeric(38, 10) e um aviso ser relatado.

Funes em Oracle sero convertidas em funes definidas pelo usurio em SQL Server.

Uma funo contendo instrues UPDATE/INSERT/DELETE ser substituda por uma funo e um procedimento armazenado contendo o corpo da funo de origem em Oracle.

Uma funo contendo um parmetro de sada ser substituda por um procedimento armazenado. Existe um nmero limitado de casos em que tal substituio pode no ser totalmente equivalente, e esses casos devem ser manejados manualmente.

Converso de trigger

Triggers sero convertidos em triggers com base nas seguintes regras:

Triggers BEFORE sero convertidos em triggers INSTEAD OF.

Triggers AFTER sero convertidos em triggers AFTER.

Triggers de nvel de linha sero emulados usando processamento de cursos.

Mltiplos triggers definidos na mesma operao sero combinados em um trigger.

Exemplo:

Oracle

Microsoft SQL Server

create trigger tr_bi_rank_table

before insert on rank_table for each row

begin

select seq_rank_id.nextval

into :new.r_id from sys.dual;

end;

create trigger instead_of_insert_on_rank_table

on rank_table instead of insert

as

/* begin of trigger implementation */

set nocount on

/* column variables declaration */

declare

@column_new_value____1 numeric,

@column_new_value____2 varchar(50),

@column_new_value____3 numeric,

@column_new_value____4 char(1)

/* iterate for each row from inserted/deleted tables*/

declare ForEachInsertedRowTriggerCursor cursor local forward_only read_only

for select RANK, RANK_NAME, R_ID, R_SN

from inserted

open ForEachInsertedRowTriggerCursor

fetch next from ForEachInsertedRowTriggerCursor

into @column_new_value____1,@column_new_value____2, @column_new_value____3,@column_new_value____4

while @@fetch_status = 0

begin

/* Oracle trigger tr_bi_rank_table implementation: begin*/

begin

select @ column_new_value____3 = SYSDB.SYS.DB_GET_NEXT_SEQUENCE_VALUE (SCHEMA_NAME, SEQ_RANK_ID)

end

/* Oracle trigger tr_bi_rank_table implementation: end*/

/* DML-operation emulation */

insert into rank_table (RANK, RANK_NAME, R_ID, R_SN) values (@column_new_value____1,@column_new_value____2, @column_new_value____3,@column_new_value____4)

fetch next from ForEachInsertedRowTriggerCursor

into @column_new_value____1,@column_new_value____2, @column_new_value____3,@column_new_value____4

end

close ForEachInsertedRowTriggerCursor

deallocate ForEachInsertedRowTriggerCursor

/* end of trigger implementation */

Converso de pacotes

Funes de pacote sero convertidas em funes definidas pelo usurio usando a conveno de nomeao PackageName_FunctionName.

Procedimentos de pacote sero convertidos em procedimentos armazenados usando a conveno de nomeao PackageName_ProcedureName.

Variveis de pacote sero emuladas usando uma tabela e um conjunto de funes.

Funes de sistema

Funes de sistema sero convertidas em funes de sistema do Microsoft SQL Server ou funes definidas pelo usurio a partir da biblioteca de funes de sistema fornecida.

Instrues de controle

A instruo IF ser convertida na instruo IF.

As instrues IF-ELSIF ELSIF-ELSE-END IF sero convertidas em instrues IF aninhadas.

A instruo NULL ser convertida em uma chamada para o procedimento SYSDB.SYS.DB_NULL_STATEMENT.

Exemplo:

Oracle

Microsoft SQL Server

declare v1 numeric;

begin

v1 := 1;

if v1 > 1 then

dbms_output.put_line (1>1);

v1 := 100;

elseif v1 > 2 then

dbms_output.put_line (1 > 2);

v1 := 200;

else

dbms_output.put_line (None);

null;

end if;

end;

declare @v1 numeric

begin

set @v1 = 1

if (@v1 > 1)

begin

print 1>1

set @v1 = 100

end

else

if (@v1 > 2)

begin

print 1>2

set @v1 = 200

end

else

begin

print None

exec SYSDB.SYS.DB_NULL_STATEMENT

end

end

A instruo CASE ser convertida na instruo CASE.

A instruo GOTO ser convertida na instruo GOTO.

Instrues de loop

A instruo LOOP (com EXIT ou EXIT WHEN) ser convertida na instruo WHILE (1=1) com instruo BREAK.

Exemplo:

Oracle

Microsoft SQL Server

loop

exit when rank > max_rank;

do something;

rank := rank + 1;

end loop;

while (1 =1)

begin

if @rank > @max_rank

break

do something

set @rank = @rank + 1

end

A instruo WHILE ser convertida na instruo WHILE.

Exemplo:

Oracle

Microsoft SQL Server

while rank