Процес "ЗАВДАННЯ ЗАВДАНЬ" переймає базу даних для однокористувацького режиму. Що це?


13

Це дублікат запитання, яке я задав на stackoverflow , але мені порадили, що хтось тут може краще уявити, що відбувається.

У мене є спорадична проблема, коли оновлення SQL Server в однокористувацькому режимі, використовуючи .NET SqlConnection, якесь інше додаток якось входить у базу даних, в той час як SQL-код виконується, і завершує процес. SqlConnection не закривається і не утилізується жодним чином. Але якийсь інший додаток якимось чином підключається до бази даних, і це починає моє з'єднання.

Коли я запускаю sp_who, я міг побачити, що процес, який взяв під контроль базу даних, - це Command = "MANASER TASK".

Хто-небудь міг сказати мені, що це за процес, яка його мета і як у світі він може потрапити в базу даних, яка перебуває в однокористувацькому режимі, і є активний зв’язок?


Ви вимикаєте агент SQL під час цього процесу? Завдання з назвою "МЕНЕДЖЕР ЗАВДАННЯ" (з низькою кількістю шпід) - це внутрішні процеси.
Джон Сейгель

@JonSeigel ні, я ні. Ви хочете сказати, що агент SQL - це фактичний процес, який запускає ЗАВДАННЯ ЗАВДАНЬ?
Галети

Я не на 100% впевнений. Що я знаю, це те, що агент SQL підключається до екземпляра, коли він працює, і це може перешкодити вам увійти в систему, коли сервер перебуває в режимі однокористувача. У мене вчора була ця проблема, і зупинення агента SQL виправило її.
Джон Сейгель

2
Щоб було зрозуміло, це не той самий диспетчер завдань, який ви використовуєте в Windows для перегляду процесів та продуктивності системи.
Аарон Бертран

Відповіді:


10

Якщо ця проблема була сьогодні, Якщо ви не вимкнули AUTO_UPDATE_STATISTICS ASYNC OFF, ви не зможете ввести свою базу даних, ви можете вирішити це, поставивши свою базу даних в офлайн. Важливо знати, що вам потрібно встановити пріоритет своєї тупикової точки на високий, інакше ви потрапите в тупик із команди. Використовуйте наступні команди, щоб вийти з режиму користувача SINGLE

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET OFFLINE WITH ROLLBACK IMMEDIATE

Слідом за

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET ONLINE WITH ROLLBACK IMMEDIATE

Слідом за

SET DEADLOCK_PRIORITY HIGH

ALTER DATABASE [YourDBName] SET MULTI_USER WITH ROLLBACK IMMEDIATE

3
Дуже дякую за це. Однак я виявив, що крок OFFLINE / ONLINE не потрібен; SET MULTIUSER WITH ROLLBACK IMMEDIATEпрацював тільки сам по собі , коли SET DEADLOCK_PRIORITY HIGHбув зроблений перший
Росс Прессер

6

Я думаю, що таємниця нарешті вирішилася :

Перш ніж встановити базу даних на SINGLE_USER, перевірте, що для параметра AUTO_UPDATE_STATISTICS_ASYNC встановлено значення OFF. Якщо встановлено значення УВІМКНЕНО, фонова нитка, яка використовується для оновлення статистики, з'єднує базу даних, і ви не зможете отримати доступ до бази даних в режимі однокористування.


6

Зупиніть розширений слід подій "system_health". Він буде вказаний під

SQL Server Management Studio
-> [ServerName]
-> Management
-> Extended Events
-> Right-Click on 'System_health'
-> Hit Stop Session

Після того як блокер буде виправлено, перезапустіть сеанс.


Хоча інша відповідь пояснює, чому це відбувається, цей пояснює, як вирішити це.
Борис Калленс

Ідеальне рішення для мене. Працювало так, як очікувалося
Im88

0

Потрібно відключити агент SQL "до", запустивши режим одноразового використання. Оскільки агент завантаження захопить доступ для єдиного користувача. Не забудьте єдиний користувач - це ви не перший користувач / процес, який підключився.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.