Minimizar problemas de SQL para migrações Oracle
Este artigo é a quinta parte de uma série de sete partes que fornece orientação sobre como migrar do Oracle para o Azure Synapse Analytics. O foco deste artigo são as práticas recomendadas para minimizar problemas de SQL.
Descrição geral
Características dos ambientes Oracle
O produto de banco de dados inicial da Oracle, lançado em 1979, era um banco de dados relacional SQL comercial para aplicativos OLTP (processamento de transações on-line) — com taxas de transação muito mais baixas do que as atuais. Desde essa versão inicial, o ambiente Oracle evoluiu para se tornar muito mais complexo e engloba vários recursos. Os recursos incluem arquiteturas cliente-servidor, bancos de dados distribuídos, processamento paralelo, análise de dados, alta disponibilidade, data warehousing, técnicas de dados na memória e suporte para instâncias baseadas em nuvem.
Gorjeta
A Oracle foi pioneira no conceito de "dispositivo de armazém de dados" no início dos anos 2000.
Devido ao custo e à complexidade de manter e atualizar ambientes Oracle legados no local, muitos usuários Oracle existentes querem aproveitar as inovações fornecidas pelos ambientes em nuvem. Ambientes de nuvem modernos, como nuvem, IaaS e PaaS, permitem delegar tarefas como manutenção de infraestrutura e desenvolvimento de plataforma ao provedor de nuvem.
Muitos data warehouses que suportam consultas SQL analíticas complexas em grandes volumes de dados usam tecnologias Oracle. Esses armazéns de dados geralmente têm um modelo de dados dimensional, como esquemas de estrelas ou flocos de neve, e usam data marts para departamentos individuais.
Gorjeta
Muitas instalações Oracle existentes são data warehouses que usam um modelo de dados dimensional.
A combinação de SQL e modelos de dados dimensionais no Oracle simplifica a migração para o Azure Synapse porque os conceitos de modelo de dados SQL e básico são transferíveis. A Microsoft recomenda mover seu modelo de dados existente no estado em que se encontra para o Azure para reduzir o risco, o esforço e o tempo de migração. Embora seu plano de migração possa incluir uma alteração no modelo de dados subjacente, como uma mudança de um modelo Inmon para um cofre de dados, faz sentido executar inicialmente uma migração no estado em que se encontra. Após a migração inicial, você pode fazer alterações no ambiente de nuvem do Azure para aproveitar seu desempenho, escalabilidade elástica, recursos internos e benefícios de custo.
Embora a linguagem SQL seja padronizada, fornecedores individuais às vezes implementam extensões proprietárias. Como resultado, você pode encontrar diferenças SQL durante a migração que exigem soluções alternativas no Azure Synapse.
Usar os recursos do Azure para implementar uma migração orientada por metadados
Você pode automatizar e orquestrar o processo de migração usando os recursos do ambiente do Azure. Essa abordagem minimiza o impacto no desempenho no ambiente Oracle existente, que pode já estar sendo executado perto da capacidade.
O Azure Data Factory é um serviço de integração de dados baseado na nuvem que suporta a criação de fluxos de trabalho orientados por dados na nuvem para orquestrar e automatizar a movimentação e a transformação de dados. Você pode usar o Data Factory para criar e agendar fluxos de trabalho controlados por dados (pipelines) que ingerem dados de armazenamentos de dados diferentes. O Data Factory pode processar e transformar dados usando serviços de computação como Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics e Azure Machine Learning.
O Azure também inclui os Serviços de Migração de Banco de Dados do Azure para ajudá-lo a planejar e executar uma migração de ambientes como o Oracle. O Assistente de Migração do SQL Server (SSMA) para Oracle pode automatizar a migração de bancos de dados Oracle, incluindo, em alguns casos, funções e código de procedimento.
Gorjeta
Automatize o processo de migração usando os recursos do Azure Data Factory.
Quando você estiver planejando usar recursos do Azure, como o Data Factory, para gerenciar o processo de migração, primeiro crie metadados que listem todas as tabelas de dados que precisam ser migradas e seu local.
Diferenças de DDL do SQL entre Oracle e Azure Synapse
O padrão ANSI SQL define a sintaxe básica para comandos DDL (Data Definition Language). Alguns comandos DDL, como CREATE TABLE
e CREATE VIEW
, são comuns ao Oracle e ao Azure Synapse, mas foram estendidos para fornecer recursos específicos de implementação, como indexação, distribuição de tabela e opções de particionamento.
Gorjeta
Comandos CREATE TABLE
DDL SQL e CREATE VIEW
têm elementos principais padrão, mas também são usados para definir opções específicas de implementação.
As seções a seguir discutem as opções específicas do Oracle que precisam ser consideradas durante uma migração para o Azure Synapse.
Considerações sobre tabela/exibição
Quando você migra tabelas entre ambientes diferentes, normalmente apenas os dados brutos e os metadados que os descrevem são migrados fisicamente. Outros elementos de banco de dados do sistema de origem, como índices e arquivos de log, geralmente não são migrados porque podem ser desnecessários ou implementados de forma diferente no novo ambiente. Por exemplo, a TEMPORARY
opção dentro da sintaxe do CREATE TABLE
Oracle é equivalente ao prefixo de um nome de tabela com o #
caractere na Sinapse do Azure.
As otimizações de desempenho no ambiente de origem, como índices, indicam onde você pode adicionar otimização de desempenho no novo ambiente de destino. Por exemplo, se índices mapeados por bits forem usados com freqüência em consultas no ambiente Oracle de origem, isso sugere que um índice não clusterizado deve ser criado no Azure Synapse. Outras técnicas nativas de otimização de desempenho, como a replicação de tabelas, podem ser mais aplicáveis do que a criação direta de índices semelhantes. O SSMA for Oracle pode fornecer recomendações de migração para distribuição e indexação de tabelas.
Gorjeta
Os índices existentes indicam candidatos para indexação no armazém migrado.
As definições de exibição SQL contêm instruções DML (SQL Data Manipulation Language) que definem a exibição, geralmente com uma ou mais SELECT
instruções. Ao migrar CREATE VIEW
instruções, leve em consideração as diferenças de DML entre Oracle e Azure Synapse.
Tipos de objeto de banco de dados Oracle não suportados
Os recursos específicos do Oracle geralmente podem ser substituídos pelos recursos do Azure Synapse. No entanto, alguns objetos de banco de dados Oracle não têm suporte direto no Azure Synapse. A lista a seguir de objetos de banco de dados Oracle sem suporte descreve como você pode obter funcionalidade equivalente no Azure Synapse:
Opções de indexação: no Oracle, várias opções de indexação, como índices mapeados por bits, índices baseados em função e índices de domínio, não têm equivalente direto no Azure Synapse. Embora o Azure Synapse não ofereça suporte a esses tipos de índice, você pode obter uma redução semelhante na E/S de disco usando tipos de índice definidos pelo usuário e/ou particionamento A redução da E/S de disco melhora o desempenho da consulta.
Você pode descobrir quais colunas são indexadas e seu tipo de índice consultando tabelas e exibições do catálogo do sistema, como
ALL_INDEXES
,DBA_INDEXES
,USER_INDEXES
eDBA_IND_COL
. Ou, você pode consultar os modos de exibição ouv$object_usage
quando odba_index_usage
monitoramento estiver habilitado.Os recursos do Azure Synapse, como processamento de consultas paralelas e cache na memória de dados e resultados, tornam provável que menos índices sejam necessários para que os aplicativos de data warehouse atinjam excelentes metas de desempenho.
Tabelas clusterizadas: as tabelas Oracle podem ser organizadas de modo que as linhas da tabela que são frequentemente acessadas juntas (com base em um valor comum) sejam fisicamente armazenadas juntas. Essa estratégia reduz a E/S de disco quando os dados são recuperados. O Oracle também tem uma opção de cluster de hash para tabelas individuais, que aplica um valor de hash à chave de cluster e armazena fisicamente linhas com o mesmo valor de hash juntas.
No Azure Synapse, você pode obter um resultado semelhante particionando e/ou usando outros índices.
Visualizações materializadas: a Oracle suporta visualizações materializadas e recomenda uma ou mais delas para tabelas grandes com muitas colunas onde apenas algumas colunas são usadas regularmente em consultas. As visualizações materializadas são atualizadas automaticamente pelo sistema quando os dados na tabela base são atualizados.
Em 2019, a Microsoft anunciou que o Azure Synapse suportará visualizações materializadas com a mesma funcionalidade do Oracle. As vistas materializadas são agora uma funcionalidade de pré-visualização no Azure Synapse.
Gatilhos no banco de dados: no Oracle, um gatilho pode ser configurado para ser executado automaticamente quando ocorre um evento de acionamento. Os eventos desencadeadores podem ser:
Uma instrução DML, como
INSERT
,UPDATE
ouDELETE
, é executada. Se você definiu um gatilho que é acionado antes de umaINSERT
instrução em uma tabela do cliente, o gatilho será acionado uma vez antes que uma nova linha seja inserida na tabela do cliente.Uma instrução DDL, como
CREATE
ouALTER
, é executada. Esse evento de acionamento é frequentemente usado para registrar alterações de esquema para fins de auditoria.Um evento do sistema, como inicialização ou desligamento do banco de dados Oracle.
Um evento de usuário, como login ou logout.
O Azure Synapse não oferece suporte a gatilhos de banco de dados Oracle. No entanto, você pode obter funcionalidade equivalente usando o Data Factory, embora isso exija que você refatore os processos que usam gatilhos.
Sinônimos: O Oracle suporta a definição de sinônimos como nomes alternativos para vários tipos de objeto de banco de dados. Esses tipos incluem tabelas, visualizações, sequências, procedimentos, funções armazenadas, pacotes, visualizações materializadas, objetos de esquema de classe Java, objetos definidos pelo usuário ou outros sinônimos.
Atualmente, o Azure Synapse não oferece suporte à definição de sinônimos, embora se um sinônimo no Oracle se referir a uma tabela ou exibição, você poderá definir um modo de exibição no Azure Synapse para corresponder ao nome alternativo. Se um sinônimo no Oracle se referir a uma função ou procedimento armazenado, você poderá substituir o sinônimo no Azure Synapse por outra função ou procedimento armazenado que chame o destino.
Tipos definidos pelo usuário: o Oracle suporta objetos definidos pelo usuário que podem conter uma série de campos individuais, cada um com sua própria definição e valores padrão. Esses objetos podem ser referenciados dentro de uma definição de tabela da mesma forma que os tipos de dados internos como
NUMBER
ouVARCHAR
.Atualmente, o Azure Synapse não oferece suporte a tipos definidos pelo usuário. Se os dados que você precisa migrar incluírem tipos de dados definidos pelo usuário, "nivele-os" em uma definição de tabela convencional ou, se forem matrizes de dados, normalize-os em uma tabela separada.
Geração de DDL SQL
Você pode editar Oracle CREATE TABLE
e CREATE VIEW
scripts existentes para obter definições equivalentes no Azure Synapse. Para fazer isso, talvez seja necessário usar tipos de dados modificados e remover ou modificar cláusulas específicas do Oracle, como TABLESPACE
.
Gorjeta
Use metadados Oracle existentes para automatizar a geração de CREATE TABLE
DDL CREATE VIEW
para o Azure Synapse.
No ambiente Oracle, as tabelas de catálogo do sistema especificam a definição de tabela/exibição atual. Ao contrário da documentação mantida pelo usuário, as informações do catálogo do sistema estão sempre completas e sincronizadas com as definições de tabela atuais. Você pode acessar as informações do catálogo do sistema usando utilitários como o Oracle SQL Developer. O Oracle SQL Developer pode gerar CREATE TABLE
instruções DDL que você pode editar para aplicar a tabelas equivalentes no Azure Synapse, conforme mostrado na captura de tela a seguir.
O Oracle SQL Developer gera a instrução a seguir CREATE TABLE
, que contém cláusulas específicas do Oracle que você deve remover. Mapeie quaisquer tipos de dados sem suporte antes de executar sua instrução modificada CREATE TABLE
no Azure Synapse.
Como alternativa, você pode gerar CREATE TABLE
automaticamente instruções a partir das informações nas tabelas de catálogo Oracle usando consultas SQL, SSMA ou ferramentas de migração de terceiros . Essa abordagem é a maneira mais rápida e consistente de gerar CREATE TABLE
instruções para muitas tabelas.
Gorjeta
Ferramentas e serviços de terceiros podem automatizar tarefas de mapeamento de dados.
Fornecedores terceirizados oferecem ferramentas e serviços para automatizar a migração, incluindo o mapeamento de tipos de dados. Se uma ferramenta ETL de terceiros já estiver em uso no ambiente Oracle, use essa ferramenta para implementar quaisquer transformações de dados necessárias.
Diferenças do SQL DML entre Oracle e Azure Synapse
O padrão ANSI SQL define a sintaxe básica para comandos DML, como SELECT
, INSERT
, UPDATE
e DELETE
. Embora o Oracle e o Azure Synapse ofereçam suporte a comandos DDL, em alguns casos eles implementam o mesmo comando de forma diferente.
Gorjeta
Os comandos SELECT
padrão do SQL DML , INSERT
e UPDATE
podem ter opções de sintaxe adicionais em diferentes ambientes de banco de dados.
As seções a seguir discutem os comandos DML específicos do Oracle que precisam ser considerados durante uma migração para o Azure Synapse.
Diferenças de sintaxe do SQL DML
Existem algumas diferenças de sintaxe do SQL DML entre o Oracle SQL e o Azure Synapse T-SQL:
DUAL
table: Oracle tem uma tabela do sistema nomeadaDUAL
que consiste exatamente em uma coluna nomeadadummy
e um registro com o valorX
. ADUAL
tabela do sistema é usada quando uma consulta requer um nome de tabela por motivos de sintaxe, mas o conteúdo da tabela não é necessário.Um exemplo de consulta Oracle que usa a
DUAL
tabela éSELECT sysdate from dual;
. O equivalente do Azure Synapse éSELECT GETDATE();
. Para simplificar a migração de DML, você pode criar uma tabela equivalenteDUAL
no Azure Synapse usando a seguinte DDL.CREATE TABLE DUAL ( DUMMY VARCHAR(1) ) GO INSERT INTO DUAL (DUMMY) VALUES ('X') GO
NULL
valores: umNULL
valor no Oracle é uma cadeia de caracteres vazia, representada por umCHAR
tipo de comprimento ouVARCHAR
cadeia de caracteres0
. No Azure Synapse e na maioria dos outros bancos de dados,NULL
significa outra coisa. Tenha cuidado ao migrar dados ou ao migrar processos que manipulam ou armazenam dados, para garantir queNULL
os valores sejam tratados de forma consistente.Sintaxe de junção externa do Oracle: embora as versões mais recentes do Oracle ofereçam suporte à sintaxe de junção externa ANSI, os sistemas Oracle mais antigos usam uma sintaxe proprietária para junções externas que usa um sinal de adição (
+
) dentro da instrução SQL. Se você estiver migrando um ambiente Oracle mais antigo, poderá encontrar a sintaxe mais antiga. Por exemplo:SELECT d.deptno, e.job FROM dept d, emp e WHERE d.deptno = e.deptno (+) AND e.job (+) = 'CLERK' GROUP BY d.deptno, e.job;
A sintaxe padrão ANSI equivalente é:
SELECT d.deptno, e.job FROM dept d LEFT OUTER JOIN emp e ON d.deptno = e.deptno and e.job = 'CLERK' GROUP BY d.deptno, e.job ORDER BY d.deptno, e.job;
DATE
data: no Oracle, o tipo deDATE
dados pode armazenar data e hora. O Azure Synapse armazena data e hora em tipos de dados eTIME
, separados.DATE
DATETIME
Ao migrar colunas OracleDATE
, verifique se elas armazenam data e hora ou apenas uma data. Se eles armazenarem apenas uma data, mapeie a coluna paraDATE
, caso contrário, paraDATETIME
.DATE
aritmética: o Oracle suporta a subtração de uma data de outra, por exemploSELECT date '2018-12-31' - date '2018-1201' from dual;
. No Azure Synapse, você pode subtrair datas usando aDATEDIFF()
função, por exemploSELECT DATEDIFF(day, '2018-12-01', '2018-12-31');
.A Oracle pode subtrair inteiros de datas, por exemplo
SELECT hire_date, (hire_date-1) FROM employees;
. No Azure Synapse, você pode adicionar ou subtrair inteiros de datas usando aDATEADD()
função.Atualizações via modos de exibição: no Oracle, você pode executar operações de inserção, atualização e exclusão em uma exibição para atualizar a tabela subjacente. No Azure Synapse, você executa essas operações em uma tabela base, não em um modo de exibição. Talvez seja necessário reformular o processamento de ETL se uma tabela Oracle for atualizada por meio de uma exibição.
Funções internas: a tabela a seguir mostra as diferenças na sintaxe e no uso de algumas funções internas.
Função Oracle | Description | Equivalente de sinapse |
---|---|---|
ADD_MONTHS | Adicionar um número especificado de meses | DATEADD |
CAST | Converter um tipo de dados interno em outro | CAST |
DECODIFICAR | Avaliar uma lista de condições | Expressão CASE |
EMPTY_BLOB | Criar um valor BLOB vazio | 0x constante (cadeia binária vazia) |
EMPTY_CLOB | Criar um valor CLOB ou NCLOB vazio | '' (string vazia) |
INITCAP | Colocar em maiúscula a primeira letra de cada palavra | Função definida pelo utilizador |
INSTR | Localizar a posição de uma substring em uma string | CHARINDEX |
LAST_DAY | Obter a última data do mês | EOMÊS |
LENGTH | Obter comprimento de cadeia de caracteres em caracteres | LEN |
LPAD | Cadeia de caracteres do painel esquerdo para o comprimento especificado | Expressão usando REPLICATE, RIGHT e LEFT |
MOD | Obter o restante de uma divisão de um número por outro | % Operador |
MONTHS_BETWEEN | Obter o número de meses entre duas datas | DATEDIFF |
NVL | Substituir NULL por expressão |
ISNULO |
SUBSTR | Retornar uma substring de uma cadeia de caracteres | SUBSTRING |
TO_CHAR para datetime | Converter datetime em string | CONVERTER |
TO_DATE | Converter uma cadeia de caracteres em datetime | CONVERTER |
TRADUZIR | Substituição de um para um único caractere | Expressões usando REPLACE ou uma função definida pelo usuário |
TRIM | Cortar caracteres à esquerda ou à direita | LTRIM e RTRIM |
TRUNC para datetime | Truncar datetime | Expressões usando CONVERT |
UNISTR | Converter pontos de código Unicode em caracteres | Expressões usando NCHAR |
Funções, procedimentos armazenados e sequências
Ao migrar um data warehouse de um ambiente maduro como o Oracle, você provavelmente precisará migrar elementos diferentes de tabelas e exibições simples. Para funções, procedimentos armazenados e sequências, verifique se as ferramentas no ambiente do Azure podem substituir suas funcionalidades, pois geralmente é mais eficiente usar ferramentas internas do Azure do que recodificar as funções do Oracle.
Como parte da fase de preparação, crie um inventário de objetos que precisam ser migrados, defina um método para manipulá-los e aloque recursos apropriados em seu plano de migração.
Ferramentas da Microsoft, como SSMA para Oracle e Serviços de Migração de Banco de Dados do Azure, ou produtos e serviços de migração de terceiros , podem automatizar a migração de funções, procedimentos armazenados e sequências.
Gorjeta
Produtos e serviços de terceiros podem automatizar a migração de elementos que não sejam de dados.
As seções a seguir discutem a migração de funções, procedimentos armazenados e sequências.
Funções
Como acontece com a maioria dos produtos de banco de dados, o Oracle suporta funções definidas pelo sistema e pelo usuário dentro de uma implementação SQL. Ao migrar uma plataforma de banco de dados herdada para o Azure Synapse, você geralmente pode migrar funções comuns do sistema sem alterações. Algumas funções do sistema podem ter uma sintaxe ligeiramente diferente, mas você pode automatizar quaisquer alterações necessárias.
Para funções do sistema Oracle ou funções arbitrárias definidas pelo usuário que não têm equivalente no Azure Synapse, recodifice essas funções usando a linguagem do ambiente de destino. As funções definidas pelo usuário Oracle são codificadas em PL/SQL, Java ou C. O Azure Synapse usa a linguagem Transact-SQL para implementar funções definidas pelo usuário.
Procedimentos armazenados
A maioria dos produtos de banco de dados modernos suporta procedimentos de armazenamento dentro do banco de dados. A Oracle fornece a linguagem PL/SQL para este fim. Um procedimento armazenado normalmente contém instruções SQL e lógica de procedimento e retorna dados ou um status.
O Azure Synapse dá suporte a procedimentos armazenados usando T-SQL, portanto, você precisará recodificar quaisquer procedimentos armazenados migrados em T-SQL.
Sequências
Em Oracle, uma sequência é um objeto de banco de dados nomeado, criado usando CREATE SEQUENCE
. Uma sequência fornece valores numéricos exclusivos através dos CURRVAL
métodos e NEXTVAL
. Você pode usar os números exclusivos gerados como valores de chave substituta para chaves primárias. O Azure Synapse não implementa CREATE SEQUENCE
, mas você pode implementar sequências usando IDENTITY
colunas ou código SQL que gera o próximo número de sequência em uma série.
Use EXPLAIN para validar SQL herdado
Gorjeta
Use consultas reais dos logs de consulta do sistema existentes para encontrar possíveis problemas de migração.
Supondo um modelo de dados migrado semelhante no Azure Synapse com os mesmos nomes de tabela e coluna, uma maneira de testar a compatibilidade do Oracle SQL herdado com o Azure Synapse é:
- Capture algumas instruções SQL representativas dos logs de histórico de consultas do sistema herdado.
- Prefira essas consultas com a
EXPLAIN
instrução. - Execute as
EXPLAIN
instruções no Azure Synapse.
Qualquer SQL incompatível gerará um erro e as informações de erro podem ser usadas para determinar a escala da tarefa de recodificação. Essa abordagem não exige que você carregue nenhum dado no ambiente do Azure, você só precisa criar as tabelas e exibições relevantes.
Resumo
As instalações herdadas existentes do Oracle normalmente são implementadas de uma forma que torna a migração para o Azure Synapse relativamente simples. Ambos os ambientes usam SQL para consultas analíticas em grandes volumes de dados e, geralmente, usam alguma forma de modelo de dados dimensionais. Esses fatores tornam as instalações do Oracle um bom candidato para a migração para o Azure Synapse.
Para resumir, nossas recomendações para minimizar a tarefa de migrar o código SQL do Oracle para o Azure Synapse são:
Migre seu modelo de dados existente no estado em que se encontra para minimizar riscos, esforços e tempo de migração, mesmo que um modelo de dados diferente esteja planejado, como um cofre de dados.
Entenda as diferenças entre a implementação do Oracle SQL e a implementação do Azure Synapse.
Use os metadados e logs de consulta da implementação Oracle existente para avaliar o impacto da alteração do ambiente. Planeje uma abordagem para mitigar as diferenças.
Automatize o processo de migração para minimizar riscos, esforços e tempo de migração. Você pode usar ferramentas da Microsoft, como Serviços de Migração de Banco de Dados do Azure e SSMA.
Considere o uso de ferramentas e serviços especializados de terceiros para simplificar a migração.
Próximos passos
Para saber mais sobre a Microsoft e ferramentas de terceiros, consulte o próximo artigo desta série: Ferramentas para migração de data warehouse Oracle para o Azure Synapse Analytics.