Configurei um pacote Microsoft SQL Server 2008 R2 SSIS com uma Tarefa Executar SQL para executar uma consulta PL/SQL em um banco de dados Oracle 10.2.
A Tarefa Executar SQL (denominada "SQL Update MY_STATUS sinalizador") está usando um Gerenciador de Conexões OLE DB com um Provedor "Native OLE DB\Oracle Provider para OLE DB". Todas as outras configurações de tarefa são valores padrão.
A consulta é simples:
UPDATE MY_TABLE
SET MY_STATUS = 1
WHERE MY_STATUS = 0
(Observação: esta consulta é bem-sucedida quando executada no SQL Developer com um terminador de ponto e vírgula. Aqui, o terminador é omitido, porque se um ponto e vírgula for incluído, um erro de caractere inválido será gerado pelo SSIS.)
Quando inicio a depuração, a tarefa inicia a execução e depois trava indefinidamente, o pacote não conclui a execução.
A janela de saída de depuração mostra esta mensagem:
Aviso: 0x0 na atualização do SQL sinalizador MY_STATUS: operação OLE DB de várias etapas gerou erros. Verifique cada valor de status do OLE DB, se disponível. Nenhum trabalho foi feito.
(A Tarefa se comporta da mesma forma com a consulta configurada como Entrada Direta ou como Variável.)
O que significa este aviso de "múltiplas etapas" neste contexto? O que devo fazer para permitir que a Tarefa Executar SQL seja bem-sucedida?
A razão pela qual a tarefa estava suspensa era que eu executei uma instrução de atualização separada em MY_TABLE em uma janela do cliente SQL Developer e não concluí a transação. Como a transação ainda estava aberta, a Tarefa Executar SQL não pôde ser concluída. Confirmar a transação no SQL Developer permitiu que o pacote SSIS fosse concluído, no entanto, ainda gerou a mesma mensagem de aviso.
Parece que a mensagem de Aviso é inofensiva, embora eu ainda não saiba como interpretá-la.
Atenção DBAs do Microsoft SQL Server! A janela de consulta SQL Developer Oracle NÃO funciona como o SQL Server Management Studio! As consultas DML não são transações implícitas, portanto, uma instrução INSERT, UPDATE OU DELETE deixa uma transação aberta, a menos que você clique no botão COMMIT ou ROLLBACK na barra de ferramentas. Aprenda com meu erro.