O cenário é bastante simples: Um Job falha na produção, dando um erro "ALTER INDEX falhou porque as seguintes opções SET têm configurações incorretas: 'QUOTED_IDENTIFIER' ...".
A questão é: por que esse problema aparece na produção e não em nenhum de nossos ambientes de teste? Verificando DBCC USEROPTIONS, os resultados são exatamente os mesmos em todos os bancos de dados. Além disso, o script em si não contém aspas. Ele simplesmente reconstrói alguns índices e atualiza algumas estatísticas com fullscan.
Usando exatamente o mesmo trabalho em qualquer outro banco de dados, posso definir QUOTED_IDENTIFIER ON ou OFF, ou simplesmente não configurá-lo e deixá-lo executar nos padrões de conexão. E sempre funcionará independentemente. Mas na produção, parece que deve ser definido como ON ou OFF.
Estou perguntando isso porque, em termos de tempo, não posso testar isso uma vez por dia, preciso saber por que esse erro está acontecendo e como prever qual configuração é necessária e quando. A única diferença visível entre os bancos de dados de teste e de produção é o agrupamento, mas mesmo criando um banco de dados de teste para corresponder ao agrupamento na produção, o trabalho ainda funciona independentemente da configuração QUOTED_IDENTIFIER.
Obrigado!
Acabei de me deparar com esse mesmo problema. Por padrão, a primeira instrução em uma etapa de trabalho é
SET QUOTED_IDENTIFIER OFF
- você pode ver isso em um rastreamento do Profiler. A solução é adicionar uma linha no início do seu código paraSET QUOTED_IDENTIFIER ON
.Quanto ao seu script que não contém aspas - acredito que, ao criar ou reconstruir certos tipos de índices, a configuração necessária deve estar ativada.
Aqui estão alguns links:
https://stackoverflow.com/questions/15218893/first-statement-issued-by-sql-server-agent-sets-quoted-identifier-off
Descobri que o trabalho do SQL Agent define as opções do banco de dados com base no nível de compatibilidade do banco de dados e isso pode substituir as opções do banco de dados que foram definidas.
ou seja, o banco de dados tem opções de banco de dados SET QUOTED_IDENTIFIER ON, no entanto, o nível de compatibilidade do banco de dados é definido como SQL 2000 para que o SQL Job falhe (ou seja, ao tentar ATUALIZAR linhas na tabela que tem índice filtrado).
Mude o nível de compatibilidade para SQL 2008 e, em seguida, o trabalho SQL será bem-sucedido.
Eu me deparo com o mesmo problema ao agendar um trabalho para criar índices. o que eu fiz é
1) - Eu executo este script para identificar qual é o valor atual das opções
2) Modifiquei meu trabalho de criação de índice, adicionando a configuração de QUOTED_IDENTIFIER conforme necessário. Você pode ver isso no código de criação de trabalho abaixo. isso está funcionando atualmente.