OpenQuery для DB2 / AS400 с SQL Server 2000, вызывающий блокировки
-
03-07-2019 - |
Вопрос
Каждое утро у нас есть процесс, который отправляет многочисленные запросы (~ 10000) к DB2 на AS400 / iSeries / i6 (как бы IBM это ни называла в наши дни). За последние 2 месяца операторы жаловались, что наш запрос блокирует пару файлов, не позволяя им завершить свою ночную обработку.Запросы очень упрощены, например
Select [FieldName] from OpenQuery('<LinkedServerName>', 'Select [FieldName] from [LibraryName].[FieldName] where [SomeField]=[SomeParameter]')
Я не эксперт по части iSeries, и мне было интересно, есть ли у кого-нибудь представление об эскалации блокировок с точки зрения AS400 / Db2.Было подтверждено, что идентификатор, вызывающий блокировку, является идентификатором, под которым мы зарегистрировали наш связанный сервер, и мы знаем, что он, скорее всего, наш, потому что [Библиотека] и [Имя файла] соответствуют запросу, который мы выдаем.
Это начало происходить совсем недавно.Возможно ли, что наши операторы select, которые заставляют AS400 усиливать блокировки?Проблема в том, что они не высвобождаются без ручного вмешательства.
Решение
Попробуйте добавить "ТОЛЬКО ДЛЯ ЧТЕНИЯ" к запросу, тогда он не будет блокировать записи при их извлечении.
Другие советы
Запись в файлы на стороне AS / 400 из рабочей программы RPG / COBOL / JPL вызовет блокировку файла (я думаю, по умолчанию).Задание не сможет получить эту блокировку, когда вы будете читать.Решение , которое мы использовали , было следующим ...не читайте файлы во время выполнения заданий.Мы создали большой лист расписания в Excel и разместили на нем все задания sql servers и as / 400 в временных интервалах с цветовой кодировкой важности и сервера.Таким образом, никаких конфликтов или устаревших файлов для извлечения также не будет.
Возможно, у вас есть контроль обязательств, вызывающий блокировку для повторяемого чтения.Проверьте ODBC-соединение SQL Server, связанное с <linkedServerName>
чтобы изменить элемент управления обязательствами.