Retire o SQL Server. Tempo para uma verificação completa do sistema. Memória (do computador, mas possivelmente também a placa de rede) pode ser o culpado. Eu esperaria ver erros de memória aparecendo.
Estamos passando por um erro bizarro com nosso aplicativo em um site do cliente. Conseguimos reduzi-lo ao ponto em que podemos replicar o comportamento usando apenas o Management Studio e o SQL Server.
Temos duas máquinas, A e B:
+------------+ +--------------------+ | [A] | | [B] | | Management | --------------> | SQL Server 2008 R2 | | Studio | | Enterprise x64 | +------------+ +--------------------+
Estamos executando um script SQL no Management Studio na máquina A contra a instância do SQL Server na máquina B. Na verdade, não estamos executando o script, apenas analisando-o.
Na maioria das vezes, a operação de análise funciona bem. Ocasionalmente (aparentemente aleatoriamente), a operação de análise falha com um erro de sintaxe. A mensagem de erro mostra a parte do script com o erro, que aparece como algum SQL do script original que foi truncado e possui caracteres aleatórios anexados a ele.
Um exemplo:
O SQL original:
SELECT DISTINCT ST.TABLE_NAME as TableName
FROM INFORMATION_SCHEMA.TABLES AS ST
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS SC
ON SC.TABLE_NAME = ST.TABLE_NAME
WHERE ST.TABLE_TYPE = 'BASE TABLE'
AND SC.COLUMN_NAME = 'Identity'
AND ST.TABLE_NAME != 'dtproperties'
ORDER BY ST.TABLE_NAME
O SQL que está com erro (conforme relatado pelo SQL Server):
SELECT DISTINCT ST.TABLE_NAME as TableName
FROM INFORMATION_SCHEMA.TABLES AS ST
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS SC
ON SC.TABLE_NAME = Sā怊
O exemplo acima mostra como a consulta está sendo corrompida. Isso nem sempre acontece e nem sempre é o mesmo bit de SQL que causa o erro. Analisar esse script em outra instância do SQL Server não produz erros, mostrando que o script está bem.
aparece que algo está corrompendo o SQL que está sendo recebido pelo servidor. Isso me leva a pensar que o problema está no final do cliente ou na transmissão do SQL do cliente para o servidor. Eu tenho um rastreamento de SQL do período em que ocorre um erro, que mostra o SQL foi corrompido quando o SQL Server recebe.
Não conseguimos localizar nenhuma causa possível desse comportamento e, portanto, não conseguimos encontrar uma correção. Como os erros ocorrem aparentemente aleatoriamente, também é muito difícil gerar etapas de reprodução para enviar um relatório de erros.
Alguma idéia?