Удаление информационной базы 1С вместе с базой данных на MS SQL
Содержание
Правильный порядок такой: сначала удалить информационную базу из кластера 1С в консоли администрирования, затем удалить базу данных на SQL Server — либо прямо из консоли (вариант «Удалить базу данных»), либо командой DROP DATABASE в SQL Server Management Studio. Если сделать наоборот, в кластере останется «висящая» база, к которой пользователи будут пытаться подключиться и получать ошибку.
Порядок одинаков для клиент-серверной 1С 8.3 на любой версии MS SQL Server: от 2016 до 2022 меняются только детали интерфейса SSMS.
1. Подготовка: копия и проверка, что база точно не нужна
Удаление необратимо. Восстановить базу потом можно только из копии, поэтому до любых действий сделайте две вещи: убедитесь, что удаляете нужную базу, и снимите копию.
Сверьте имя базы в 1С и в SQL
Имя информационной базы в кластере и имя базы данных на SQL Server могут не совпадать. В кластере база называется, например, buh_2023, а в SQL — bp30_old. Посмотреть соответствие можно в свойствах базы в консоли кластера: поле «База данных» и «Сервер баз данных».
📌 Что проверить перед удалением:
- 🔎 в свойствах базы — сервер СУБД и точное имя базы данных;
- 👥 нет ли активных сеансов (ветка «Сеансы» у базы в консоли);
- 🔗 не ссылаются ли на базу обмены, веб-публикации и внешние отчёты;
- 🗓 не настроены ли на неё задания SQL Server Agent и планы обслуживания.
Сделайте копию двумя способами
Без копии базу не удаляйте, даже если она «точно старая». Чаще всего «старая» база оказывается единственным источником данных за закрытый период.
- Выгрузка
.dt— в конфигураторе:Администрирование → Выгрузить информационную базу. Файл не зависит от СУБД и разворачивается на любом сервере 1С. - Копия на стороне SQL — полный бэкап средствами СУБД:
BACKUP DATABASE [bp30_old]
TO DISK = N'D:\Backup\bp30_old_before_drop.bak'
WITH COPY_ONLY, CHECKSUM, STATS = 10;
Параметр COPY_ONLY не ломает цепочку регулярных бэкапов, если на базе настроено резервное копирование
с журналами.
Выгрузку .dt для больших баз (сотни гигабайт) делать долго. Если база нужна «на всякий случай», хватит SQL-бэкапа: его можно восстановить и снова зарегистрировать в кластере.
2. Удаление информационной базы из кластера 1С
Этот шаг убирает базу из списка кластера. Пока база в нём есть, рабочие процессы могут держать к ней соединения с SQL Server.
Заблокируйте вход и регламентные задания
Откройте Консоль администрирования серверов 1С:Предприятия, раскройте Центральные серверы → <сервер> → Кластеры → <кластер> → Информационные базы и откройте свойства нужной базы. Включите флажки «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена», сохраните.
Если в базе кто-то работает, после завершения сеансов пользователи потеряют несохранённые данные. Предупредите их заранее или делайте это вне рабочего времени.
Затем в ветке «Сеансы» этой базы удалите оставшиеся сеансы, а в ветке «Соединения» убедитесь, что соединений не осталось.
Удалите базу и выберите, что сделать с данными
Щёлкните по базе правой кнопкой и выберите Удалить. Консоль спросит логин и пароль администратора информационной базы (если пользователи в базе заведены) и предложит один из трёх вариантов:
| Вариант | Что произойдёт на SQL Server | Когда выбирать |
|---|---|---|
| Оставить базу данных без изменений | База данных остаётся, удаляется только регистрация в кластере | Нужно перенести базу на другой сервер 1С или оставить в SQL «в архиве» |
| Очистить базу данных | Таблицы 1С удаляются, пустая база данных остаётся | Редко; например, если под этим именем база будет создана заново |
| Удалить базу данных | База данных удаляется командой на сервере СУБД | Базу нужно убрать полностью |
Вариант «Удалить базу данных» срабатывает, только если у пользователя СУБД, указанного в свойствах информационной базы, есть право удалять базы. Если прав нет, регистрация в кластере удалится, а база данных на SQL останется — её придётся удалить вручную (раздел 3).
Если вы не уверены в правах пользователя СУБД, надёжнее выбрать «Оставить базу данных без изменений» и удалить базу данных в SSMS: так вы видите результат каждой команды.
3. Удаление базы данных в SQL Server Management Studio
Подключитесь к экземпляру SQL Server в SSMS под учётной записью с правами sysadmin или владельца базы.
Через интерфейс SSMS
- В «Обозревателе объектов» раскройте
Базы данных. - Правой кнопкой по базе →
Удалить(Delete). - В окне отметьте «Закрыть существующие соединения» (Close existing connections).
- Флажок про удаление сведений журнала резервного копирования и восстановления отметьте, если история бэкапов этой базы в
msdbбольше не нужна. - Нажмите
ОК.
Флажок закрытия соединений — главное, о чём забывают. Без него SSMS вернёт ошибку, если к базе подключён хоть один процесс, включая открытое окно запроса в той же SSMS.
Перейдите в контекст master
Удалить базу, находясь «внутри» неё, нельзя. Если в окне запроса выбрана удаляемая база, ваша же сессия заблокирует удаление. Поэтому любой скрипт начинайте с переключения контекста:
USE master;
GO
Проверить, кто ещё подключён к базе:
SELECT session_id, login_name, host_name, program_name
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID(N'bp30_old');
В колонке program_name у соединений рабочих процессов 1С обычно видно 1CV83 Server. Если они есть, значит, база ещё зарегистрирована в кластере или рабочий процесс не отпустил соединение — вернитесь к разделу 2.
Удалите базу командой
USE master;
GO
ALTER DATABASE [bp30_old] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE [bp30_old];
GO
SET SINGLE_USER WITH ROLLBACK IMMEDIATE разрывает все чужие соединения и откатывает их незавершённые транзакции. После этого DROP DATABASE удаляет базу из каталога SQL Server и её файлы с диска.
ROLLBACK IMMEDIATE обрывает соединения без предупреждения. Проверьте имя базы в квадратных скобках дважды: SQL Server не переспрашивает.
4. Проверка и ручная очистка файлов данных
Обычно DROP DATABASE сам удаляет файлы .mdf, .ndf и .ldf. Но есть случаи, когда файлы остаются на диске и занимают место:
- 📴 база была переведена в состояние
OFFLINEперед удалением — SQL Server удаляет её из каталога, но файлы не трогает; - 🔌 базу ранее отсоединили (Detach), а не удалили;
- 🗂 у базы были дополнительные файлы на другом диске, о которых забыли.
Чтобы знать, где искать, запишите пути к файлам до удаления:
SELECT name, physical_name, size * 8 / 1024 AS size_mb
FROM sys.master_files
WHERE database_id = DB_ID(N'bp30_old');
После DROP пройдите по этим путям. Если файлы остались, удалите их вручную в проводнике. Если Windows пишет, что файл занят, проверьте, не подключена ли база под другим именем: найдите путь в той же sys.master_files по всем базам.
Перевод в OFFLINE перед удалением — частый «безопасный» приём, который как раз оставляет мусор. Если базу нужно убрать полностью, переводите её в SINGLE_USER, а не в OFFLINE.
5. Хвосты на сервере 1С, в SQL и на клиентах
После удаления базы из кластера и из SQL остаются следы в нескольких местах. Они не мешают работе, но засоряют сервер и сбивают с толку.
Каталог сеансовых данных на сервере 1С
В каталоге кластера (по умолчанию C:\Program Files\1cv8\srvinfo\reg_1541) у каждой базы есть папка, названная её идентификатором (GUID). В ней лежат журнал регистрации и служебные данные. После удаления базы папка может остаться.
Идентификатор удалённой базы удобно записать заранее — он виден в свойствах базы или в выводе rac. Папку с таким GUID можно удалить. Файл реестра кластера 1CV8Clst.lst руками не правьте: консоль и rac сами убирают из него запись о базе.
Не трогайте папки с GUID, которые не можете сопоставить с удалённой базой. Там лежат журналы регистрации живых баз.
Что остаётся в SQL Server
- 🔑 Логин SQL. Если под базу создавался отдельный логин, удалите его в
Безопасность → Имена входа, но только убедившись, что им не пользуются другие базы 1С. - 🗓 Задания Agent и планы обслуживания. Задание, которое бэкапит удалённую базу, начнёт падать с ошибкой. Уберите базу из плана.
- 📜 История бэкапов в msdb. Если не отмечали флажок в SSMS, очистите её процедурой
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'bp30_old';.
Список баз у пользователей
У клиентов база останется в окне запуска. Список хранится в файле %APPDATA%\1C\1CEStart\ibases.v8i, а кэш конкретной базы — в папках с GUID внутри %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8. Проще всего удалить базу из списка
кнопкой «Удалить» в окне запуска, а если список раздаётся централизованно через общий файл .v8i, убрать её оттуда.
6. Удаление базы 1С скриптом: rac и PowerShell
Когда нужно убрать десяток старых баз (например, копии для тестов), руками долго. Удобнее связка утилиты rac и PowerShell.
Удаление из кластера через rac
rac работает через сервер администрирования ras. Если он не запущен, стартуйте его на сервере 1С (по умолчанию слушает порт 1545):
"C:\Program Files\1cv8\8.3.24.1586\bin\ras.exe" cluster --port=1545 localhost:1540
Номер версии в пути подставьте свой. Далее получите идентификаторы кластера и базы:
rac localhost:1545 cluster list
rac localhost:1545 infobase summary list --cluster=<uuid кластера>
И удалите базу вместе с базой данных на SQL:
rac localhost:1545 infobase --cluster=<uuid кластера> drop --infobase=<uuid базы> --infobase-user=Администратор --infobase-pwd=<пароль> --drop-database
Вместо --drop-database можно указать --clear-database (очистить) или не указывать ничего — тогда база данных на SQL останется. Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Полный список параметров — в rac help infobase.
Удаление в SQL через PowerShell
Для SQL-части удобен модуль SqlServer (ставится командой Install-Module SqlServer):
$server = "SQL01"
$bases = @("bp30_test1", "bp30_test2", "zup_copy")
foreach ($db in $bases) {
$query = @"
IF DB_ID(N'$db') IS NOT NULL
BEGIN
ALTER DATABASE [$db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [$db];
END
"@
Invoke-Sqlcmd -ServerInstance $server -Database master -Query $query -TrustServerCertificate
Write-Host "Обработана база: $db"
}
Скрипт подключается сразу к master, поэтому проблема контекста не возникает. Проверка DB_ID(...) IS NOT NULL не даёт скрипту упасть, если базу уже удалили. Параметр -TrustServerCertificate есть в модуле SqlServer версии 22 и выше; в более старых версиях его уберите.
Массовое удаление — самый частый способ стереть не ту базу. Перед запуском выведите список $bases на экран и сверьте его с консолью кластера.
7. Ошибки при удалении базы 1С с SQL Server
USE master, проверьте sys.dm_exec_sessions и выполните ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE перед DROP.Ещё одна неочевидная ситуация — база «возвращается». Обычно это значит, что её восстанавливает задание SQL Server Agent или скрипт развёртывания тестовых копий. Проверьте список заданий Agent и планировщик Windows на сервере.
Частые вопросы
Можно ли восстановить базу 1С после DROP DATABASE?
.bak или выгрузки .dt. Корзины у SQL Server нет.Что быстрее восстановить при ошибке — .bak или .dt?
.bak: восстановление идёт средствами SQL Server, без пересоздания таблиц через 1С. .dt удобнее, когда базу переносят на другой сервер СУБД или в файловый вариант.Освободит ли удаление базы клиентскую лицензию?
Нужно ли перезапускать службу сервера 1С после удаления?
rac удаляют базу без перезапуска. Перезапуск службы оборвёт сеансы во всех остальных базах кластера.