Удаление информационной базы 1С в клиент-серверном варианте
Содержание
Удаление клиент-серверной базы 1С — это две операции, а не одна: сначала снять регистрацию информационной базы в кластере серверов 1С, затем удалить саму базу данных на SQL Server. Если сделать только второе, в консоли кластера останется «мёртвая» регистрация, которая будет выдавать ошибку при каждой попытке подключения.
Правильный порядок — консоль администрирования (или утилита rac) → затем SSMS. Так кластер корректно снимет блокировки, закроет регистрационные записи и не оставит висящих объектов. Ниже — каждый шаг с конкретными путями, командами и проверками.
Удаление базы данных необратимо. Перед началом снимите резервную копию SQL-базы (BACKUP DATABASE или через Задачи → Создать резервную копию в SSMS) и, при необходимости, выгрузку .dt. Восстановить случайно удалённую рабочую базу без бэкапа нельзя.
Что проверить перед удалением и как завершить сеансы
Удалять базу, в которой кто-то работает, нельзя — вы оборвёте пользователям текущие операции. Сначала убедитесь, что в базе никого нет.
В консоли администрирования серверов (оснастка Администрирование серверов 1С Предприятия) раскройте ветку кластера → Сеансы. В списке видны все активные сеансы с именами пользователей, приложением и временем последней активности. Если сеансы есть — попросите пользователей выйти или, в крайнем случае, завершите сеансы вручную (правой кнопкой → Удалить).
Через утилиту rac то же самое:
rac cluster list
rac session list --cluster=<cluster-uuid>
Первая команда покажет идентификатор кластера, вторая — список сеансов по этому кластеру.
Принудительное завершение сеанса обрывает незавершённую операцию пользователя (проведение документа, обмен, фоновое задание). Делайте это, только когда точно знаете, что база выводится из эксплуатации, и предупредили работающих.
Чтобы новые подключения не появлялись во время удаления, удобно заранее заблокировать вход в базу:
- 🔒 В свойствах информационной базы (правой кнопкой по базе →
Свойства) поставьте флагБлокировка начала сеансов включенаи задайте код разрешения. - ⏳ Дайте завершиться регламентным и фоновым заданиям — флаг
Блокировка регламентных заданийв тех же свойствах.
Полезный чек-лист перед необратимым шагом:
Снятие регистрации базы в кластере серверов 1С
Это ключевой шаг. Именно консоль кластера решает, что делать с базой данных на SQL Server, — она умеет либо оставить её, либо очистить, либо удалить целиком.
Порядок в консоли администрирования:
- Раскройте
Central server → <ваш кластер> → Информационные базы. - Выделите нужную базу и нажмите правой кнопкой →
Удалить. - В открывшемся окне выберите вариант обращения с базой данных.
Вариантов обращения с базой данных в окне удаления три:
| Вариант | Что происходит с SQL-базой | Когда выбирать |
|---|---|---|
| Оставить базу данных | Снимается только регистрация в кластере, сама SQL-база остаётся нетронутой | Переносите базу на другой сервер, хотите удалить SQL-базу вручную позже |
| Очистить базу данных | Регистрация снимается, таблицы в SQL-базе очищаются, сама база остаётся пустой | Нужна чистая пустая база под новую конфигурацию |
| Удалить базу данных | Регистрация снимается и SQL-база удаляется с сервера | Полное удаление, база больше не нужна |
💡 Если вы планируете разбираться с SQL-базой отдельно (например, через SSMS с проверкой зависимостей), выбирайте Оставить базу данных. Тогда кластер только снимет регистрацию, а дальше вы контролируете удаление вручную.
При выборе Удалить или Очистить консоль запросит имя и пароль администратора кластера, а также может запросить учётные данные SQL-сервера с правами на удаление базы.
То же действие утилитой rac. Сначала получите идентификатор базы:
rac infobase summary list --cluster=<cluster-uuid>
В выводе найдите нужную базу по полю name и запишите её infobase (uuid). Затем удалите:
rac infobase drop --cluster=<cluster-uuid> --infobase=<infobase-uuid> --drop-database
Ключи, определяющие судьбу SQL-базы:
--drop-database— снять регистрацию и удалить базу данных на SQL Server;--clear-database— снять регистрацию и очистить базу данных ;- без обоих ключей — снять только регистрацию, базу данных оставить.
Если не уверены в точном написании параметров вашей версии платформы — посмотрите справку командой rac help или rac infobase help, набор ключей там указан явно.
Удаление самой базы данных через SSMS
Этот шаг нужен, если в консоли кластера вы выбрали Оставить базу данных (или база была зарегистрирована давно и регистрацию уже сняли). Удаляем базу средствами SQL Server Management Studio.
Главная сложность — к базе могут быть открыты соединения, и тогда DROP DATABASE выдаст ошибку Cannot drop database because it is currently in use. Соединения нужно закрыть.
Через интерфейс SSMS:
- В обозревателе объектов разверните
Databases, найдите нужную базу. - Правой кнопкой →
Delete. - В окне удаления поставьте флаг
Close existing connections— он сбросит открытые сессии к базе. - Нажмите
OK.
Через T-SQL то же самое надёжнее сделать явно: сначала перевести базу в монопольный режим, откатив активные транзакции, затем удалить.
USE master;
GO
ALTER DATABASE [ИмяБазы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE [ИмяБазы];
GO
Разберём, что делает каждая строка:
USE master— переключаемся в системную базу, из контекста удаляемой базы её удалить нельзя.SET SINGLE_USER WITH ROLLBACK IMMEDIATE— переводит базу в однопользовательский режим и немедленно откатывает все активные транзакции, разрывая чужие подключения.DROP DATABASE— физически удаляет базу вместе с файлами данных (.mdf) и журнала (.ldf).
ROLLBACK IMMEDIATE обрывает все транзакции без сохранения. Это допустимо для выводимой из работы базы, но убедитесь, что в консоли кластера сеансов 1С уже нет.
💡 После DROP DATABASE файлы .mdf и .ldf с диска удаляются автоматически. Если база удалена, а файлы остались (бывает при ошибках доступа), уберите их вручную из каталога DATA экземпляра SQL Server — но только убедившись, что в SSMS базы уже нет в списке.
Права и владелец базы на SQL Server
1С подключается к SQL Server под учётной записью (SQL-логином), указанной при создании информационной базы. У этого логина есть сопоставленный пользователь внутри базы, а у базы — владелец (owner).
Что происходит с правами при удалении:
- 👤 Пользователь базы (
database user) удаляется вместе с базой автоматически — он существует только внутри неё. - 🔑 Серверный логин (
login) остаётся на SQL Server. Это глобальный объект уровня сервера, он не привязан к одной базе.
Если логин 1С использовался только для удалённой базы и больше нигде не нужен, его можно убрать:
USE master;
GO
DROP LOGIN [ИмяЛогина1С];
GO
Не удаляйте логин, под которым подключаются другие рабочие базы 1С, — вы оборвёте им доступ к SQL Server. Проверьте в Security → Logins → свойства логина → User Mapping, к каким базам он привязан, прежде чем удалять.
Отдельная ситуация — удаление базы под чужим владельцем. Если DROP DATABASE падает с ошибкой прав, убедитесь, что вы подключены к SQL Server под учётной записью с ролью sysadmin или с правом ALTER ANY DATABASE. Владельца при необходимости можно сменить командой ALTER AUTHORIZATION ON DATABASE::[ИмяБазы] TO [sa] перед удалением, но для простого удаления это обычно не требуется.
Чистка регистрационных записей кластера
Отдельная проблема возникает, когда базу данных удалили на SQL Server напрямую (через SSMS), минуя консоль кластера. Тогда в кластере остаётся регистрационная запись информационной базы, которая ссылается на несуществующую SQL-базу.
Признак такой «осиротевшей» записи: база видна в ветке Информационные базы, но при попытке открыть её свойства или подключиться выдаётся ошибка соединения с базой данных.
Как убрать запись:
- В консоли администрирования выделите эту базу в списке
Информационные базы. - Правой кнопкой →
Удалить. - Выберите
Оставить базу данных— удалять в SQL уже нечего, нужно снять только регистрацию.
Регистрационные данные кластера физически лежат в каталоге рабочего каталога кластера (srvinfo, путь задан при установке сервера) — там находятся служебные файлы со списком баз и настройками. Консоль и rac работают с этими файлами через агент сервера.
Не редактируйте служебные файлы каталога srvinfo вручную при запущенной службе сервера 1С. Правкой файла списка баз можно повредить реестр кластера целиком и обрушить все базы на этом сервере. Снятие регистрации всегда делайте штатно — через консоль или rac infobase drop.
Если запись не удаляется из-за «залипших» сеансов, завершите их в ветке Сеансы или командой rac session list / удалением сеанса, и повторите.
Автоматизация удаления через скрипт
Когда баз много (например, чистите тестовый контур), удаление удобно автоматизировать через rac. Скрипт делает ту же работу, что и консоль, но без ручных кликов.
Пример bat-файла для Windows: получаем uuid кластера, затем удаляем базу по имени вместе с SQL-базой.
@echo off
set RAC="C:\Program Files\1cv8\<версия>\bin\rac.exe"
set SRV=localhost:1545
rem --- идентификатор кластера ---
for /f "tokens=2 delims=: " %%i in ('%RAC% %SRV% cluster list ^| findstr /b "cluster"') do set CLUSTER=%%i
rem --- удаление базы вместе с SQL-базой ---
%RAC% %SRV% infobase ^
--cluster=%CLUSTER% ^
drop ^
--infobase=<infobase-uuid> ^
--cluster-user=<админ-кластера> ^
--cluster-pwd=<пароль> ^
--infobase-user=<админ-базы> ^
--infobase-pwd=<пароль> ^
--drop-database
Параметры по смыслу:
--cluster-user/--cluster-pwd— учётные данные администратора кластера (если заданы).--infobase-user/--infobase-pwd— учётные данные администратора самой информационной базы.--drop-database— удалить базу данных; замените на--clear-database, если нужно только очистить.
💡 rac подключается к серверу администрирования (по умолчанию порт 1545, его поднимает сервис ras). Если ras не запущен, команды rac работать не будут — проверьте службу администрирования перед запуском скрипта.
Для массового удаления оберните вызов в цикл по списку uuid, но каждую базу перед удалением всё равно проверяйте на активные сеансы — скрипт не спросит подтверждения и удалит всё молча.
Частые вопросы
Можно ли удалить базу 1С, просто удалив SQL-базу в SSMS?
Чем отличается «Очистить базу данных» от «Удалить базу данных»?
DROP DATABASE выдаёт «database is currently in use» — что делать?
ALTER DATABASE [Имя] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;, затем выполните DROP DATABASE. В интерфейсе SSMS тот же эффект даёт флаг «Close existing connections» в окне удаления.Удалится ли логин SQL, под которым работала 1С?
DROP LOGIN, предварительно проверив привязки в User Mapping.