Новое имя информационной базы на сервере 1С: кластер, MS SQL, PostgreSQL
Содержание
Переименовать базу в кластере 1С одной кнопкой нельзя: поле «Имя» в свойствах зарегистрированной информационной базы в консоли администрирования не редактируется, и у команды rac infobase update тоже нет параметра для смены имени. Рабочий способ — зарегистрировать ту же базу данных СУБД под новым именем, а старую регистрацию удалить с вариантом «Оставить базу данных без изменений». Данные при этом никуда не переезжают.
Частая путаница: «имя базы» в 1С — это три разные вещи. Имя в кластере (то, что пишут в строке подключения Ref=), имя базы данных на SQL Server или PostgreSQL и название строки в списке баз на компьютере пользователя. Меняются они независимо и разными способами. Всё ниже относится к платформе 8.3 и клиент-серверному варианту; файловой базе отведён отдельный раздел.
Какое имя меняем и что подготовить заранее
Сначала определите, что именно нужно поменять. От этого зависит, понадобится ли вообще окно простоя.
Перед сменой имени в кластере или в СУБД подготовьте:
- 🗄️ Свежую резервную копию. Средствами СУБД (
.bakилиpg_dump) либо выгрузку.dt. Без копии не начинайте: при ошибке в SQL-командах откатиться будет не на что. - 🔑 Логин и пароль администратора кластера (если кластер защищён) и администратора информационной базы. Без второго консоль не даст удалить регистрацию и поменять параметры СУБД.
- 📋 Параметры подключения к СУБД: тип СУБД, сервер, имя базы данных, пользователь и пароль. Перепишите их из свойств текущей базы.
- 🕒 Окно работ. Сама операция занимает минуты, но все сеансы будут завершены. Предупредите пользователей заранее.
- 📝 Список мест, где прописано старое имя: ярлыки, веб-публикации, скрипты обновления и бэкапа, обмены. Его удобно составить заранее, чтобы после работ ничего не забыть.
Способ 1. Перерегистрация базы в кластере под новым именем
Это и есть переименование базы в кластере 1С в привычном смысле: меняется значение Ref= в строке подключения. Работаем в консоли «Администрирование серверов 1С:Предприятия».
Шаг 1. Закройте вход в старую базу
- Раскройте ветку
Кластеры → <ваш кластер> → Информационные базы. - Откройте свойства базы, введите логин и пароль администратора ИБ.
- Включите «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена». В поле сообщения напишите, когда база вернётся.
- В ветке «Сеансы» этой базы завершите оставшиеся сеансы.
Завершение сеансов обрывает работу пользователей без сохранения. Делайте это в согласованное окно и после предупреждения.
Шаг 2. Зарегистрируйте базу под новым именем
- Щёлкните правой кнопкой по ветке «Информационные базы» и выберите создание новой базы.
- В поле «Имя» укажите новое имя. Латиница, цифры и подчёркивание — самый беспроблемный вариант.
- Тип СУБД, сервер баз данных, имя базы данных, пользователь и пароль — ровно те же, что у старой регистрации.
- Смещение дат оставьте таким, каким его задали при создании базы. Для MS SQL в типовых установках это 2000.
- Флажок «Создать базу данных в случае ее отсутствия» снимите. База данных уже существует, и 1С просто подключится к ней.
- Включите «Установить блокировку регламентных заданий» — снимете её после проверки.
Шаг 3. Проверьте вход и удалите старую регистрацию
- На своём компьютере добавьте в список баз подключение
Srvr="имя_сервера";Ref="новое_имя";и войдите. Данные должны быть на месте. - В консоли выберите старую базу и команду удаления.
- В окне удаления выберите «Оставить базу данных без изменений».
Не выбирайте «Удалить базу данных» и «Очистить базу данных»: обе команды уничтожат данные, на которые теперь смотрит новая регистрация.
- В свойствах новой базы снимите блокировку регламентных заданий.
Не оставляйте надолго две регистрации на одну базу данных. Блокировки данных кластер ведёт отдельно по каждой информационной базе, и если пользователи зайдут через оба имени сразу, они смогут одновременно править одни и те же документы.
Регистрация в кластере хранит не только имя. Если в старой базе были включены внешнее управление сеансами, профили безопасности или запрет выдачи лицензий сервером, повторите эти настройки в новой регистрации вручную.
Способ 2. Переименование через rac и ras: команды и скрипт
Когда баз много или работы идут ночью по расписанию, удобнее консольная утилита rac. Она работает через сервер администрирования ras.
Запуск ras
Если ras ещё не установлен службой, на Windows его регистрируют так (подставьте номер своей версии платформы):
sc create "1C:Enterprise 8.3 Remote Server" binPath= "\"C:\Program Files\1cv8\<версия>\bin\ras.exe\" cluster --service --port=1545 localhost:1540" start= auto
sc start "1C:Enterprise 8.3 Remote Server"
Порт 1545 — стандартный для ras, 1540 — порт агента сервера.
Скрипт перерегистрации
Пример для Linux-сервера. Логика та же, что в консоли: найти базу, зарегистрировать новое имя на ту же базу данных, удалить старую регистрацию без удаления данных.
#!/bin/bash
RAC=/opt/1cv8/x86_64/<версия>/rac
RAS=localhost:1545
OLD=buh_old # старое имя в кластере
NEW=buh # новое имя в кластере
IBUSER=Администратор # администратор информационной базы
IBPWD='пароль'
CL=$($RAC $RAS cluster list | awk -F': *' '/^cluster/{print $2; exit}')
IB=$($RAC $RAS infobase summary list --cluster=$CL \
| awk -F': *' -v n="$OLD" '/^infobase/{id=$2} /^name/ && $2==n {print id; exit}')
[ -z "$IB" ] && { echo "База $OLD не найдена"; exit 1; }
# новая регистрация на существующую БД (без --create-database)
$RAC $RAS infobase create --cluster=$CL --name=$NEW \
--dbms=PostgreSQL --db-server=localhost --db-name=buh_db \
--db-user=postgres --db-pwd='пароль_субд' \
--locale=ru --date-offset=0 --scheduled-jobs-deny=on || exit 1
# удаление старой регистрации; без --drop-database и --clear-database данные остаются
$RAC $RAS infobase drop --cluster=$CL --infobase=$IB \
--infobase-user="$IBUSER" --infobase-pwd="$IBPWD"
Для MS SQL укажите --dbms=MSSQLServer и смещение --date-offset=2000, если база создавалась с ним. Если кластер защищён, добавьте к командам --cluster-user и --cluster-pwd. Набор параметров зависит от версии платформы, сверьте его по справке rac help infobase.
Скрипт не завершает сеансы. Запускайте его после блокировки старой базы, иначе пользователи потеряют несохранённые изменения на шаге удаления регистрации.
Как переименовать базу данных на Microsoft SQL Server
Этот сценарий меняет имя самой базы данных, а имя для пользователей в кластере остаётся прежним. Нужен, например, когда на SQL Server навели порядок в именах или база называется по фамилии давно уволенного сотрудника.
Главная ловушка: рабочие процессы 1С держат открытые соединения с базой даже без активных пользователей. Поэтому сначала закройте вход и регламентные задания в кластере (как в шаге 1 выше), и только потом выполняйте SQL.
Выполните три команды одним пакетом в одном окне запроса SQL Server Management Studio:
USE master;
ALTER DATABASE [buh_old] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [buh_old] MODIFY NAME = [buh_new];
ALTER DATABASE [buh_new] SET MULTI_USER;
Если запускать строки по одной, единственное разрешённое соединение может успеть занять рабочий процесс 1С или агент SQL Server. Тогда переименование упадёт, а база останется в однопользовательском режиме.
Физические файлы .mdf и .ldf и их логические имена при этом не меняются. Работе 1С это не мешает. Если хочется порядка, логические имена меняют так:
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('buh_new');
ALTER DATABASE [buh_new] MODIFY FILE (NAME = N'buh_old', NEWNAME = N'buh_new');
ALTER DATABASE [buh_new] MODIFY FILE (NAME = N'buh_old_log', NEWNAME = N'buh_new_log');
Подставьте логические имена из результата первого запроса. Переименование физических файлов требует перевести базу в OFFLINE, поэтому без нужды его не делайте.
После SQL откройте в консоли свойства информационной базы и в поле «База данных» впишите новое имя. Через rac то же самое делает команда rac infobase update с параметром --db-name. Затем снимите блокировки и проверьте вход.
Особенности переименования в PostgreSQL
В PostgreSQL базу переименовывают командой ALTER DATABASE ... RENAME TO. Два ограничения: к переименуемой базе не должно быть ни одного подключения, а выполнять команду нужно, подключившись к другой базе, например к postgres. Право есть у владельца базы или суперпользователя.
Подключитесь: psql -U postgres -d postgres. Затем:
-- запретить новые подключения, чтобы процессы 1С не переподключились
ALTER DATABASE buh_old ALLOW_CONNECTIONS false;
-- завершить текущие подключения к базе
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh_old' AND pid <> pg_backend_pid();
ALTER DATABASE buh_old RENAME TO buh_new;
ALTER DATABASE buh_new ALLOW_CONNECTIONS true;
Без первой команды рабочий процесс 1С нередко успевает открыть новое соединение между завершением подключений и переименованием.
Что ещё учесть в PostgreSQL:
- 🔤 Регистр. Имена без кавычек PostgreSQL приводит к нижнему регистру. Называйте базы строчными латинскими буквами, чтобы не писать кавычки в каждой команде.
- 🛡️ pg_hba.conf. Если в нём есть строки с конкретным именем базы, поправьте их и перечитайте конфигурацию:
SELECT pg_reload_conf();. - 💾 Резервное копирование. Скрипты с
pg_dump -d buh_oldпосле переименования начнут падать. Поменяйте имя и в них.
Дальше — как и для SQL Server: новое имя в поле «База данных» в свойствах информационной базы в кластере, снятие блокировок, проверка входа.
Остановка службы и папка srvinfo: когда это нужно
Иногда советуют остановить службу кластера, переименовать папку базы и поправить настройки кластера вручную. Для переименования это лишнее и опасно.
Как устроено хранение. Каталог кластера лежит в srvinfo\reg_1541 (на Windows обычно C:\Program Files\1cv8\srvinfo\, на Linux в домашнем каталоге пользователя usr1cv8). Список баз хранится в файле 1CV8Clst.lst, а служебные папки баз названы по их идентификатору, а не по имени. Переименование такой папки ничего не даст, а кластер может перестать видеть базу.
Остановка службы агента сервера 1С оправдана в двух случаях:
- Нужно восстановить
1CV8Clst.lstиз резервной копии после неудачной правки реестра кластера. - Процессы 1С держат соединения с СУБД и не отпускают их даже после блокировки и завершения сеансов.
Остановка службы обрывает сеансы во всех базах этого сервера, а не только в переименовываемой. Делайте это вне рабочего времени.
Порядок такой. Найдите службу в services.msc по словам «1C:Enterprise» и «Server Agent» и остановьте её. Выполните нужное действие и запустите службу. На Linux служба называется по номеру версии платформы, имя видно в выводе systemctl list-units | grep 1c. Править 1CV8Clst.lst руками не нужно: все изменения регистраций делаются через консоль или rac.
Файловая база: переименование папки и записи в списке
У файловой базы нет кластера, поэтому и «имени в кластере» нет. Есть папка с файлом 1Cv8.1CD и строка в списке баз.
Чтобы поменять название в списке, выделите базу в окне запуска, нажмите «Изменить» и впишите новое имя. Это меняет запись только на текущем компьютере.
Чтобы переименовать папку:
- Убедитесь, что в базе никто не работает, включая Конфигуратор и фоновые задания по расписанию Windows.
- Переименуйте папку в проводнике. Если Windows пишет, что файл занят, в базе ещё есть открытое соединение.
- В окне запуска откройте «Изменить» и укажите новый путь к каталогу.
- Повторите шаг 3 на всех компьютерах, где база добавлена в список, или раздайте общий список заново.
Если файловая база опубликована на веб-сервере, путь к ней прописан в default.vrd публикации. Поправьте его или переопубликуйте базу.
Что перенастроить после смены имени базы
Новое имя в кластере сразу ломает всё, что подключалось по старому. Пройдите по списку:
| Где прописано имя | Что поменять |
|---|---|
| Список баз пользователей | Строка Connect=Srvr="сервер";Ref="новое_имя"; в файле %APPDATA%\1C\1CEStart\ibases.v8i или в общем списке, заданном в 1cestart.cfg |
| Веб-публикация | Параметр ib в default.vrd: Srvr="сервер";Ref="новое_имя";. Надёжнее переопубликовать базу |
| Пакетный запуск, скрипты обновления | Ключ /S "сервер\новое_имя" в командах 1cv8.exe |
| COM-соединения и внешние обработки | Строки подключения V83.COMConnector с Ref= |
| Обмены данными | Настройки синхронизации в других базах, которые подключаются к этой напрямую |
| Обслуживание СУБД | Планы обслуживания SQL Server, задания pg_dump — если меняли имя базы данных |
Ещё два момента.
Вопрос о перемещении базы. Конфигурации на Библиотеке стандартных подсистем замечают смену строки подключения. При первом входе администратор увидит вопрос, перемещена база или это копия. Ответьте, что база перемещена. Иначе программа сочтёт её копией и заблокирует работу с внешними ресурсами: обмены, загрузку курсов, отправку почты по расписанию.
Кэш клиентов. Для новой регистрации на компьютерах пользователей создастся новый кэш. Старые папки кэша в %APPDATA%\1C\1cv8\ можно удалить, когда все перейдут на новое имя.
Ошибки при переименовании и как их исправить
Ещё одна ошибка без сообщения: база после переименования работает, но регламентные задания молчат. Проверьте, что сняли блокировку регламентных заданий в новой регистрации, и ответили «база перемещена» на вопрос конфигурации.
Частые вопросы
Нужно ли заново активировать лицензии после переименования базы?
Сохранятся ли пользователи, права и история изменений?
Можно ли сразу занять старое имя другой базой?
Можно ли переименовать базу без простоя?
Как перенести базу на другой сервер 1С и одновременно сменить имя?
.dt или сделайте копию средствами СУБД, создайте на новом сервере базу с нужным именем и загрузите данные. Перерегистрация здесь не поможет.