Não é possível despejo de dados da tabela para o arquivo usando o BCP quando chamado a partir do JDBC

StackOverflow https://stackoverflow.com/questions/4605056

  •  25-09-2019
  •  | 
  •  

Pergunta

Eu escrevi um procedimento de despejo de dados de uma tabela para um arquivo de texto assim (suponha que as variáveis relevantes foram declarados);

SET @sql = '"SELECT * FROM ##OutputData"'

SET @cmdline = 'bcp '+ @sql +' queryout '+@OutputPath+'\outputFile.csv -c -t -T -S' + @@ServerName

EXEC master..xp_cmdshell @cmdline

Este procedimento funciona bem quando executado a partir de dentro do SQL Server, mas não quando ele é chamado a partir do JDBC em Java.

Olhando para o monitor de atividade eu posso ver que uma transação operacional a consulta "SELECT * FROM ##OutputData" está sendo bloqueado por transacção que está a executar o procedimento.Efetivamente travado o processo.

Eu brinquei com o código e não consigo ver por que isso iria acontecer em todos.Há algo que eu estou faltando em algum lugar?

Obrigado por qualquer ajuda...

EDITAR:Referências alteradas de Quartzo para JDBC, em vez disso, porque é provavelmente o mais relevante.

Foi útil?

Solução

Creio que encontrei a resposta para este problema.

Desde a Primavera de utiliza-lo do próprio gerenciador de transações, é o bloqueio de tabelas que estou criando no procedimento.Quando executa o procedimento BCP, ele é executado no SQL Server, fora do escopo da Primavera de transação.Portanto, o BCP não é possível acessar as tabelas que ele precisa porque eles estão presos por Molas de transação.O procedimento não pode continuar porque ele está esperando BCP então, todo o processo atinge um impasse.

Tenho notado que isso ocorre sempre que um comando BCP tem uma transação externa, e apesar de o BCP tem um TransactionIsolation Bandeira, esta não parece ter qualquer efeito neste caso.

Para resolver o problema que eu estou usando agora os Trabalhos do SQL Server para executar o procedimento, sem transacções.

De qualquer maneira, pelo menos eu posso ser grato por esta pergunta me valeu o "Tumbleweed' crachá ;) Obrigado a todos!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top