У меня есть программа, которая прерывается с перерывами в сложном запросе.Как отлаживать неуловимую ошибку, используя базу данных Progress OpenEdge
Ошибка гласит:
System.Data.SqlClient.SqlException: Не удалось получить строку из OLE DB провайдера "MSDASQL" для связанного сервера "LinkedServer".
Запрос выглядит следующим образом:
SELECT Replace([JOB-NO],'M0','') as KeyTaskID,
dbo.SFGET_UniqueTaskID([CLIENT-CODE],Replace([JOB-NO], 'M0', ''), 0, [TRADE-CODE]) AS HMSUniqueTaskID,
[LATEST-PRIORITY] AS PriorityCode,
[KeyProperty] AS KeyProperty,
Replace([JOB-NO],'M0','') AS KeyJob,
[JOB-TYPE] as TaskSubType,
CONVERT(varchar(6),[MAINT-OFFICER]) AS Officer,
LEFT(FORENAME + ' ' + SURNAME, 50) AS OfficerName,
[JOB-NO] + ' ' + LEFT(RTRIM(REPLACE([TEXT-LINE], ';', CHAR(13))), 480) AS Description,
dbo.SFGET_FormattedDate([TARGET-DATE],0) AS DueDateTime,
[CURRENT-STAGE-CODE] AS CurrentStageCode
FROM openquery(LinkedServer, '
SELECT DISTINCT
"RM-JOB"."JOB-NO",
"RM-JOB"."CLIENT-CODE",
"RM-JOB"."LATEST-PRIORITY",
"RM-JOB"."TRADE-CODE",
"RM-JOB"."JOB-TYPE",
"RM-JOB"."TARGET-DATE",
"RM-JOB"."MAINT-OFFICER",
"RM-JOB"."TEXT-LINE",
"RM-JOB"."CURRENT-STAGE-CODE",
"RM-JOB"."PLACE-REF",
"IH_OFFICER".FORENAME,
"IH_OFFICER".SURNAME
FROM "PUB"."RM-JOB"
LEFT OUTER JOIN "PUB"."IH_OFFICER"
ON ("IH_OFFICER"."OFFICER-CODE" = "RM-JOB"."MAINT-OFFICER")
WHERE "RM-JOB"."JOB-TYPE" = ''GASS''
AND "RM-JOB"."JOB-STATUS" = 06
AND "RM-JOB"."CONTRACTOR" = ''NWH001'' ') as ibsTasks
INNER JOIN [SVSExtract].[dbo].Property prop
ON ibsTasks.[PLACE-REF] = prop.UserCode
Я тестировал его вручную с помощью SQL Server Management Studio. Это время от времени не работает, но в основном работает нормально.
Я в затруднении относительно того, как я могу отладить ошибку, которую я не могу воспроизвести по своему усмотрению.
Любые предложения?
Является ли тот же самый запрос (в том числе и где), который случайным образом терпит неудачу или отличается от того, где не выполняются предложения? В зависимости от ваших версий OE и уровня доступа к реальному серверу OE существуют различные журналы для проверки/включения. – TheMadDBA
Да. Я получаю различные ошибки, когда он терпит неудачу. наиболее распространенным является «[DataDirect] [ODBC Progress OpenEdge Wire Protocol driver] [OPENEDGE] Ошибка при записи блокировки записи из таблицы PUB.RM-JOB.". Я попытался добавить УРОВЕНЬ ИЗОЛЯЦИИ SET TRANSACTION READ UNCOMMITTED перед тем, как выбрать оператор, но это также не работает. –
Вы пробовали добавить WITH (NOLOCK) по вашему запросу? Я обнаружил, что контроль уровня изоляции через несколько уровней (DSN, Linked server и т. Д.) В лучшем случае проблематичен. – TheMadDBA