База 1С в MS SQL и PostgreSQL: имя, сервер СУБД и файлы данных
Содержание
Чтобы найти базу 1С на SQL-сервере, сначала узнайте в консоли кластера три параметра информационной базы: Сервер баз данных, Тип СУБД и База данных. Потом по имени базы спросите у самой СУБД путь к файлам: в MS SQL это файлы .mdf и .ldf, в PostgreSQL — подкаталог base\<oid> внутри каталога данных.
Типичная ситуация: админ уволился, документации нет, на сервере три десятка баз со странными именами вроде bp_new2. Пользователи открывают «Бухгалтерию», а какая из баз SQL за ней стоит и на каком диске лежат её файлы — никто не знает. Ответ находится за 10–15 минут, если идти от клиента к кластеру и от кластера к СУБД.
Как устроено хранение базы 1С в клиент-серверном варианте
В файловом варианте всё лежит в одном файле 1Cv8.1CD. В клиент-серверном варианте данные разнесены по трём местам, и путаница обычно начинается именно здесь.
| Что | Где хранится | Кто за это отвечает |
|---|---|---|
| Таблицы с данными и конфигурацией | База данных на сервере СУБД (MS SQL Server, PostgreSQL, IBM Db2, Oracle) | СУБД |
| Регистрация информационной базы, ссылка на сервер СУБД и имя базы | Реестр кластера в каталоге srvinfo сервера 1С | Сервер 1С:Предприятия |
| Служебные данные: сеансовые данные, полнотекстовый индекс, кэши | Подкаталоги srvinfo\reg_1541\<GUID базы> | Сервер 1С:Предприятия |
| Список баз у пользователя | Файл ibases.v8i на компьютере клиента | Клиент 1С |
Отсюда главный вывод. На сервере 1С нет файла базы. Там хранится только запись «информационная база buh живёт на сервере СУБД SQL01 в базе buh_2019». Сами данные — на сервере СУБД, который может быть другим компьютером.
Имя информационной базы в кластере и имя базы данных в СУБД — это два разных имени. Они совпадают только если их так создали. В строке подключения клиента Srvr="srv1c";Ref="buh"; параметр Ref — имя в кластере, а не имя базы в SQL.
С чего начать поиск, если известна только база у пользователя
- Откройте окно запуска 1С, выделите базу и нажмите
Изменить. В мастере будут указаны кластер серверов 1С и имя информационной базы. - Либо откройте файл списка баз
%APPDATA%\1C\1CEStart\ibases.v8iв блокноте и найдите строкуConnect=у нужной базы. - Из открытой базы строку подключения можно узнать в окне «О программе» (значок
?в правом верхнем углу).
Теперь вы знаете сервер 1С и имя базы в кластере. Дальше идём к кластеру.
Поиск сервера СУБД и имени базы в консоли кластера 1С
Консоль «Администрирование серверов 1С Предприятия» — самый быстрый способ. Она ставится вместе с сервером 1С и подключается к агенту сервера по порту 1540.
Порядок действий
- Запустите консоль администрирования. Если в списке нет сервера, добавьте его: правой кнопкой по
Central 1C:Enterprise 8.3 servers→Создать→Центральный сервер 1С:Предприятия 8.3, укажите имя компьютера и порт 1540. - Раскройте сервер →
Кластеры→ нужный кластер (обычноЛокальный кластер, порт 1541). - Если на кластере задан администратор, консоль спросит его логин и пароль.
- Откройте ветку
Информационные базыи найдите базу по имени из строкиRef. - Откройте свойства базы. Консоль запросит логин и пароль пользователя самой информационной базы с правами администратора.
- В свойствах смотрите поля
Сервер баз данных,Тип СУБД,База данных,Пользователь сервера БД.
Пример того, что вы увидите:
Сервер баз данных: SQL01\MSSQL2019
Тип СУБД: MSSQLServer
База данных: buh_2019
Пользователь сервера БД: sa1c
Здесь SQL01\MSSQL2019 — компьютер SQL01 с именованным экземпляром MSSQL2019. Для PostgreSQL в поле обычно указан просто адрес сервера, иногда с портом, если он не стандартный (по умолчанию 5432).
Без пароля администратора информационной базы свойства не откроются. Если пароль неизвестен, переходите к способу через СУБД: по списку баз SQL и их размеру нужную обычно легко вычислить.
Если консоль не запускается
Частая история после обновления платформы: консоль ссылается на компонент от старой версии и выдаёт ошибку при открытии. Лечится перерегистрацией radmin.dll той версии, которая сейчас стоит на сервере. Командная строка от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\radmin.dll"
Вместо 8.3.24.1586 подставьте номер версии, которая установлена на сервере. Разрядность консоли и radmin.dll должна совпадать.
Путь к файлам базы 1С через запросы к MS SQL и PostgreSQL
Имя базы СУБД известно. Теперь узнаём, где физически лежат её файлы.
MS SQL Server
Подключитесь в SQL Server Management Studio к серверу из поля Сервер баз данных и выполните запрос:
SELECT DB_NAME(database_id) AS база,
type_desc AS тип,
physical_name AS путь,
size * 8 / 1024 AS размер_мб
FROM sys.master_files
WHERE DB_NAME(database_id) = 'buh_2019';
ROWS — файл данных .mdf (и дополнительные .ndf, если есть), LOG — журнал транзакций .ldf. Поле size хранится в страницах по 8 КБ, поэтому умножаем на 8 и делим на 1024, чтобы получить мегабайты.
Если имя базы не знаете совсем, уберите условие WHERE и посмотрите весь список. Базы 1С узнаются по набору таблиц: в каждой есть таблицы Config, Params, DBSchema, Files.
SELECT name FROM sys.databases
WHERE OBJECT_ID(QUOTENAME(name) + '.dbo.Config') IS NOT NULL;
Путь по умолчанию для новых баз зависит от версии SQL Server и имени экземпляра:
| Версия SQL Server | Каталог экземпляра по умолчанию |
|---|---|
| 2016 | C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA |
| 2017 | ...\MSSQL14.MSSQLSERVER\MSSQL\DATA |
| 2019 | ...\MSSQL15.MSSQLSERVER\MSSQL\DATA |
| 2022 | ...\MSSQL16.MSSQLSERVER\MSSQL\DATA |
Для именованного экземпляра вместо MSSQLSERVER стоит его имя. Но опираться на этот путь нельзя: при установке его часто меняют на отдельный диск, например D:\SQLData. Правду показывает только запрос.
PostgreSQL
В PostgreSQL у каждой базы нет «своего файла». Есть общий каталог данных кластера, а внутри — подкаталог с номером (oid) базы.
SHOW data_directory;
SELECT oid, datname,
pg_size_pretty(pg_database_size(datname)) AS размер
FROM pg_database
ORDER BY pg_database_size(datname) DESC;
Если data_directory вернул /var/lib/pgsql/15/data, а у базы buh oid равен 16402, то её таблицы лежат в /var/lib/pgsql/15/data/base/16402. Если для базы задано отдельное табличное пространство, проверьте его:
SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace;
Типичные каталоги данных:
- 🪟 Windows, сборка PostgreSQL для 1С:
C:\Program Files\PostgreSQL\<версия>\data, у сборок Postgres Pro — в своём каталоге установки. - 🐧 Debian и Ubuntu:
/var/lib/postgresql/<версия>/main. - 🐧 RHEL, CentOS, РЕД ОС и подобные:
/var/lib/pgsql/<версия>/data.
Реестр кластера и служба ras: где сервер 1С хранит список баз
Иногда нужно узнать, какие базы вообще зарегистрированы на сервере 1С, а консоль недоступна. Например, сервер 1С стоит на Linux, графической консоли под рукой нет.
Каталог srvinfo
Каталог кластера задаётся параметром -d в командной строке службы агента ragent. Чтобы увидеть его на Windows, откройте services.msc, найдите службу «Агент сервера 1С:Предприятия 8.3» и посмотрите поле «Исполняемый файл». Там будет что-то вроде:
"C:\Program Files\1cv8\8.3.24.1586\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Внутри srvinfo:
- 📁
reg_1541— каталог кластера с портом 1541 (у второго кластера будет свой каталог с другим номером); - 📄
reg_1541\1CV8Clst.lst— реестр кластера: список баз, их сервер СУБД и имя базы данных, рабочие серверы; - 📁
reg_1541\<GUID>— служебные данные конкретной базы, в том числе полнотекстовый индекс1Cv8FTxt.
Файл 1CV8Clst.lst текстовый, его можно открыть на чтение и поиском найти имя базы — рядом будут имя сервера СУБД и базы данных.
Не редактируйте 1CV8Clst.lst вручную и не удаляйте каталоги с GUID при работающей службе: можно потерять регистрацию баз в кластере.
Утилита rac через сервер ras
rac — консольный клиент администрирования. Он ходит не к агенту напрямую, а через сервер администрирования ras (по умолчанию порт 1545). Сначала запустите ras:
# Linux, из каталога платформы
/opt/1cv8/x86_64/8.3.24.1586/ras cluster --daemon
На Windows ras обычно регистрируют отдельной службой командой sc create с параметрами cluster --service --port=1545 localhost:1540. Затем:
rac cluster list
rac infobase summary list --cluster=<uuid кластера>
rac infobase info --cluster=<uuid кластера> --infobase=<uuid базы> \
--infobase-user=Администратор --infobase-pwd=пароль
Первая команда даёт UUID кластера, вторая — список баз с их UUID и именами, третья — полные свойства базы, включая сервер СУБД (db-server), тип СУБД (dbms) и имя базы данных (db-name). Если на кластере задан администратор, добавьте к командам --cluster-user и --cluster-pwd. Остальные параметры смотрите в rac help infobase.
Почему 1С не находит базу на SQL: разбор ошибок подключения
Когда путь найден, следующий вопрос обычно — почему база не открывается. Причины почти всегда сводятся к расхождению между тем, что записано в кластере, и тем, что есть в СУБД.
Важная деталь про то, кто подключается к СУБД
К SQL-серверу подключается не компьютер пользователя, а рабочий процесс rphost на сервере 1С. Поэтому проверять сеть и порт нужно с сервера 1С:
Test-NetConnection SQL01 -Port 1433
На Linux то же самое делается через nc -zv sql01 5432. Пользователь видит ошибку у себя, но причина — в связке «сервер 1С → сервер СУБД».
Особенности путей на сервере 1С под Linux
На Linux логика та же, меняются только каталоги и права.
- 📁 Платформа ставится в
/opt/1cv8/x86_64/<версия>/(у старых сборок —/opt/1C/v8.3/x86_64/). - 📁 Каталог кластера по умолчанию — домашний каталог пользователя службы:
/home/usr1cv8/.1cv8/1C/1cv8/. Внутри тот жеreg_1541и1CV8Clst.lst. - ⚙️ Если каталог переопределён, смотрите параметр
-dв unit-файле службы:systemctl catс именем службы сервера 1С покажет строку запускаragent. - 🔐 Владелец каталога — пользователь
usr1cv8. Если скопировать каталог под root и не вернуть владельца, служба не стартует или не видит базы.
Пример, как быстро найти реестр кластера, если путь неизвестен:
sudo find / -name "1CV8Clst.lst" 2>/dev/null
ps -ef | grep ragent
Вторая команда показывает строку запуска работающего агента вместе с параметром -d.
Пути внутри PostgreSQL на Linux описаны выше. Добавлю одно: при переносе каталога данных на другой диск правят параметр data_directory или путь в unit-файле PostgreSQL. Простое копирование каталога без остановки СУБД даёт битую копию.
Как переносить и копировать базу 1С на SQL без потери данных
Найденный путь часто ищут, чтобы скопировать базу. Здесь главная ловушка: копирование файлов .mdf/.ldf или каталога base при работающей СУБД не даёт рабочей копии.
| Способ | Когда подходит | Риски |
|---|---|---|
Полный бэкап средствами СУБД (BACKUP DATABASE в MS SQL, pg_dump в PostgreSQL) | Регулярное резервное копирование, перенос на другой сервер | Нет, если проверять восстановление |
Выгрузка .dt в Конфигураторе | Перенос между СУБД, передача базы подрядчику | Нужен монопольный доступ, на больших базах долго |
| Отсоединение базы (Detach) и копирование файлов в MS SQL | Перенос файлов на другой диск того же сервера | База недоступна на время операции |
| Копирование каталога данных PostgreSQL | Перенос всего кластера PostgreSQL | Только при остановленной службе PostgreSQL |
Отсоединение базы и остановка службы СУБД обрывают все сеансы 1С с этой базой. Делайте это в нерабочее время и заранее предупредите пользователей.
Пример полного бэкапа в MS SQL:
BACKUP DATABASE [buh_2019]
TO DISK = N'D:\Backup\buh_2019_full.bak'
WITH COMPRESSION, CHECKSUM, STATS = 10;
Для PostgreSQL:
pg_dump -U postgres -Fc -f /backup/buh.dump buh
После переноса базы SQL на новый сервер или под новым именем не забудьте вторую половину: в свойствах информационной базы в консоли кластера поменяйте Сервер баз данных и База данных. Иначе 1С продолжит ходить на старое место.
Что ещё защитить
- 🔑 Пароль пользователя СУБД хранится в реестре кластера. Доступ к каталогу
srvinfoдавайте только администраторам. - 🛡️ Не подключайте 1С к СУБД под
saилиpostgres. Заведите отдельного пользователя с правами только на свои базы. - 💾 Каталог
srvinfoвключите в резервное копирование сервера: при его потере базы придётся регистрировать в кластере заново.
Частые вопросы
Можно ли узнать имя базы SQL, не имея пароля администратора 1С?
1CV8Clst.lst: в нём рядом с именем информационной базы записано имя базы данных.Почему в SQL Server база 1С занимает больше места, чем выгрузка .dt?
.dt данные сжаты, а в СУБД есть индексы и журнал транзакций. При полной модели восстановления без бэкапов журнала .ldf растёт бесконечно — переведите базу в простую модель или настройте бэкап журнала.Где хранится полнотекстовый поиск базы на сервере?
srvinfo\reg_1541\<GUID базы>\1Cv8FTxt. При переносе базы индекс можно не копировать, он перестраивается.Можно ли открыть базу из SQL напрямую, без сервера 1С?
Как понять, какой GUID-каталог в srvinfo относится к нужной базе?
rac infobase summary list. Каталог в reg_1541 называется этим же идентификатором.