MSSQL Error 14120: Could not drop the distribution database because it is in use
- Ошибка
Msg 14120, Level 16, State 1: Could not drop the distribution database 'distribution' because it is in use. - Невозможно удалить базу
distributionни через SSMS, ни через T-SQL командуDROP DATABASE. - Сбои при попытке перенастройки или полного удаления топологии SQL Server Replication.
- Зависшие сессии процессов репликации, удерживающие эксклюзивные блокировки на системных объектах.
1. Поиск сессий, удерживающих базу distribution
SELECT session_id, host_name, program_name, login_name
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('distribution');2. Остановка службы SQL Server Agent и завершение процессов
-- Перевод базы дистрибуции в режим Single User с немедленным сбросом сессий
ALTER DATABASE [distribution] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO3. Принудительное удаление публикаций и подписок
-- Выполняется на базе-источнике (Publisher)
EXEC sp_removedbreplstatus @dbname = 'your_1c_db';
EXEC sp_cleanupdbreplication;4. Принудительное удаление роли дистрибьютора
-- Выполняется на сервере-дистрибьюторе (Distributor)
EXEC sp_dropdistributor @no_checks = 1, @ignore_distributor = 1;5. Окончательное удаление базы distribution
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'distribution')
BEGIN
ALTER DATABASE [distribution] SET OFFLINE;
DROP DATABASE [distribution];
END Частые вопросы (FAQ)
Почему обычная команда DROP DATABASE distribution завершается ошибкой 14120?
База distribution защищена ядром СУБД на системном уровне. Она не может быть удалена обычным DROP DATABASE, пока зарегистрирована как системное хранилище репликации через sp_adddistributor.
Нужно ли останавливать агент SQL Server перед удалением distribution?
Да, остановка SQL Server Agent или отключение заданий категорий 'REPL-*' предотвращает повторные автоматические попытки агентов подключиться к базе во время ее удаления.
Что делать, если sp_dropdistributor выдает ошибку о существующих публикациях?
Используйте расширенный флаг игнорирования проверок: EXEC sp_dropdistributor @no_checks = 1, @ignore_distributor = 1.
Повлияет ли удаление базы distribution на рабочую базу 1С?
Нет, данные в рабочей базе останутся нетронутыми, однако остановится вся репликация данных на подчиненные узлы (РИБ/отчетные сервера).