Невозможно убить задание сервера SQL, статус остается убитым / откат
Я не могу убить некоторые задания агента SQL Server. Состояние задачи продолжает выполняться, а команда остается в состоянии KILLED/ROLLBACK. Задание выполняет запросы к системе PI OSI через связанный сервер OLEDB и Oracle. До сих пор я нашел единственный способ убить эти задания - перезапустить SQL-сервер (не предпочтительный метод).
5 ответов
По-видимому, некоторые люди имеют эту проблему, используя openquery через связанный сервер, который не является SQL Server. Я публикую обходной путь, который BReuter разместил в статье выше:
отправленный BReuter 30.01.2007 в 14:21 * Я испытал точное поведение и нашел комбинацию программного обеспечения, которое стабилизировало нашу среду.
Было три ключевых ингредиента, которые я нашел:
1) Убедитесь, что у вас нет ЛЮБЫХ связанных серверов, использующих Microsoft OLEDB Provider для Oracle, вместо этого используйте Oracle Provider for Oracle(версия 9.2.0.4 - это то, что у меня в работе).
2) Не позволяйте связанному серверу работать "в процессе". Это потребовало некоторых исследований, но можно запустить связанный сервер из пространства памяти SQL, следуя приведенным ниже инструкциям.
3) Я использую SQL 2005 SP1 на W2K3, но я считаю, что ключ OLEDB - это ключ, а не версия ОС или БД. Параметры безопасности по умолчанию слишком жесткие, чтобы запустить внепроцессный поставщик Oracle OLEDB (OraOLEDB). Кроме того, настройки по умолчанию для MS DTC не разрешают сетевую связь.
- Панель управления-> Администрирование-> Службы компонентов
Drill to Component Services-> Компьютеры
а. Щелкните правой кнопкой мыши Мой компьютер-> Свойства
Вкладка MSDTC -> Кнопка настройки безопасности (скриншот ниже)
а. Доступ по сети DTC - проверено.
б. Разрешить входящий / исходящий - проверено.
с. Аутентификация не требуется - это имитирует настройки безопасности Windows 2000.
д. Включить транзакции XA - тип транзакции, реализованный поставщиком OraOLEDB.
Drill to Component Services-> Компьютеры-> Мой компьютер-> Конфигурация DCOM
а. Щелкните правой кнопкой мыши MSDAINITALIZE-> Свойства.
Вкладка "Безопасность" (скриншот ниже)
а. Права доступа -> Настройка.
б. Нажмите кнопку "Разрешения на доступ".
с. Дайте учетной записи службы SQL Server разрешение "Локальный доступ".
д. Повторите для "Запуск и активация".*
Если это большие транзакции, возможно, сервер все еще выполняет откат, что может занять некоторое время.
Эта страница http://www.jaygeiger.com/index.php/2015/03/03/how-to-kill-a-frozen-linked-sql-server-connection/ предоставляет обходной путь. Он заключается в ручном прекращении TCP-соединения. Это не идеальное решение, но это лучшее, что я знаю. Это лучше, чем перезапускать весь SQL Server.
Btw. Я нашел эту ссылку на https://connect.microsoft.com/SQLServer/feedback/details/187192/openquery-to-linked-server-hangs-leaving-spid-with-open-tran-that-cannot-be-killed-then-templog-ldf-grows-without-limit-requires-sql-server-restart-on-production-servers страница, упомянутая в сообщении Ахда
Транзакции, которые застряли в KILLED/ROLLBACK, можно отменить, убив транзакции на локальном сервере. Если запрос кросс-серверный и вы не хотите ждать отката, вам нужно перейти на удаленный сервер и завершить транзакцию, а также уничтожить ее на локальном сервере.
Это относится к любой системе баз данных.
Для меня уничтожение внешних ресурсов OLEDB не сработало, и мне, к сожалению, пришлось перезапустить экземпляр SQL-сервера, чтобы решить эту проблему всегда
В моих случаях он выбирается с помощью OPENQUERY из серверов, связанных с Oracle, или списков SharePoint, в которых просто есть простая ошибка, такая как неверный пароль, и она не может устранить ошибку и возвращается и никогда не возвращается, пока вы не перезапустите службу.