Как найти, на каком сервере и в каких файлах лежит серверная база 1С

· 9 мин

Содержание

Серверная база 1С хранится не в папке 1С, а внутри СУБД. Для MS SQL это два файла: данные *.mdf и журнал транзакций *.ldf. По умолчанию они лежат в C:\Program Files\Microsoft SQL Server\MSSQL<номер>.MSSQLSERVER\MSSQL\DATA\. Точный путь для конкретной базы показывает запрос SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('имя_базы').

Найти базу 1С на SQL можно тремя путями. Через консоль кластера — если нужно узнать сервер СУБД и имя базы. Через SQL Server Management Studio — если нужен путь к файлам. Через PowerShell — если доступа к SQL нет, а диск сервера есть. Чаще всего проходят все три шага по порядку: кластер 1С → сервер СУБД → файлы на диске.

Файловая и серверная база: где что лежит

Сначала убедитесь, что база действительно серверная. Откройте 1С и вызовите Главное меню (☰) → Справка → О программе. В строке «Информационная база» будет строка соединения.

Вид строки соединенияТип базыГде данные
File="D:\Bases\Buh";ФайловаяОдин файл 1Cv8.1CD в указанной папке
Srvr="srv1c";Ref="buh";Клиент-сервернаяВ СУБД, которую указали при создании базы в кластере

У файловой базы всё просто: путь виден сразу, в папке лежит 1Cv8.1CD. У серверной базы в строке только имя сервера 1С (Srvr) и имя базы в кластере (Ref). Ни сервера SQL, ни путей к файлам здесь нет.

Из кода ту же строку возвращает функция СтрокаСоединенияИнформационнойБазы(). Удобно, если окно «О программе» закрыто правами.

Схема хранения в клиент-серверном варианте такая:

  • 🖥️ сервер 1С — хранит реестр баз кластера и сеансовые данные в каталоге srvinfo;
  • 🗄️ сервер СУБД — хранит сами таблицы базы (MS SQL, PostgreSQL, IBM Db2 или Oracle);
  • 💻 клиент — знает только Srvr и Ref из списка баз.

Сервер 1С и сервер СУБД часто стоят на одной машине, но это не обязательно. Поэтому «найти базу» означает сначала узнать, куда смотрит кластер.

Имя базы в кластере и имя базы на SQL — это разные вещи

Типичная путаница: в списке баз написано Ref="buh", а в SQL Server базы buh нет. Имя в кластере и имя базы данных в СУБД задаются отдельно и могут не совпадать.

Через консоль администрирования серверов 1С

  1. Запустите «Администрирование серверов 1С Предприятия» (оснастка 1CV8 Servers.msc).
  2. Раскройте Центральные серверы 1С:Предприятия → имя сервера → Кластеры → Локальный кластер → Информационные базы.
  3. Откройте свойства нужной базы. Если в базе есть пользователи, консоль запросит логин и пароль администратора базы.
  4. Посмотрите поля:
    • «Сервер баз данных» — имя или адрес сервера СУБД, иногда с экземпляром (sql01\SQL2019);
    • «Тип СУБД» — MSSQLServer, PostgreSQL, IBMDB2 или OracleDatabase;
    • «База данных» — имя базы внутри СУБД.

Именно значение «База данных» ищите потом в SQL. Логин и пароль пользователя СУБД там тоже есть, но пароль скрыт.

Если консоль не открывается с ошибкой про класс или COM-компонент, зарегистрируйте библиотеку консоли той же версии платформы: regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll" из командной строки администратора.

Через утилиту rac

На Linux-сервере или без оснастки поможет rac. Нужна запущенная служба ras (по умолчанию порт 1545).

rac cluster list
rac infobase summary list --cluster=<uuid_кластера>
rac infobase info --cluster=<uuid_кластера> --infobase=<uuid_базы> --infobase-user=Админ --infobase-pwd=пароль

Последняя команда выводит поля dbms, db-server и db-name. Если синтаксис отличается в вашей версии, сверьтесь со справкой rac help infobase.

Если консоли нет совсем

Реестр баз кластера лежит в файле 1CV8Clst.lst в каталоге srvinfo\reg_1541. По умолчанию это C:\Program Files\1cv8\srvinfo\reg_1541\. Файл текстовый, в нём рядом с именем базы видны тип СУБД, сервер и имя базы данных. Открывайте его только на чтение, лучше копию.

Не правьте 1CV8Clst.lst вручную при работающем сервере 1С — можно испортить реестр кластера.

Поиск файлов MDF и LDF в SQL Server Management Studio

Когда известны сервер СУБД и имя базы, подключитесь к нему в SSMS.

Через свойства базы

  1. В обозревателе объектов раскройте Базы данных.
  2. Щёлкните по базе правой кнопкой → Свойства (Properties).
  3. Перейдите на страницу Файлы (Files).
  4. Колонки «Путь» и «Имя файла» показывают папку и имя каждого файла.

Обычно файлов два: buh.mdf с данными и buh_log.ldf с журналом. Если база большая, администратор мог добавить файлы *.ndf на другие диски — они тоже будут в списке.

Через запрос T-SQL

Запрос удобнее, если баз десятки. Откройте окно Создать запрос и выполните:

SELECT DB_NAME(database_id) AS база,
       type_desc            AS тип,
       name                 AS логическое_имя,
       physical_name        AS путь,
       size * 8 / 1024      AS размер_МБ
FROM sys.master_files
ORDER BY база, тип;

Колонка size хранится в страницах по 8 КБ. Поэтому size * 8 / 1024 даёт мегабайты. Для одной базы добавьте условие WHERE database_id = DB_ID('buh').

Короткий вариант для текущей базы — процедура sp_helpfile:

USE buh;
EXEC sp_helpfile;

Папки по умолчанию для новых баз

Новые базы 1С создаются там, куда указывают настройки сервера. Посмотреть их можно в Свойства сервера → Параметры базы данных (Database Settings), блок «Расположения по умолчанию». Или запросом:

SELECT SERVERPROPERTY('InstanceDefaultDataPath') AS данные,
       SERVERPROPERTY('InstanceDefaultLogPath')  AS журналы;

Смените эти пути до создания баз из 1С, если системный диск маленький. Уже созданные базы при этом не переедут.

Стандартные папки SQL Server и PostgreSQL на диске

Если путь никто не менял, файлы лежат в каталоге экземпляра. Номер в имени папки зависит от версии SQL Server.

Версия SQL ServerПапка с файлами по умолчанию
2016C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\
2017C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\
2019C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\
2022C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\

Для именованного экземпляра вместо MSSQLSERVER стоит его имя, например MSSQL15.SQLEXPRESS. Если на сервере несколько экземпляров, проверьте, к какому подключён кластер 1С: это видно в поле «Сервер баз данных».

Для PostgreSQL каталог данных зависит от сборки и ОС:

  • 🪟 Windows — обычно C:\Program Files\PostgreSQL\<версия>\data;
  • 🐧 Debian, Ubuntu — /var/lib/postgresql/<версия>/main;
  • 🐧 RHEL-подобные системы — /var/lib/pgsql/<версия>/data;
  • 📦 Postgres Pro для 1С ставится в свой каталог внутри /var/lib/pgpro/.

Надёжнее не гадать, а спросить у самой СУБД — об этом ниже.

Командная строка и PowerShell: найти базу без SSMS

sqlcmd

Утилита sqlcmd ставится вместе с SQL Server. Запрос из предыдущего раздела можно выполнить без графической оболочки:

sqlcmd -S sql01 -E -Q "SELECT DB_NAME(database_id), physical_name FROM sys.master_files"

Ключ -E — вход под текущей учётной записью Windows. Для входа по логину SQL замените его на -U sa -P пароль.

Поиск файлов по диску

Если доступа к SQL нет, но есть права администратора на сервере, ищите сами файлы. PowerShell от имени администратора:

Get-ChildItem -Path C:\, D:\ -Recurse -Include *.mdf, *.ldf -ErrorAction SilentlyContinue |
  Select-Object FullName, @{n='ГБ'; e={[math]::Round($_.Length / 1GB, 2)}}, LastWriteTime

Список покажет все базы, включая системные master, model, msdb и tempdb. Базу 1С узнаете по имени и размеру. Поиск по всему диску идёт долго, поэтому сначала проверьте папки из таблицы выше.

Какой экземпляр SQL установлен

Посмотреть экземпляры можно по службам:

Get-Service -Name 'MSSQL*' | Select-Object Name, Status

MSSQLSERVER — экземпляр по умолчанию, MSSQL$ИМЯ — именованный. Путь к исполняемому файлу службы в её свойствах подскажет каталог экземпляра.

PostgreSQL, Db2 и Oracle: база — это не один файл

У PostgreSQL нет пары MDF/LDF. Каждая база — это подкаталог внутри base, названный по числовому идентификатору базы (OID). Таблицы лежат там сотнями файлов с числовыми именами.

Чтобы найти папку нужной базы, выполните в psql под пользователем postgres:

SHOW data_directory;
SELECT oid, datname FROM pg_database WHERE datname = 'buh';

Путь к базе получится как <data_directory>/base/<oid>. Журнал предзаписи лежит отдельно, в pg_wal, и относится ко всему серверу, а не к одной базе.

Если в 1С для базы задано табличное пространство, данные будут в его каталоге. Список пространств и путей — запрос SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace;.

Для Oracle ищите файлы данных табличных пространств: SELECT file_name, tablespace_name FROM dba_data_files;. В IBM Db2 путь хранения задаётся при создании базы, и его показывает администратор Db2. Обе СУБД в 1С встречаются редко, поэтому подробно на них не останавливаемся.

Копировать файлы из каталога PostgreSQL ради резервной копии одной базы бессмысленно. Без остального каталога данных их не поднять. Для копии используйте pg_dump или выгрузку .dt из конфигуратора.

Как перенести файлы базы 1С на другой диск

Найти файлы обычно нужно, чтобы освободить системный диск. Для MS SQL безопасный способ — сменить путь и перевести базу в offline.

Перед переносом сделайте резервную копию базы средствами SQL. Переводить базу в offline можно только когда никто не работает : все сеансы 1С оборвутся. Выбирайте нерабочее время и предупредите пользователей.

  1. Запретите новые сеансы в свойствах базы в консоли кластера и завершите активные.
  2. В SSMS выполните смену путей для каждого файла:
ALTER DATABASE buh MODIFY FILE (NAME = buh,     FILENAME = 'E:\SQLData\buh.mdf');
ALTER DATABASE buh MODIFY FILE (NAME = buh_log, FILENAME = 'F:\SQLLogs\buh_log.ldf');
ALTER DATABASE buh SET OFFLINE WITH ROLLBACK IMMEDIATE;
  1. Скопируйте файлы в новые папки проводником.
  2. Дайте учётной записи службы SQL (для экземпляра по умолчанию — NT Service\MSSQLSERVER) полный доступ к новым папкам.
  3. Включите базу: ALTER DATABASE buh SET ONLINE;
  4. Проверьте пути запросом к sys.master_files и снимите запрет сеансов.

В NAME указывается логическое имя файла, а не имя на диске. Его берите из колонки name того же запроса. Старые файлы удаляйте только после того, как база открылась в 1С.

Настройки кластера 1С при таком переносе не меняются: сервер СУБД и имя базы остались прежними.

Частые ошибки при поиске и переносе базы

Диагностика: выберите симптом

Ещё одна частая находка — огромный *.ldf, больше файла данных. Так бывает при полной модели восстановления без резервного копирования журнала. Журнал растёт, пока его не забэкапят. Решение — настроить копии журнала или перейти на простую модель, если точечное восстановление не нужно.

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

Можно ли подключить к 1С файлы MDF и LDF, скопированные с другого сервера?
Да. Присоедините их в SSMS (Базы данных → Присоединить), затем в консоли кластера создайте информационную базу и укажите это имя базы без создания новой.
Почему база 1С на SQL занимает больше места, чем выгрузка .dt?
Файл .dt сжат и не содержит индексов. В MDF лежат таблицы, индексы и свободное место после удалений.
Где хранятся резервные копии базы 1С на SQL?
Там, куда их пишет план обслуживания или задание агента SQL. Каталог по умолчанию — папка Backup рядом с DATA в каталоге экземпляра.
Видит ли пользователь 1С путь к файлам базы?
Нет. В окне «О программе» видны только сервер 1С и имя базы в кластере. Пути знают администратор кластера и администратор СУБД.
Нужно ли менять что-то в списке баз у пользователей после переноса файлов?
Нет, если сервер 1С и имя базы в кластере не менялись. Клиенты подключаются к кластеру, а не к файлам.