При обращении за помощью с Db2 всегда задавайте в своем вопросе Db2-сервер версия и платформу (Z / OS, i-Series, Linux / Unix / Windows), потому что ответы могут зависеть от тех,факты.
sqlcode -911 с sqlerrmc 68 является тайм-аутом блокировки.Это не тупик.Ваша работа может быть не единственной, которая одновременно обращается к таблице.Функции мониторинга и административные представления позволяют вам видеть, какие блокировки существуют в любой момент времени (например, табличная функция SNAPLOCK и SNAP_GET_LOCK и многие другие).
Обратитесь в Центр знаний Db2 за подробностями из приведенных ниже советов, чтобы узнать себя.
Помещение таблицы в исходное состояние не зарегистрированной для вашей транзакции является высоким риском, особенно если вы новичок, потому что, если ваша транзакция не удалась, вы можете потерять всю таблицу.
ЕслиВы настаиваете на этом подходе, принимаете меры предосторожности и репетируете момент восстановления в случае, если ваши действия причинят ущерб.Тщательно проверяйте резервные копии и этапы восстановления.
При отключенной автоматической фиксации можно заблокировать таблицу в монопольном режиме, но это может привести к отключению службы на производстве, если целевая таблица является горячей таблицей.Можно также принудительно отключить приложения, которые удерживают блокировки, если у вас есть соответствующие права.
Если есть какие-либо другие выполняющиеся задания (например, не ваш собственный код), обращающиеся к таблице, пока вы пытаетесь изменить эту таблицу, когда -911 почти неизбежно.Ваш подход может быть неразумным.
Массовое удаление может быть достигнуто другими способами, это зависит от того, что вы хотите компромисс.Это часто задаваемый вопрос.Это не специфично для СУБД.Попробуйте провести дополнительные исследования, так как это широко обсуждаемая тема.
Альтернативные подходы для массового удаления включают в себя:
пакетирование зарегистрированных удалений, фиксация один раз на пакет, настраиваемаяразмер пакета (чтобы избежать ситуации полного журнала транзакций -964).Это требует программирования цикла, и вы должны учитывать 'установить текущее время ожидания, а не ждать', а также автоматически повторять попытку позже всех неудачных пакетов (например, пакетов, которые потерпели неудачу из-за блокировок).Этот подход приводит к медленному и постепенному удалению строк, но увеличивает параллелизм.Вы торгуете длинным медленным исполнением для минимального влияния на другие выполняющиеся задания.
Создайте идентичную теневую таблицу, в которую вы вставляете только те строки, которые хотите сохранить.Затем используйте усеченную таблицу ... непосредственно в целевой таблице (это не заблокированное действие) и, наконец, восстановите сохраненные строки из теневой таблицы в целевую таблицу.Менее безопасный вариант - экспортировать только те строки, которые вы хотите сохранить, а затем импортировать-заменить
в зависимости от Db2-лицензии и частоты очистки, перенести данные (или некоторые изданные) в таблицу с разбивкой по диапазонам, и использование detach может быть лучшим долгосрочным решением
Подробную информацию о приведенных выше предложениях см. в онлайновом центре знаний Db2.