Как отладить намеренную ошибку с помощью базы данных 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. Иногда это дает сбой, но в основном работает нормально.

Я не понимаю, как мне отладить ошибку, которую я не могу воспроизвести по своему желанию.

Какие-либо предложения?


person Steve Staple    schedule 05.08.2015    source источник
comment
Это тот же самый запрос (включая where), который случайно не выполняется, или разные предложения where, которые терпят неудачу? В зависимости от ваших версий OE и вашего уровня доступа к фактическому серверу OE существуют различные журналы для проверки / включения.   -  person TheMadDBA    schedule 05.08.2015
comment
да. Когда он выходит из строя, я получаю различные ошибки. наиболее распространенным является [DataDirect] [ODBC Progress OpenEdge Wire Protocol] [OPENEDGE] Ошибка получения блокировки записи для записи из таблицы PUB.RM-JOB. Я попытался добавить SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED перед оператором select, но это не так. Я тоже не могу работать.   -  person Steve Staple    schedule 06.08.2015
comment
Вы пробовали добавить WITH (NOLOCK) в свой запрос? Я обнаружил, что управление уровнем изоляции через несколько уровней (DSN, связанный сервер и т. Д.) В лучшем случае проблематично.   -  person TheMadDBA    schedule 06.08.2015


Ответы (1)


Я сам не настолько разбираюсь в SqlClients и Progress, но: Progress Knowledgebase может дать вам решение!

Эта запись, например, описывает аналогичную ошибку, даже если указанная версия может быть старше, чем тот, которым вы пользуетесь? (Всегда публикуйте версию, когда спрашиваете об OpenEdge - существует множество более старых установок, а Progress значительно изменился за последние пару лет).

По Базе знаний лучше всего искать с помощью Google:

Найдите, например: site:knowledgebase.progress.com MSDASQL, и вы получите 48 результатов.

person Jensd    schedule 05.08.2015