SQL0666 - SQL-запрос превышает указанный срок или лимит хранения - PullRequest
8 голосов
/ 25 февраля 2011

Периодически я получаю это сообщение об ошибке при обращении к базе данных DB2 с использованием строки соединения Odbc. Я попытался установить для параметра CommandTimeout объекта DbCommand несколько значений, но все равно получаю следующую ошибку.

SQL0666 - запрос SQL превышает заданный лимит времени или хранилища.

Есть ли хитрость, чтобы заставить это перестать ошибаться? Это очень странно, потому что один и тот же запрос иногда будет работать, а иногда и время ожидания. Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

14 голосов
/ 03 марта 2011

Я попытался установить для CommandTimeout объекта DbCommand несколько значений

Я установил DbCommand.CommandTimeout = 0, и это исправило ошибку времени ожидания

6 голосов
/ 04 июня 2012

Ответ Kite является правильным, однако я хотел поделиться своими наблюдениями / опытом после нахождения этого Вопроса и Ответа при поиске исправления к тому же самому сообщению об ошибке в рамках проекта SQL Server Integrated Services (SSIS).

Ранее сегодня один из моих пакетов служб SSIS начал получать эту ошибку на одном из своих шагов.После небольшого исследования я обнаружил, что мой пакет не работает на объекте DataReader Source, который подключается к базе данных iSeries через ODBC.Я не уверен, является ли это ошибкой ODBC или ошибкой в ​​драйверах iSeries / ODBC DB, но сообщение об ошибке было точно таким же.

Для меня действительно странным было то, что я мог просматриватьданные из связанной таблицы в MS Access, которая подключается через то же соединение ODBC, и я также мог без проблем выполнить операцию MAKE TABLE из того же набора данных в Access.После поиска сообщения об ошибке я нашел эти вопросы и ответы. Этот совет также работает и для пакетов служб SSIS.

Чтобы исправить это в службах SSIS, необходимо открыть пакет в конструкторе Microsoft BIDS.Затем откройте связанный Data Flow Task и выберите объект DataReader Source, для которого истекло время ожидания.

Ваш DataReader Source объект имеет свойство, которое также называется CommandTimeout.Установка 0 (вместо значения по умолчанию 30) должна решить проблему.Убедившись в том, что тайм-аут был причиной проблемы, я установил тайм-аут на 60 и повторно выполнил шаг.Таймаут в одну минуту решил проблему.

Стоит отметить, что может быть соблазнительно обновить ваши CommandTimeout значения для всех ваших DataReader Source объектов до 0.Это не рекомендуетсяВместо этого сохраните таймауты и увеличьте лимит до довольно щедрого значения.Удвойте их, как я, или дайте еще более щедрое значение времени ожидания 5-10 минут.

Свойства тайм-аута существуют по причине.Вы можете назначить своему приложению большие тайм-ауты, но если оно вообще не истечет, ваше приложение может зависнуть из-за вероятности того, что внутри ядра СУБД возникнет проблема, из-за которой шаг никогда не завершится!Это может быть маловероятно, но не невозможно.

Будьте осторожны и соответствующим образом настройте время ожидания.

...