DB2 9.7: Execute aplicativos Oracle em DB2 9.7 para Linux, UNIX e Windows

O DB2 9.7 abrange aplicativos desenvolvidos em Oracle com suporte PL/SQL e muito mais

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 não modificado virtualmente. 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.

Este artigo foi atualizado para incluir novos recursos adicionados ao DB2 9.7 Fix Pack 1, tal como suporte para OCI.

Serge Rielau, Senior Software Developer, IBM

Serge RielauSerge Rielau trabalhou com DB2 para Linux, UNIX e compilador SQL do Windows por 12 anos. Atualmente, ele é arquiteto SQL para DB2 para Linux, UNIX e Windows. Ele é o arquiteto responsável pela compatibilidade do SQL no DB2 9.7. É possível entrar em contato com Serge pelo site comp.databases.ibm-db2.



15/Mar/2010 (Primeira publicação 15/Mar/2010)

Motivação

No último mês de março, em uma apresentação que fiz na Cebit 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 com meus erros, não é de se 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
shows circles of overlapping standards

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, ao invés do 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 geralmente usados
Oracle-->DB2
Controle de simultaneidade-->Suporte nativo
Dialeto SQL-->Suporte nativo
PL/SQL-->Suporte nativo
Pacotes PL/SQL-->Suporte nativo
Pacotes embutidos-->Suporte nativo
Cliente JDBC com extensões-->Suporte nativo
Aplicativos cliente OCI-->Suporte nativo
Scripts SQL*Plus-->Suporte nativo
Formulários Oracle-->Conversão automática para Java
RAC-->pureScale

Com o novo DB2, não é mais necessário transferir 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 pendenteComportamentoNova transação
Leitornão bloqueiaLeitor
Leitornão bloqueiaEscritor
Escritornão bloqueiaLeitor
EscritorbloqueiaEscritor

Sem entrar em detalhes a respeito dos níveis de isolamento, é o suficiente dizer que a grande maioria de aplicativos que usam o padrão Oracle Statement Level Isolation funcionará 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 de simultaneidade DB2 tradicional com CS
Transação pendenteComportamentoNova transação
Leitornão bloqueiaLeitor
Leitorraramente bloqueiaEscritor
EscritorbloqueiaLeitor
EscritorbloqueiaEscritor

Acontece que não há nenhuma razão semântica para qual uma transação sendo executada sob um isolamento CS espere por uma saída quando encontra uma linha modificada. 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 ter implementado a alteração de outras verificações de usuário daquela tabela, tradicionalmente, o segundo usuário teria que esperar o primeiro usuário implementar e retroceder. 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
Writers don't block readers

É 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 DB2 com CS
Transação pendenteComportamentoNova transação
Leitornão bloqueiaLeitor
Leitornão bloqueiaEscritor
Escritornão bloqueiaLeitor
EscritorbloqueiaEscritor

Como pode ser visto, 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 dados

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 DB2
Tipo de dadosDescrição
NUMBERO suporte para NUMBER e NUMBER(p [, s]) foi adicionado com base no DECFLOAT (com aceleração de hardware Power6) e DECIMAL.
VARCHAR2O comportamento tipo VARCHAR2 inclui sequências vazias interpretadas como NULL e ordenação sensível de rastreio de espaço em branco.
Oracle DATEUm 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).
BOOLEANEsse tipo pode ser usado em lógica de procedimentos, variáveis e parâmetros para rotinas.
VARRAYO suporte ARRAY em procedimentos foi estendido para dar suporte a método de estilo e sintaxe VARRAY.
INDEX BYAlém dos arrays regulares, o DB2 também suporta arrays associativos.
ROW TYPEEsse tipo composto pode ser usado em variáveis e parâmetros, e como elemento de arrays e arrays associativos.
Tipo Ref CursorPodem 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 cadeias de caracteres e numéricas não podem ser comparadas a menos que uma seja explicitamente convertida em outra.

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, mas 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 oferece 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 das frações de dias
  • Manipulação de cadeias de caracteres
    • LPAD
    • RPAD
    • INSTR
    • INITCAP
    • SUBSTRB
    • 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 eles, os muitos pequenos e grandes ajustes de linguagens. A Tabela 6 lista alguns destaques:

Tabela 6. Novo suporte SQL
RecursoDescrição
Recursão CONNECT BYAté agora, o DB2 tinha suporte à recursão 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 DUALUma tabela com uma única linha e coluna usada em muitos aplicativos Oracle como simulado.
Pseudocoluna ROWNUMEssa pseudocoluna em geral é usada para limitar o número de linhas retornadas e para enumerar linhas em um conjunto de resultados.
Pseudocoluna ROWIDRowids são usadas para recuperar rapidamente uma linha que tenha sido obtida anteriormente com base no seu endereço físico.
Operador SQL MINUSEm Oracle, MINUS é usado no lugar de EXCEPT para subtrair um conjunto de resultados de outro.
SELECT INTO FOR UPDATEA 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 SYNONYMUm sinônimo público e um alias sem um nome do esquema. O DB2 suporta sinônimos públicos para objetos de tabela, sequências e pacotes PL/SQL.
CREATE TEMPORARY TABLEO DB2 dá suporte a tabelas temporárias globais criadas além das tabelas temporárias globais declaradas.
Instrução de tabela TRUNCATEEssa instrução exclui rapidamente os conteúdos de uma tabela inteira sem disparar acionadores.
Instruções de objeto CREATE OR REPLACEEssa notação permite a substituição de objetos caso já existam novas versões.
Named parameters (=>)É possível invocar procedimentos associando-se, por nome, argumentos a parâmetros usando uma notação '=>' ao invés de contar com associação de posição.
Resolução de nome relaxadaO 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
PL/SQL Compiler support in Optim Development Studio

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 se 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
PL/SQL Debugger support in 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.
  • Compilações condicionais CCFLAGS permitem que diferentes seções de PL/SQL sejam compiladas baseando-se no contexto. Esse recurso é particularmente útil para minimizar qualquer código específico DB2 dentro de uma base de códigos PL/SQL compartilhada.

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 PACKAGEs (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 listados na Tabela 7 são fornecidos pelo DB2:

Tabela 7. Pacotes integrados fornecidos pelo DB2
PacoteDescrição
DBMS_OUTPUTFornece recursos básicos de relatório que podem ser ativados ou desativados a partir da linha de comando.
UTL_FILEMódulo que permite trabalhar com arquivos no servidor DB2.
DBMS_SQLPacote que fornece um API SQL para executar SQL dinâmica além das instruções EXECUTE e EXECUTE IMMEDIATE existentes.
UTL_MAILMódulo que permite o envio de notificações de e-mail a partir do SQL.
UTL_SMTPAPI de nível inferior similar à UTL_MAIL que fornece integração SMTP.
DBMS_ALERTPacote que, quando usado, permite que diferentes sessões sirvam de semáforo umas para as outras.
DBMS_PIPEMódulo que permite que as sessões enviem dados umas para as outras.
DBMS_JOBFornece um API compatível que se integra ao planejador de tarefas do DB2.
DBMS_LOBAPI Oracle para processamento LOB que ecoa as funções LOB integradas do DB2.
DBMS_UTILITYColeçã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 para aplicativos OCI

Muitos aplicativos Oracle C antigos usam a Interface com o Cliente Oracle (OCI) para se comunicar com o DBMS. Começando com o Fix Pack 1, o DB2 9.7 fornece um cliente OCI compatível chamado DB2CI que suporta em excesso as funções de compatibilidade de 150 OCI de OCIAttrGet para OCITransRollback. Em muitos casos, é possível simplesmente ligar novamente um Aplicativo OCI a uma biblioteca DB2CI, permitindo que o aplicativo OCI trabalhe com o DB2 virtualmente inalterado.

  1. Simplesmente crie o seguinte arquivo de inclusão chamado oci.h:
    #include <db2ci.h>
  2. Assegure-se de que o novo oci.h está antes do oci.h do Oracle no CAMINHO.
  3. Então substitua a opção de link -loci.dll por -ldb2ci.dll em seu makefile e compile novamente seu aplicativo.

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
SQL*Plus compatible CLPLus tool

Ativação do Oracle Forms

O Oracle Forms é um software de legado usado para criar sistemas de entrada de dados para o banco de dados. Alguns clientes e ISVs possuem centenas de telas Oracle Forms que constituem ou são parte de um aplicativo. A IBM firmou uma parceria com a realease LLC para fornecer Oracle Forms para recursos de conversão Java.

O lançamento fornece ferramentas que traduzem formulários Oracle para Java de uma maneira altamente automática, eficiente e sustentável, preservando a aparência e a sensação dos formulários GUI originais, sem criar qualquer dependência em produtos de terceiros.


Refinamento contínuo

Quanto mais e mais clientes e parceiros ativam o DB2 9.7, novos pedidos de recursos e refinamento são adicionados ao fluxo do fix pack do DB2 9.7 para melhorar continuamente o nível de compatibilidade. O Fixpack 1 fornece os seguintes novos recursos:

  • Suporte CCFLAGS para maximizar a quantidade de códigos compartilhados entre Oracle e DB2 para fornecedores de aplicativos.
  • Suporte FORALL e BULK COLLECT
  • A função e refinamentos SUBSTRB para SUBSTR
  • Melhorias na manipulação de expressões booleanas
  • O cliente DB2CI compatível com um aplicativo OCI
  • CREATE OR REPLACE para tipos
  • Suporte estendido para funções PL/SQL tais como parâmetros INOUT, a capacidade de se escrever para tabelas de uma função, etc.
  • A parceria de lançamento para ativar aplicativos Oracle Forms.

Espera-se que o Fixpack 2 forneça um nível ainda maior de compatibilidade.


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 complexas 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:

  1. Ajustar as variáveis de registro necessárias:
    • db2set DB2_COMPATIBILITY_VECTOR=ORA
    • db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
  2. Reiniciar o gerenciador do banco de dados:
    • db2stop
    • db2start
  3. 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
  4. Iniciar a IBM Data Extract Tool e conectá-la aos bancos de dados Oracle e DB2 (veja a Figura 6):
    Figura 6. Arrastar e soltar esquemas Oracle para o DB2 usando a IBM Data Extract Tool
    Drag and drop Oracle schemata onto DB2 using IBM Data Extract Tool
    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.
  5. Mova os esquemas desejados do Oracle para o DB2 usando a implementação interativa:
    Figura 7. Arraste e solte os esquemas Oracle para o DB2 usando a IBM Data Extract Tool
    Drag and drop Oracle schemata onto DB2 using IBM Data Extract Tool
    No modo de implementação interativa pode-se 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, pode-se corrigir a definição como necessário e implementá-la. O objetivo é mover de forma interativa todos os objetos para DB2 com base em exceção.

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
MEET DB2 report tool for assessment

Durante a fase beta de um ano do DB2 9.7, muitos aplicativos, no total de mais de centenas de milhares de 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
98% average rate of supported statements

Resumo

Graças a seu suporte nativo a múltiplos dialetos SQL, o novo DB2 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 (consulte 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, de 90% a 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.

Quais edições do DB2 suportam os recursos de compatibilidade SQL Oracle?

Todos os recursos descritos acima são suportados por todas as plataformas suportadas pelo DB2 para LUW. Isso inclui Windows, Linux (em Intel, Power e mainframe), HP e Sun Solaris. Com exceção do DB2 Express C, todas as edições suportam todos os recursos de compatibilidade. No DB2 Express C, PL/SQL, CLPPlus e a biblioteca do pacote integrado não são suportados. Pode-se, entretanto, obter o benefício de todos os outros recursos, tais como a biblioteca estendida de funções integradas ou conversão implícita.

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

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=419052
ArticleTitle=DB2 9.7: Execute aplicativos Oracle em DB2 9.7 para Linux, UNIX e Windows
publish-date=03152010