Mapeamento de bases de dados com tratamento de exceções
Processos empresariais críticos dependem de dados fiáveis, e os administradores de bases de dados, bem como outros analistas de dados, precisam ter a certeza da integridade das informações armazenadas nas tabelas de bases de dados. Durante operações automatizadas de ETL (Extração, Transformação e Carregamento) ou outras tarefas de importação de bases de dados, podem ser encontrados dados inválidos que comprometem o sucesso do processo. O Altova MapForce inclui mecanismos de tratamento de exceções de bases de dados para reverter os dados afetados quando ocorre um erro, e permite, opcionalmente, continuar com o restante do mapeamento da base de dados.
Por exemplo, um erro num único registo não precisa de impedir a continuação da execução de um mapeamento, como acontece quando certas restrições de base de dados impedem que o mapeamento insira ou atualize dados inválidos.

A ativação do tratamento de exceções no nível do banco de dados envolve a inclusão de todas as alterações no componente do banco de dados dentro de transações que podem ser revertidas em caso de erro. Os utilizadores podem optar por continuar com o restante do processo ou interromper a execução. As transações podem ser ativadas a nível do componente do banco de dados, a nível da tabela ou para procedimentos armazenados.
O tratamento de exceções pode ser combinado com a registação (monitorização) da saída da base de dados para criar um registo dos erros que ocorrem durante o processamento automatizado.
Vamos ver como funciona.
A pasta de exemplos do MapForce inclui um mapeamento de base de dados e uma base de dados SQLite que ilustram o tratamento de transações e a reversão de operações. Naturalmente, estas funcionalidades são suportadas para todas as bases de dados relacionais populares, para tarefas comuns como a conversão de PostgreSQL para SQLite, o mapeamento de XML para um SQL Server, a conversão de JSON para Access, e assim por diante.

Esta correspondência copia dados de duas tabelas de base de dados para novas tabelas com uma estrutura semelhante, exceto por uma diferença importante. Na tabela "new_addresses" da base de dados de destino, os campos "is_shipping" e "is_billing" não podem conter valores nulos, enquanto que, na tabela "addresses" da base de dados de origem, esses campos podiam conter valores nulos. Isso significa que ocorrerão erros durante a execução da correspondência se forem encontrados valores ausentes.
Vamos analisar três situações, utilizando as opções de tratamento de exceções de bases de dados para gerir erros de diferentes formas
No primeiro erro, reverta todas as alterações e interrompa a execução do processo
Desfaça apenas a transação que gerou o erro e continue
Desfazer a última transação e continuar
Desfazer todas as alterações
Na primeira situação, pretendemos aplicar o tratamento de exceções no nível do banco de dados para garantir que o banco de dados de destino permaneça completamente inalterado caso ocorra algum erro durante a execução da mapeamento. Para implementar esta opção, podemos abrir a caixa de diálogo de propriedades do componente do banco de dados de destino e ativar o tratamento de transações:

Agora, podemos executar a configuração clicando no botão "Saída" na parte inferior do painel de configuração para gerar o script de execução SQL. Em seguida, selecione a opção "Executar script SQL" no menu "Saída" que se encontra acima da janela do script

Quando ocorre o primeiro erro durante a execução, é exibida uma janela de diálogo que nos permite confirmar ou alterar as configurações da transação que escolhemos anteriormente

Simplesmente clicaremos em "OK" para confirmar as configurações originais. A execução da mapeação é interrompida e a janela de mensagens descreve o erro:

Podemos usar a janela de consulta de base de dados integrada do MapForce para selecionar e examinar as tabelas "new_users" e "new_addresses". Esperamos que ambas estejam vazias:

Isto confirma que quaisquer dados inseridos antes do erro foram revertidos, ou seja, removidos da base de dados.
Durante a execução automatizada, sob o controlo do MapForce Server, as configurações de transação do componente seriam utilizadas sem qualquer interrupção.
Desfazer a última transação e continuar
Imagine um cenário em que um ficheiro de dados externo muito grande precisa de ser importado para uma base de dados, digamos, dez mil registos ou mais. Esperamos que o ficheiro externo seja válido, mas, caso alguns registos contenham dados incorretos, queremos importar todos os registos válidos e documentar os erros. Esta é uma situação de tratamento de exceções na base de dados, correspondente ao cenário 2 da lista acima, combinada com o rastreamento da base de dados descrito numa publicação anterior.
Para implementar esta opção de tratamento de exceções para a tabela "new_addresses", clicamos no botão de ações da tabela e selecionamos as seguintes propriedades:

Agora podemos gerar um novo script SQL e executá-lo utilizando o mesmo comando "Executar script SQL" mostrado acima. A janela "Mensagens" irá registar vários erros. Podemos executar novamente a consulta SQL na janela "Consulta de Base de Dados" para visualizar os dados que foram mapeados com sucesso:

Além disso, gerámos um ficheiro de rastreio em formato XML. A imagem abaixo mostra uma visão parcial na janela do editor XML do programa XMLSpy XML, referente a um erro específico, destacado na linha 54:

Um ficheiro de registo como este facilita a identificação e correção de alguns registos incorretos entre dez mil!
Desfazer a última transação e continuar
A situação 3 no tratamento de exceções da base de dados satisfaz este requisito empresarial: se a inserção de um endereço falhar, o registo do utilizador correspondente também não deve ser inserido, mas o restante do processo de mapeamento deve continuar.
Este exemplo é descrito em detalhe na ajuda online do MapForce, que é instalada automaticamente com o programa, e em todos os ficheiros de demonstração apresentados aqui. Deixamos que seja o utilizador a descarregar uma versão de avaliação gratuita e a explorar esse cenário, ou que comece imediatamente a implementar o tratamento de exceções de bases de dados nas suas próprias mapeações!