Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle excluir dados da tabela remota do SQL Server


Acho que a melhor pergunta é:Qual é a melhor maneira de mover dados do SQL Server para o Oracle, que exclui do MSSS todas as linhas entregues com sucesso?

Você faz isso em um loop para garantir que, ao adicionar a um, exclua do outro.

Se alguma coisa aleatória desconhecida acontecer com erro na inserção, você evitará remover o registro de origem.

Essa é a essência, certo?

Existem maneiras muito melhores de lidar com esse tipo de movimentação de dados do que confirmar após cada loop de transação distribuída de inserção/exclusão.

Primeiro, um commit no meio de um loop é simplesmente ruim. No Oracle, é uma boa maneira de fazer com que outras sessões obtenham erros ORA-01555. Então eu evitaria isso se possível.

Em segundo lugar, você deve saber absolutamente quais são as possíveis causas de erros razoáveis ​​na inserção. Você viola um comprimento de coluna, um FK, um UK... há uma lista finita do que pode quebrar na inserção. Grandes falhas cabeludas, como Não é possível estender o espaço de tabela, DEVEM fazer com que o sistema pare. Não há necessidade de armadilha para isso. Mas os problemas de aplicativos, como mencionei, são fáceis de gerenciar.

Se eu estivesse escrevendo isso, inseriria em massa todas as linhas usando o LOG da Oracle ERROS EM para evitar um ROLLBACK completo quando apenas uma/poucas linhas falham.

Agora você tem uma tabela que contém todas as linhas com falha e o motivo da falha. Agora você pode, no lado do SQL Server, excluir todas as linhas que NÃO ESTÃO na lista de IDs com falha.

Você conseguiu a mesma coisa, mas com operações baseadas em Set em vez de SLOW-BY-SLOW, ooops, quero dizer linha por linha.