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

13

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

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

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

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

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

Galets
источник
6

Остановите трассировку расширенных событий system_health. Это будет перечислено под

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

Как только блокировщик исправлен, перезапустите сеанс.

Рагу Наир
источник
Хотя другой ответ объясняет, почему это происходит, этот объясняет, как решить эту проблему.
Борис Калленс
Идеальное разрешение для меня. Это сработало, как и ожидалось
Im88
0

Вы должны отключить агент SQL перед запуском одноразового режима. По мере того как агент будет получать доступ от одного пользователя. Помните, что единственный пользователь - это не вы первый пользователь / процесс, подключившийся.

Ник винстанли
источник