Estamos enfrentando um erro bizarro com nosso aplicativo nas instalações de um cliente. Conseguimos restringi-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] | | Gestão | --------------> | Servidor SQL 2008 R2 | | Estúdio | | Empresa x64 | +------------+ +---------+
Estamos executando um script SQL no Management Studio na máquina A na 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. A análise desse script em outra instância do SQL Server não produz erros, mostrando que o script está correto.
Istopareceque algo está corrompendo o SQL que está sendo recebido no servidor. Isso me leva a pensar que o problema está no lado do cliente ou na transmissão do SQL do cliente para o servidor. Eu tenho um rastreamento SQL do período em que ocorreu um erro, que mostra que o SQL foi corrompido quando o SQL Server o recebeu.
Não conseguimos rastrear qualquer causa possível para esse comportamento e, portanto, não conseguimos encontrar uma solução. Como os erros ocorrem aparentemente aleatoriamente, também é muito difícil gerar etapas de reprodução para enviar um relatório de bug.
Alguma ideia?
Responder1
Retire o SQL Server. É hora de uma verificação completa do sistema. A memória (do computador, mas possivelmente também da placa de rede) pode ser a culpada. Eu esperaria ver erros de memória aparecendo.