Процесс «TASK MANAGER» принимает базу данных в однопользовательском режиме. Что это?


13

Это дубликат вопроса, который я задал на stackoverflow , но мне посоветовали, чтобы кто-то здесь мог лучше понять, что происходит.

У меня возникает спорадическая проблема: при обновлении SQL Server в однопользовательском режиме с использованием .NET SqlConnection какое-то другое приложение каким-то образом входит в базу данных во время выполнения кода SQL и выводит мой процесс из строя. SqlConnection не закрывается и не утилизируется. Но какое-то другое приложение каким-то образом оказывается подключенным к базе данных, и это разрывает мое соединение.

Когда я запустил sp_who, я увидел, что процесс, который взял на себя управление базой данных, это Command = "TASK MANAGER".

Кто-нибудь может сказать мне, что это за процесс, какова его цель и как в мире он может попасть в базу данных, которая находится в однопользовательском режиме и существует активное соединение?


Вы выключаете агент SQL во время этого процесса? Задачи с именем «TASK MANAGER» (с низким номером спида) являются внутренними процессами.
— Джон Зигель

@JonSeigel нет, я не сделал. Вы хотите сказать, что агент SQL является реальным процессом, который запускает TASK MANAGER?
— Галец

Я не уверен на 100%. Что я знаю, так это то, что агент SQL подключается к экземпляру во время его работы, и это может помешать вам войти в систему, когда сервер находится в однопользовательском режиме. У меня была эта проблема вчера, и остановка SQL Agent исправила ее.
— Джон Зигель

2
Просто чтобы прояснить, это не тот диспетчер задач, который вы используете в Windows для просмотра процессов и производительности системы.
— Аарон Бертран

Ответы:


10

Если бы вы не отключили AUTO_UPDATE_STATISTICS ASYNC сегодня, вы бы не смогли войти в свою базу данных, вы можете решить эту проблему, переведя вашу базу данных в автономный режим. Важно знать, что вам нужно установить высокий приоритет взаимоблокировки, иначе вы будете заблокированы из-за команды. Используйте следующие команды, чтобы выйти из ОДНОГО режима пользователя

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. Если установлено значение ON, фоновый поток, используемый для обновления статистики, подключается к базе данных, и вы не сможете получить доступ к базе данных в однопользовательском режиме.


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.