As consultas passadas para o SQL Server estão sendo corrompidas

4

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?

    
por adrianbanks 22.12.2010 / 13:53

1 resposta

3

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.

    
por 22.12.2010 / 13:57