База 1С в MS SQL и PostgreSQL: имя, сервер СУБД и файлы данных

· 11 мин

Содержание

Чтобы найти базу 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С, выделите базу и нажмите Изменить. В мастере будут указаны кластер серверов 1С и имя информационной базы.
  2. Либо откройте файл списка баз %APPDATA%\1C\1CEStart\ibases.v8i в блокноте и найдите строку Connect= у нужной базы.
  3. Из открытой базы строку подключения можно узнать в окне «О программе» (значок ? в правом верхнем углу).

Теперь вы знаете сервер 1С и имя базы в кластере. Дальше идём к кластеру.

Поиск сервера СУБД и имени базы в консоли кластера 1С

Консоль «Администрирование серверов 1С Предприятия» — самый быстрый способ. Она ставится вместе с сервером 1С и подключается к агенту сервера по порту 1540.

Порядок действий

  1. Запустите консоль администрирования. Если в списке нет сервера, добавьте его: правой кнопкой по Central 1C:Enterprise 8.3 servers → Создать → Центральный сервер 1С:Предприятия 8.3, укажите имя компьютера и порт 1540.
  2. Раскройте сервер → Кластеры → нужный кластер (обычно Локальный кластер, порт 1541).
  3. Если на кластере задан администратор, консоль спросит его логин и пароль.
  4. Откройте ветку Информационные базы и найдите базу по имени из строки Ref.
  5. Откройте свойства базы. Консоль запросит логин и пароль пользователя самой информационной базы с правами администратора.
  6. В свойствах смотрите поля Сервер баз данных, Тип СУБД, База данных, Пользователь сервера БД.

Пример того, что вы увидите:

Сервер баз данных:   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Каталог экземпляра по умолчанию
2016C:\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 включите в резервное копирование сервера: при его потере базы придётся регистрировать в кластере заново.
Перед переносом базы 1С на SQL
Выполнено: 0 / 5

Частые вопросы

Можно ли узнать имя базы SQL, не имея пароля администратора 1С?
Да, косвенно. Посмотрите список баз в СУБД с размерами и датой создания, а также откройте на чтение реестр кластера 1CV8Clst.lst: в нём рядом с именем информационной базы записано имя базы данных.
Почему в SQL Server база 1С занимает больше места, чем выгрузка .dt?
В .dt данные сжаты, а в СУБД есть индексы и журнал транзакций. При полной модели восстановления без бэкапов журнала .ldf растёт бесконечно — переведите базу в простую модель или настройте бэкап журнала.
Где хранится полнотекстовый поиск базы на сервере?
Не в SQL, а на сервере 1С: в каталоге srvinfo\reg_1541\<GUID базы>\1Cv8FTxt. При переносе базы индекс можно не копировать, он перестраивается.
Можно ли открыть базу из SQL напрямую, без сервера 1С?
Нет. Клиент 1С работает с SQL-базой только через кластер серверов 1С. Сами данные в таблицах хранятся в служебном формате, читать их запросами для учёта бессмысленно.
Как понять, какой GUID-каталог в srvinfo относится к нужной базе?
UUID информационной базы показывает rac infobase summary list. Каталог в reg_1541 называется этим же идентификатором.