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


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.