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

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.
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 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 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á 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

É 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 pendente | Comportamento | Nova transação |
|---|---|---|
| Leitor | não bloqueia | Leitor |
| Leitor | não bloqueia | Escritor |
| Escritor | não bloqueia | Leitor |
| Escritor | bloqueia | Escritor |
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.
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 dados | Descrição |
|---|---|
| NUMBER | O suporte para NUMBER e NUMBER(p [, s]) foi adicionado 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 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_DATETO_CHARTO_CLOBTO_NUMBERTO_TIMESTAMP
- Aritmética de data
EXTRACTADD_MONTHSMONTHS_BETWEENNEXT_DAY- Mais (+) o acréscimo das frações de dias
- Manipulação de cadeias de caracteres
LPADRPADINSTRINITCAPSUBSTRB- Extensões a
SUBSTR
- Diversos
NVLDECODELEASTGREATESTBITAND
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.
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
| Recurso | Descrição |
|---|---|
Recursão CONNECT BY | Até 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 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 SQL MINUS | Em Oracle, MINUS é usado no lugar 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 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 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 os conteúdos de uma tabela inteira sem disparar acionadores. |
Instruções de objeto CREATE OR REPLACE | Essa 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 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.
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 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

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.
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
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
| Pacote | Descrição |
|---|---|
| DBMS_OUTPUT | Fornece recursos básicos de relatório que podem ser ativados ou desativados a partir da linha de comando. |
| 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.
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.
- Simplesmente crie o seguinte arquivo de inclusão chamado oci.h:
#include <db2ci.h> - Assegure-se de que o novo oci.h está antes do oci.h do Oracle no CAMINHO.
- 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

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.
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:
- 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:
- db2stop
- db2start
- 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 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
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. - 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

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

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

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).
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.
Aprender
-
Wiki do Oracle Application Enablement para DB2 para LUW: Esse wiki serve como fonte primária para suporte aos clientes e parceiros de negócio IBM que ativam seus aplicativos Oracle para DB2 para Linux, UNIX e Windows.
-
Painel de ativação do DB2 9.7: Obtenha uma visão geral do valor do DB2.
-
Converse com o Laboratório: Escute e assista a vídeos sobre tópicos como um mergulho técnico no DB2 9.7 e uma versão deste artigo em webcast.
-
"É Fácil Passar para o DB2" (YouTube): Assista a uma demonstração em vídeo que dá uma visão geral de ativação de aplicativo no DB2.
-
"DB2 9.7 CLPPlus" demonstra o uso de CLPPlus shell compatível com SQL*PLus.
-
"DB2 9.7: Suporte Nativo a PL/SQL" (YouTube): Assista a um vídeo curto que demonstra muitos dos recursos PL/SQL suportados pelo DB2 9.7.
-
"Liberte-se com o IBM DB2 9.7" (YouTube): Assista a um vídeo com vários testemunhos de clientes e parceiros.
-
"Forms to DB2 converter" : Aprenda como o Release pode mover o Oracle Forms para Java e DB2 9.7.
-
"Continuous Availability with DB2 pureScale" : Com o DB2 pureScale pode-se escalar e fornecer disponibilidade contínua para seus aplicativos OLTP.
- Seção Gerenciamento de Informações do developerWorks: Saiba mais sobre Gerenciamento de Informações. Encontre documentações técnicas, artigos de instruções, orientação, downloads, informações sobre produtos e muito mais.
- Mantenha-se atualizado com os webcasts e eventos técnicos do developerWorks.
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
- Participar do fórum de discussão.
- Participe dos blogs do developerWorks e envolva-se com a comunidade My developerWorks; com seu perfil pessoal e página inicial customizada, você pode adaptar o developerWorks aos seus interesses e interagir com outros usuários developerWorks.
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.