SQL Server에 전달된 쿼리가 손상되고 있습니다.

SQL Server에 전달된 쿼리가 손상되고 있습니다.

고객 사이트의 애플리케이션에서 이상한 오류가 발생했습니다. 우리는 Management Studio와 SQL Server만 사용하여 동작을 복제할 수 있을 정도로 범위를 좁혔습니다.

A와 B라는 두 대의 컴퓨터가 있습니다.

+------------+ +---------+
| [아] | | [비] |
| 관리 | --------------> | SQL 서버 2008 R2 |
| 스튜디오 | | 엔터프라이즈 x64 |
+------------+ +---------+

머신 B의 SQL Server 인스턴스에 대해 머신 A의 Management Studio에서 SQL 스크립트를 실행하고 있습니다.우리는 실제로 스크립트를 실행하는 것이 아니라 단지 구문 분석만 할 뿐입니다.

대부분의 경우 구문 분석 작업이 제대로 작동합니다. 가끔(임의로 보이는) 구문 오류로 인해 구문 분석 작업이 실패합니다. 오류 메시지는 오류가 있는 스크립트 부분을 보여줍니다. 이 부분은 잘리고 임의의 문자가 추가된 원본 스크립트의 일부 SQL로 나타납니다.

예:

원본 SQL:

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

오류가 발생한 SQL(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ā怊

위의 예는 쿼리가 어떻게 손상되는지 보여줍니다. 항상 발생하는 것은 아니며 항상 오류를 일으키는 SQL과 동일한 비트도 아닙니다. 다른 SQL Server 인스턴스에 대해 이 스크립트를 구문 분석하면 오류가 발생하지 않아 스크립트가 정상임을 나타냅니다.

그것나타납니다서버에 수신되는 SQL이 손상되고 있는 것입니다. 이로 인해 문제는 클라이언트 측에 있거나 클라이언트에서 서버로 SQL을 전송하는 데 있다고 생각됩니다. 오류가 발생한 기간의 SQL 추적이 있는데, 이는 SQL Server가 이를 수신할 때 SQL이 손상되었음을 나타냅니다.

이 동작의 가능한 원인을 추적할 수 없어 해결 방법을 찾을 수 없습니다. 오류가 무작위로 발생하는 것처럼 보이기 때문에 버그 보고서를 제출하기 위한 재현 단계를 생성하는 것도 매우 어렵습니다.

어떤 아이디어가 있나요?

답변1

SQL Server를 꺼내세요. 철저한 시스템 점검을 위한 시간입니다. 메모리(컴퓨터뿐 아니라 네트워크 카드도 가능)가 원인일 수 있습니다. 메모리 오류가 나타날 것으로 예상됩니다.

관련 정보