 | Nível: Intermediário Serge Rielau, Senior Software Developer, IBM
06/Ago/2009 O IBM® DB2® 9.7 para Linux®, UNIX® e
Windows® tem suporte integrado para os dialetos SQL e PL/SQL do Oracle.
Isso permite que muitos aplicativos escritos em Oracle sejam executados no
DB2. Neste artigo, obtenha uma visão geral resumida do que significa a
compatibilidade do Oracle em DB2. Se você deseja mudar seu aplicativo
customizado para o DB2 ou estender seu suporte a fornecedor DBMS para o
DB2, agora é hora.
Motivação
No mês de março passado, em uma apresentação na Cebit que fiz sobre DB2 9.7,
queimei um alto-falante de computador de 110 V que, sem querer, liguei à
tomada alemã de 230 V sem usar transformador. Na mesma viagem, também destruí
o carregador da minha escova elétrica e do meu barbeador em incidentes
semelhantes. Sem levar em conta minha evidente incapacidade de aprender dos
meus erros, não é de surpreender que um dos meus provérbios favoritos
(origem desconhecida) seja: "O problema com padrões é que há muitos deles."
No mundo dos relational database management systems (RDBMS), somos abençoados
com, pelo menos, três grandes padrões e incontáveis variações deles:
- ANSI SQL e ANSI SQL/PSM
- Oracle SQL e PL/SQL
- Sybase e Microsoft TSQL
A Figura 1 ilustra, por meio de um diagrama de Venn, como os dialetos SQL se sobrepõem:
Figura 1. A confusão babilônica do
SQL
Sempre que escrevemos um aplicativo, temos de escolher que fornecedor de RDBMS
usar. Depois de feita essa escolha, basicamente não é possível mudar. Qualquer
tentativa de mudar de fornecedor para aproveitar preços mais baixos, tecnologia
melhor ou um parceria melhor é impedido pelo código legado que requer extensas
mudanças antes de poder ser usado com outro RDBMS. Além disso, seu conjunto de
habilidades não pode ser transferido de um produto para outro com tanta
facilidade como seria de esperar.
O IBM DB2 9.7 para Linux, UNIX e Windows (DB2) procura reduzir drasticamente as
barreiras para aplicativos escritos para Oracle ao serem ativados para DB2.
Isso fornece aos clientes e fornecedores a capacidade de escolher um DBMS com
base em seus méritos em vez de no histórico do aplicativo.
O DB2 9.7 acrescenta recursos de compatibilidade do Oracle
Para permitir que um aplicativo escrito para um RDBMS seja executado em outro
praticamente sem mudanças, muitas peças precisam se encaixar. Diferentes
mecanismos de travamento, tipos de dados, SQL, linguagem de procedimentos que
reside no servidor e até as interfaces de cliente usadas pelo aplicativo em
si precisam ser alinhadas não só no que se refere à sintaxe, mas também à semântica.
Todas essas etapas foram executadas no DB2. As mudanças são a exceção, não a
regra (a IBM pode avaliar rapidamente as mudanças necessárias no aplicativo).
A Tabela 1 fornece uma visão geral rápida de recursos comumente usados:
Tabela 1. Recursos comumente
usados
| Oracle | --> | DB2 |
|---|
| Controle de simultaneidade | --> | Suporte nativo | | Dialeto SQL | --> | Suporte nativo | | PL/SQL | --> | Suporte nativo | | Pacotes PL/SQL | --> | Suporte nativo | | Pacotes incorporados | --> | Suporte nativo | | Cliente JDBC com extensões | --> | Suporte nativo | | Scripts SQL*Plus | --> | Suporte nativo |
Com o DB2 9.7, não é preciso mais portar um aplicativo. Basta ativar o aplicativo. No caso de um aplicativo empacotado, é possível até compartilhar uma fonte entre o DB2 e o Oracle.
Em outras palavras, ativar um aplicativo Oracle no DB2 não é mais complexo do que ativar que um programa escrito em C no HP-UX para ser executado no AIX.
Controle de simultaneidade
No passado, uma das diferenças mais destacadas entre o Oracle e o DB2 era a abordagem do controle de simultaneidade. O chavão é: "Leitores não bloqueiam escritores, e vice-versa."
Tabela 2. Comportamento de simultaneidade do Oracle
| Transação pendente | Comportamento | Nova transação |
|---|
| Leitor | não bloqueia | Leitor | | Leitor | não bloqueia | Escritor | | Escritor | não bloqueia | Leitor | | Escritor | bloqueia | Escritor |
Sem entrar em detalhes sobre níveis de isolamento, basta dizer que a vasta maioria dos aplicativos que usam o padrão Oracle Isolamento de Nível de Instrução funcionam bem usando o padrão DB2 de Cursor Stability (CS).
Tradicionalmente, porém, a CS é implementada de modo que os escritores bloqueiem os leitores e, em alguns casos, os leitores possam bloquear os escritores. A razão disso é que, tradicionalmente, uma transação sob o isolamento de CS "aguardará o resultado" de mudanças pendentes na transação simultânea.
Tabela 3. Comportamento tradicional de simultaneidade de DB2 com CS
| Transação pendente | Comportamento | Nova transação |
|---|
| Leitor | não bloqueia | Leitor | | Leitor | raramente bloqueia | Escritor | | Escritor | bloqueia | Leitor | | Escritor | bloqueia | Escritor |
Acontece que não há razão semântica de por que uma transação executada em isolamento de CS precise aguardar o resultado ao encontrar uma linha alterada. Um comportamento igualmente satisfatório é ler a versão atualmente implementada da linha alterada.
Esse comportamento foi implementado no DB2 9.7. O que acontece é que o DB2 simplesmente recupera a versão atualmente implementada de uma linha bloqueada do log. Nos casos mais comuns, a linha ainda está no buffer do log visto que a mudança ainda não foi feita. Mas mesmo que a linha tenha sido escrita e tenha sido também sobrescrita no buffer do log, o DB2 sabe exatamente onde encontrá-la, de modo que um único IO fornece a versão desejada para o conjunto de buffers.
Imagine (veja a Figura 2) um usuário atualizando o nome em uma tabela de funcionários. Antes de esse usuário concluir a mudança, outro usuário percorrer essa tabela. Tradicionalmente, o segundo usuário teria de aguardar que o primeiro concluísse ou retrocedesse. Graças à leitura dos dados atualmente implementados, a busca do segundo usuário simplesmente recuperará a versão da linha no buffer do log que não contém as mudanças do primeiro usuário.
Figura 2. Escritores não bloqueiam leitores
É importante notar que esse comportamento:
- Não introduz novos objetos como um segmento de retrocesso
- Não tem acréscimo de desempenho para o escritor, visto que o log precisa mesmo ser escrito
- Não causa situações como "instantâneo antigo demais", porque, no caso extremamente improvável, de o arquivo de log precisar ser arquivado (enquanto a transação ainda está aberta!), o DB2 simplesmente aguardará o bloqueio ser removido
Além dessas mudanças, outras técnicas para evitar bloqueio foram introduzidas no DB2 para eliminar a necessidade de o leitor manter o bloqueio sob o isolamento de CS.
Tabela 4. Novo comportamento de simultaneidade do DB2 com CS
| Transação pendente | Comportamento | Nova transação |
|---|
| Leitor | não bloqueia | Leitor | | Leitor |
não bloqueia
| Escritor | | Escritor |
não bloqueia
| Leitor | | Escritor | bloqueia | Escritor |
Como se pode ver, o comportamento de simultaneidade agora é idêntico ao do Oracle. De fato, bancos de dados DB2 recém-criados exibem esse comportamento por padrão.
Novos tipos de dado
O coração de todo banco de dados são os dados. Tipos ou semântica incompatíveis desses tipos podem ter um grave impacto na capacidade de ativar um aplicativo em outro RDBMS. Assim, para permitir que os aplicativos Oracle sejam executados no DB2, é vital dar suporte aos seus tipos básicos não padrão, como sequências, datas e numéricos. Além de alinhar esses tipos básicos, há outros tipos mais complexos que são comumente usados no PL/SQL da Oracle e que foram incluídos no DB2 9.7.
Tabela 5. Novos tipos de dados no DB2
| Tipo de dado | Descrição |
|---|
| NUMBER | O suporte para NUMBER e NUMBER(p [, s]) foi acrescentado com base no DECFLOAT (com aceleração de hardware Power6) e DECIMAL. | | VARCHAR2 | O comportamento tipo VARCHAR2 inclui sequências vazias interpretadas como NULL e ordenação sensível de rastreio de espaço em branco. | | Oracle DATE | Um banco de dados no modo Oracle DATE inclui o componente TIME além da data do calendário. | | TIMESTAMP(n) | A escala de frações de segundos pode ser escolhida entre 0 (data + hora) e 12 (picossegundos). | | BOOLEAN | Esse tipo pode ser usado em lógica de procedimentos, variáveis e parâmetros para rotinas. | | VARRAY | O suporte ARRAY em procedimentos foi estendido para dar suporte a método de estilo e sintaxe VARRAY. | | INDEX BY | Além dos arrays regulares, o DB2 também suporta arrays associativos. | | ROW TYPE | Esse tipo composto pode ser usado em variáveis e parâmetros, e como elemento de arrays e arrays associativos. | | Tipo Ref Cursor | Podem ser atribuídos cursores a variáveis ou eles podem ser transferidos por meio de parâmetros. |
 |
Conversão implícita e deliberação de tipo
"Se caminha como pato e faz barulho de pato, deve ser um pato."
Esse é o mantra de muitas novas linguagens, como PHP e Ruby. Todo literal é uma cadeia de caractere e, então, é usado como outro tipo baseado no contexto. Em harmonia com o Padrão SQL e seguindo a filosofia de que uma incompatibilidade de tipos é provavelmente uma indicação de um erro de codificação, o DB2 tradicionalmente segue regras fortes de tipos, nas quais as sequências e numéricos não podem ser comparados a menos que um seja explicitamente convertidos um no outro.
Infelizmente, quando um aplicativo Oracle usa tipos fracos no seu SQL, esse aplicativo teria falhado antes ao ser compilado no DB2. No DB2 9.7, a conversão implícita (ou tipo fraco) foi acrescentada. Isto é, sequências e números podem ser comparados, atribuídos e operados de forma bastante flexível.
Além disso, NULLs sem tipo podem ser usados em muito mais lugares, enquanto marcadores de parâmetro sem tipo podem ser usados quase em qualquer lugar, graças à preparação adiada. Isto é, o DB2 não resolverá o tipo de marcador de parâmetro até que tenha visto o primeiro valor real.
Para arredondar a conversão implícita, o DB2 também dá suporte a padrão de parâmetros de procedimento bem como à associação de argumentos a parâmetros por nome.
Biblioteca de função integrada estendidas no DB2
Todos os RDBMs fornecem bibliotecas para funções que operam nos dados. O problema é que nenhum deles usa os mesmos nomes para essas funções, mesmo que o fim da funcionalidade seja muito similar.
Além do seu próprio conjunto tradicional de funções, o DB2 agora tem suporte a uma biblioteca compatível com o Oracle. A lista a seguir fornece uma visão geral rápida, que não é, de forma alguma, completa:
- Funções de conversão e cast
-
TO_DATE
-
TO_CHAR
-
TO_CLOB
-
TO_NUMBER
-
TO_TIMESTAMP
Cada uma dessas funções dá suporte a um enorme conjunto de cadeias de caractere de formatação compatíveis.
-
Aritmética de data
-
EXTRACT
-
ADD_MONTHS
-
MONTHS_BETWEEN
-
NEXT_DAY
- Mais (+) o acréscimo de frações de dias
-
Manipulação de cadeias de caractere
-
LPAD
-
RPAD
-
INSTR
-
INITCAP
- Extensões a
SUBSTR
-
Diversos
-
NVL
-
DECODE
-
LEAST
-
GREATEST
-
BITAND
O grande aumento de sobreposição em funções suportadas entre os dois produtos implica um sucesso incorporado muito aprimorado, que possibilita um aplicativo Oracle no DB2.
Suporte ao dialeto Oracle SQL
Este artigo, até aqui, abrangeu simultaneidade, tipos de dado, digitação e funções. Mas as diferenças entre Oracle e DB2 são mais profundas do que isso. A própria estrutura dos dialetos SQL, suas palavras-chave e semântica são diferentes em algumas áreas. Também cada produto dá suporte a alguns recursos que o outro simplesmente não tem. Quando esses recursos são populares, eles limitam a capacidade de fornecer SQL comum a ambos os produtos. Entre os muitos pequenos e grandes ajustes na linguagem, a Tabela 6 alista alguns destaques:
Tabela 6. Novo suporte do SQL
| Recurso | Descrição |
|---|
CONNECT BY recursão | Até agora, o DB2 tem dado suporte à recursão do ANSI SQL. Agora, foi acrescentado o CONNECT BY, em estilo Oracle, incluindo várias funções e pseudocolunas como LEVEL e CONNECT_BY_PATH. | | Sintaxe juntar (+) | Essa sintaxe na verdade é desencorajada até pela Oracle, mas há vários aplicativos e desenvolvedores que ainda usam essa forma de sintaxe OUTER JOIN. | Tabela DUAL
| Uma tabela com uma única linha e coluna usada em muitos aplicativos Oracle como simulado. | Pseudocoluna ROWNUM
| Essa pseudocoluna em geral é usada para limitar o número de linhas retornadas e para enumerar linhas em um conjunto de resultados. | Pseudocoluna ROWID
| Rowids são usadas para recuperar rapidamente uma linha que tenha sido obtida anteriormente com base no seu endereço físico. | Operador MINUS SQL | No Oracle, o MINUS é usado em vez de EXCEPT para subtrair um conjunto de resultados de outro. |
SELECT INTO FOR UPDATE
| A construção FOR UPDATE no SELECT INTO permite a extração de uma linha do DB2 com a intenção de modificá-la depois sem usar o cursor. |
PUBLIC SYNONYM
| Um sinônimo público é um alias sem um nome de esquema. O DB2 suporta sinônimos públicos para objetos de tabela, sequências e pacotes PL/SQL. |
CREATE TEMPORARY TABLE
| O DB2 dá suporte a tabelas temporárias globais criadas além das tabelas temporárias globais declaradas. | Instrução de tabela TRUNCATE
| Essa instrução exclui rapidamente o conteúdo de uma tabela inteira sem ativar acionadores. | | Resolução de nome relaxada | O DB2 9.7 não exige mais que as visualizações sequenciais sejam nomeadas. Também, os nomes das colunas podem ser herdados mais facilmente a partir de operadores de conjunto como UNION. |
Isso conclui a visão geral das mudanças feitas no DB2 de modo que os aplicativos Oracle que apresentam o SQL no banco de dados possam ser executados basicamente sem mudanças. Há, contudo, grandes seções de muitos aplicativos que são executadas no próprio servidor. A linguagem preferida no servidor para aplicativos Oracle é a PL/SQL. Não se pode afirmar haver real compatibilidade sem suporte para PL/SQL.
Suporte de DB2 para PL/SQL
Comumente, quando o aplicativo é portado de um produto para outro, o SQL e a linguagem de procedimento são convertidos de um dialeto SQL para outro. Isso apresenta vários problemas:
- O código convertido resultante tende a ser confuso devido à incompatibilidade de automação e impedância entre o dialeto de origem e o de destino.
- Os desenvolvedores de aplicativos não estão familiarizados com dialeto da linguagem de destino do SQL. Isso dificulta depurar o código portado. Ao longo do tempo, a manutenção adicional torna-se um desafio devido à falta de habilidades.
- No caso de aplicativos empacotados, a conversão precisa ser repetida para cada novo release do aplicativo.
- No fim, o resultado é uma emulação, que, por definição, é executada mais lentamente que o original.
Para evitar esses problemas, o DB2 9.7 inclui suporte nativo ao PL/SQL. O que isso significa?
Como se pode ver na Figura 3, o mecanismo DB2 agora inclui um compilador PL/SQL lado a lado com o compilador SQL PL. Ambos os compiladores produzem um código de máquina virtual para o Mecanismo Unificado de Tempo de Execução do SQL do DB2. É importante notar que as ferramentas de monitoramento e de desenvolvimento como o Optim Development Studio são ligados ao DB2 ao nível de mecanismo do tempo de execução.
Figura 3. Suporte ao compilador PL/SQL
A integração do PL/SQL ao DB2 como linguagem de procedimento de primeira classe tem várias implicações:
- Não há conversão. O código de origem permanece como está no catálogo de esquema.
- Os desenvolvedores podem continuar trabalhando na linguagem com a qual estão familiarizados. Não é necessário mover a lógica para o dialeto do DB2 mesmo que a nova lógica for escrita em SQL PL. Rotinas que usam dialetos diferentes podem se chamar entre si.
- Os fornecedores de aplicativos empacotados podem usar um código de origem tanto para o Oracle como para o DB2.
- O PL/SQL e o SQL PL produzem o mesmo código de máquina virtual para o Mecanismo Unificado de Tempo de Execução do SQL do DB2. Portanto, desde o projeto, o PL/SQL e o SQL PL são executados na mesma velocidade.
- Visto que a infraestrutura do depurador se liga diretamente ao Mecanismo Unificado de Tempo de Execução do SQL, o PL/SQL é naturalmente suportado pelo Optim Development Studio.
A Figura 4 ilustra uma sessão depuradora do PL/SQL. O depurador suporta recursos padrão como "step into", "step over" e pontos de interrupção. Além disso, permite que o usuário mude as variáveis locais de PL/SQL enquanto o programa está em execução.
Figura 4. Suporte a depurador PL/SQL no DB2
Detalhes de sintaxe do PL/SQL
Então, o que exatamente implica o suporte a PL/SQL? Primeiro, há o suporte à sintaxe principal. O DB2 suporta todas as construções comuns do PL/SQL, como:
- if then else
- loops while
- := atribuições
- variáveis e constantes locais
- #PRAGMA EXCEPTION e manipulação de exceção
- Várias formas de loops (intervalo, cursor e consulta)
- ancoramento de variáveis e parâmetros a outros objetos %TYPE e %ROWTYPE
- transações #PRAGMA AUTONOMOUS, que permitem que os procedimentos sejam executados em uma transação particular.
Suporte a objeto PL/SQL
O PL/SQL pode ser usado em vários objetos que permitem lógica de procedimento:
- Funções escalares
- Antes de cada linha acionar
- Após cada linha acionar
- Procedimentos
- Blocos anônimos
- Pacotes PL/SQL
Suporte a pacote PL/SQL
A maioria dos aplicativos PL/SQL no Oracle está contida dentro dos chamados PACOTEs. Um pacote PL/SQL, —que não deve ser confundido com um pacote DB2, —é uma coleção de objetos individuais com a capacidade de diferenciar entre objetos acessíveis externamente e aqueles que são meros ajudantes para uso dentro do pacote. O equivalente ANSI SQL de um pacote é um MÓDULO. O DB2 agora fornece suporte a módulos ANSI SQL e também a pacotes PL/SQL. Em especial, os seguintes recursos são fornecidos:
- CRIAR [OU SUBSTITUIR] PACOTE, que define protótipos para rotinas visíveis externamente. Ele define também todos os objetos visíveis externamente, não de procedimento, como variáveis e tipos.
- CRIAR [OU SUBSTITUIR] CORPO DO PACOTE, que implementa todas as rotinas particulares e públicas, além de todos os outros objetos particulares.
- Dentro de um pacote ou corpo de pacote, é possível definir os seguintes objetos:
- Variáveis e constantes
- Tipos de dado
- Exceções
- Funções escalares
- Procedimentos
- Cursores
- Inicialização de pacote
- Sinônimos e pacotes públicos
O DB2 fornece pacotes integrados comuns
Alguns aplicativos Oracle utilizam pacotes que são fornecidos pelo RDBMS. Em especial, bibliotecas que fornecem geração de relatório, e-mail ou comunicação de conexão cruzada podem ser populares. Para facilitar a ativação desses aplicativos no DB2, os pacotes alistados na Tabela 7 são fornecidos pelo DB2:
Tabela 7. Pacotes integrados fornecidos pelo DB2
| Pacote | Descrição |
|---|
| DBMS_OUTPUT | Fornece recursos básicos de geração de relatório que podem ser ligados ou desligados a partir da linha de comandos. | | UTL_FILE | Módulo que permite trabalhar com arquivos no servidor DB2. | | DBMS_SQL | Pacote que fornece um API SQL para executar SQL dinâmica além das instruções EXECUTE e EXECUTE IMMEDIATE existentes. | | UTL_MAIL | Módulo que permite o envio de notificações de e-mail a partir do SQL. | | UTL_SMTP | API de nível inferior similar à UTL_MAIL que fornece integração SMTP. | | DBMS_ALERT | Pacote que, quando usado, permite que diferentes sessões sirvam de semáforo umas para as outras. | | DBMS_PIPE | Módulo que permite que as sessões enviem dados umas para as outras. | | DBMS_JOB | Fornece um API compatível que se integra ao planejador de tarefas do DB2. | | DBMS_LOB | API Oracle para processamento LOB que ecoa as funções LOB integradas do DB2. | | DBMS_UTILITY | Coleção de vários procedimentos usados em aplicativos. |
Extensões JDBC específicas da Oracle
JDBC é uma interface do cliente Java padrão. Há, porém, extensões que foram acrescentadas ao driver JDBC da Oracle a fim de dar suporte a tipos de dado específicos, não padrão.
Para maximizar o nível de compatibilidade para aplicativos baseados em tecnologia Java, o driver JDBC do DB2 9.7 fornece, entre outras coisas, suporte para procedimentos de chamada com cursor de referência e parâmetros VARRAY.
Suporte a script SQL*Plus usando CLPPlus
Muitas vezes scripts DDL e até relatórios são escritos usando o processador de linha de comandos do SQL*Plus. Para facilitar a transferência desses scripts bem como a habilidade dos desenvolvedores que os escrevem, o DB2 fornece um processador de linha de comandos compatível com SQL*Plus, chamado CLPPlus. A ferramenta fornece a seguinte funcionalidade:
- Opções de comando compatíveis com SQL*Plus
- Substituição de variável
- Formatação de coluna
- Funções de geração de relatório
- Variáveis de controle
Figura 5. Ferramenta CLPLus compatível com SQL*Plus
Ativar o DB2 é tão fácil como arrastar e soltar
Devido ao alinhamento próximo do DB2 com PL/SQL e o Oracle SQL, não é necessária um kit de ferramentas complexo para migração. Em vez disso, basta usar a IBM Data Movement Tool para simplesmente arrastar e soltar tabelas, pacotes ou esquemas inteiros do Oracle para o DB2. São necessários apenas ajustes mínimos, que são uma exceção, para mover o aplicativo para DB2, ou modificar um aplicativo de modo que a mesma fonte possa operar no DB2 e no Oracle.
As etapas podem ser simplesmente:
- Ajustar as variáveis de registro necessárias:
-
db2set DB2_COMPATIBILITY_VECTOR=ORA
-
db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
- Reiniciar o gerenciador do banco de dados:
- Criar um banco de dados compatível com Oracle:
-
db2 create database mydb pagesize 32 K
-
db2 update db cfg for mydb using auto_reval deferred_force
- Iniciar a IBM Data Movement Tool e conectá-la aos bancos de dados Oracle e DB2 (veja a Figura 6). Depois de conectado, pode-se escolher extrair apenas o DDL ou o DDL e os dados. Por fim, há duas opções: É possível implementar diretamente executando os scripts gerados ou continuar com o painel de implementação interativa. (O último é recomendado para a maioria dos aplicativos não triviais.)
Figura 6. Arrastar e soltar esquemas Oracle para o DB2 usando a IBM Data Movement Tool
- Mova os esquemas desejados do Oracle para o DB2 usando a implementação interativa (veja a Figura 7). No modo de implementação interativa, é possível ver uma árvore de navegação que exibe todos os objetos extraídos do banco de dados Oracle. Selecione todos os objetos e execute a opção do menu de implementação. Em resultado disso, a ferramenta copia os objetos para o DB2 e registra seu progresso. Alguns objetos talvez não sejam implementados com êxito, e a ferramenta lhe dá a opção de trabalhar com eles. Ao selecionar um objeto, será possível ver o DDL junto com o erro que o DB2 encontrou. Agora, é possível corrigir a definição conforme for necessário e reimplementar usando o editor integrado. O objetivo é mover de forma interativa todos os objetos para DB2 com base em exceção.
Figura 7. Arrastar e soltar esquemas Oracle para o DB2 usando a IBM Data Movement Tool
 |
Dimensionamento da ativação para DB2
Então, será fácil mesmo ativar seu aplicativo no DB2 9.7? A resposta, é claro, seria: Depende. A IBM tem uma ferramenta interna chamada MEET DB2, que pode analisar todos os objetos no seu banco de dados Oracle e classificá-los. Ela produz um relatório do que vai funcionar sem problemas e que ajustes precisarão ser feitos. Seu representante de conta ou contato de vendas IBM pode executar esse utilitário para fornecer rapidamente uma avaliação de compatibilidade do seu banco de dados Oracle atual com o DB2.
Figura 8. Ferramenta de relatório MEET DB2 para avaliação
Durante a fase beta de um ano do DB2 9.7, muitos aplicativos, no total de mais de 750.000 linhas de código PL/SQL foi analisado em detalhes, com uma média de taxa de transferência direta de 90%-99%.
Figura 9. Taxa média de 98% de instruções suportadas
Restrições
A PL/SQL, a biblioteca integrada de pacotes e o CLPPlus atualmente não estão disponíveis para as edições DB2 Express, DB2 Express-C e DB2 Personal.
Resumo
Graças a seu suporte nativo a múltiplos dialetos SQL, o DB2 9.7 permite ativação fácil dos aplicativos Oracle no DB2. Os fornecedores de aplicativos empacotados podem oferecer seus aplicativos tanto em Oracle como em DB2 a um custo adicional mínimo. Os clientes podem escolher facilmente o fornecedor que oferece a tecnologia de que precisam sem serem limitados por escolhas passadas.
Para testar esses recursos, é possível fazer o download da versão de teste do DB2 9.7 (veja em Recursos).
Perguntas mais frequentes
Que versão do Oracle o DB2 9.7 suporta?
O que é abrangido pelos dialetos SQL e PL/SQL se baseia estritamente no que está sendo usado pelos aplicativos. Há recursos que foram introduzidos em releases tão recentes quanto o Oracle 11g e que são suportados, enquanto construções disponíveis no Oracle 8i não são suportadas. Em um estudo de 18 aplicativos que totalizaram mais de 750.000 linhas, 90%-99% do código foi movido do DB2 sem mudanças. Muitos dos ajustes restantes podem ser automatizados ou são repetitivos.
Com que velocidade meu aplicativo Oracle será executado no DB2?
Essa é a grande pergunta! Infelizmente, os termos de licença da Oracle proíbem que alguém publique resultados comparativos sem prévio consentimento por escrito. É desnecessário dizer que nós nem pedimos. Contudo, por seu próprio design e comparativo de garantia de qualidade confirmado, um aplicativo escrito em PL/SQL no DB2 é tão rápido quanto um escrito em SQL PL no DB2. Fornecedores que já passaram pelo processo de ativação em geral ficam agradavelmente surpresos.
Foi muito trabalhoso fornecer esses recursos?
Não tanto como seria de imaginar. Parte do trabalho inicial, como CONNECT BY e NUMBER, foi feito para o DB2 9.5 de forma tática. O esforço foi concluído em menos de 18 meses.
Quais são algumas complicações comuns ao ativar do Oracle para o DB2?
A compatibilidade do DB2 obviamente não é de 100%. De modo que provavelmente haverá alguns pequenos problemas quando o DB2 for ativado pela primeira vez. Muitas dessas complicações, porém, são triviais e fáceis de resolver. Por exemplo, o DB2 suporta ativadores PL/SQL, mas não permite que as ações deles sejam combinadas. Isto é, um acionador é compartilhado pelas ações UPDATE, DELETE e INSERT. Assim, em vista de um acionador PL/SQL de múltiplas ações, é bastante fácil copiá-lo em três acionadores PL/SQL do DB2 usando uma variável booleana para os predicados INSERTED, UPDATED e DELETED.
Recursos Aprender
Obter produtos e tecnologias
-
DB2 9.7 para Linux, Unix e Windows: Faça download de uma versão de teste, gratuita, do DB2 9.7 para Linux, UNIX e Windows.
- DB2 Express-C 9.7: Faça download do DB2 Express-C 9,7, uma versão gratuita do servidor de banco de dados DB2 Express para a comunidade.
- Elabore seu próximo projeto de desenvolvimento com o software de teste IBM, disponível para download diretamente no developerWorks.
Discutir
Sobre o autor  | |  | Serge Rielau is part of the DB2 Solutions Development team, where he closely works with customers and business partners to port or migrate their applications from competitive RDBMS to DB2 for Linux. UNIX, and Windows. Prior to this role, he worked for 7 years as a team lead and technical manager in the DB2 SQL Compiler Development team. As an expert in the SQL language, Serge is an active participant in the comp.databases.ibm-db2 newsgroup. |
Avalie esta página
|  |