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

· 11 мин

Содержание

Данные серверной базы 1С лежат не в папке 1С, а в файлах СУБД. Для MS SQL это пара файлов ИмяБазы.mdf (данные) и ИмяБазы_log.ldf (журнал транзакций), по умолчанию в каталоге вида C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\. Для PostgreSQL — подкаталог base\<oid базы> внутри каталога данных кластера PostgreSQL. Точный путь показывает сама СУБД: запрос к sys.master_files в MS SQL или SHOW data_directory в PostgreSQL.

Типичная ситуация: на сервере кончается место на диске C:, администратор открывает C:\Program Files\1cv8\srvinfo и видит папки с длинными GUID. Кажется, что это и есть базы. Это не так: там служебные данные кластера, журнал регистрации и индексы поиска. Ниже — как по шагам дойти от имени базы в списке 1С до конкретного файла на диске и как безопасно его переместить.

Как устроено хранение серверной базы 1С

В клиент-серверном варианте работают три независимых участника. У каждого свои файлы и своё место на диске.

ГдеЧто хранитсяТипичное расположение
💻 Компьютер пользователяСписок баз (ibases.v8i), кэш конфигурации%APPDATA%\1C\1CEStart\, %APPDATA%\1C\1cv8\
🖥️ Сервер 1С (кластер)Реестр кластера, журнал регистрации, полнотекстовый индекс, сеансовые данныекаталог srvinfo, например C:\Program Files\1cv8\srvinfo\reg_1541\
🗄️ Сервер СУБДСами данные: справочники, документы, регистры, конфигурациякаталог данных MS SQL или PostgreSQL

Главный вывод из таблицы: файла 1Cv8.1CD у серверной базы нет. Он бывает только у файловой. Если вы ищете на сервере .1CD, значит, база файловая, и лежит она там, куда указывает строка подключения File="...".

Ещё одна тонкость. Имя базы в списке пользователя, имя информационной базы в кластере и имя базы в СУБД — три разные строки. Часто они совпадают, но не обязаны. Пользователь видит «Бухгалтерия основная», в кластере база называется buh, а в MS SQL — buh_2019_copy. Поэтому искать файл по названию из окна запуска нельзя. Идти надо по цепочке: окно запуска → кластер → СУБД.

Шаг 0: какой кластер и какая база

Если вы не знаете, на каком сервере 1С живёт база, откройте окно запуска на машине пользователя. Выделите базу и нажмите Изменить. В строке подключения серверной базы будут два значения:

Srvr="srv-1c01";Ref="buh";

Srvr — имя сервера 1С (иногда с портом, например srv-1c01:1541). Ref — имя информационной базы в кластере. Тот же текст лежит в файле %APPDATA%\1C\1CEStart\ibases.v8i, его можно открыть Блокнотом.

Где найти параметры базы в консоли кластера

Связь между базой 1С и базой в СУБД хранится в свойствах информационной базы на сервере 1С. Проще всего её увидеть в оснастке «Администрирование серверов 1С Предприятия».

  1. Откройте консоль и разверните дерево: Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер> → Информационные базы.
  2. Щёлкните правой кнопкой по нужной базе и выберите Свойства.
  3. Введите логин и пароль администратора информационной базы, если консоль их спросит.
  4. Посмотрите поля «Сервер баз данных», «Тип СУБД» и «База данных».

Эти три поля и дают ответ. «Сервер баз данных» — где запущена СУБД (может быть тот же компьютер, а может отдельный). «Тип СУБД» — MSSQLServer, PostgreSQL, IBM DB2 или Oracle Database. «База данных» — имя базы внутри СУБД, по нему дальше ищем файлы.

Если консоль не запускается или не видит сервер, проверьте, что версия оснастки совпадает с версией сервера 1С. При смене версии платформы оснастку регистрируют заново: файл radmin.dll из каталога bin нужной версии регистрируется командой regsvr32 от имени администратора.

То же самое из командной строки

На сервере, где нет графической консоли, поможет утилита rac вместе со службой ras. Последовательность такая:

rac cluster list
rac infobase summary list --cluster=<id кластера>

Первая команда выдаёт идентификатор кластера, вторая — список баз с их идентификаторами. Полные свойства, включая сервер и имя базы в СУБД, выводит команда rac infobase info с указанием кластера, базы и учётных данных администратора базы. Точный набор параметров для вашей версии смотрите в справке rac help infobase.

Что лежит в папке srvinfo

Каталог srvinfo задаётся при установке службы агента сервера параметром -d. Посмотреть его можно в оснастке «Службы»: свойства службы агента сервера 1С → строка «Исполняемый файл». В ней будет фрагмент вида -d "C:\Program Files\1cv8\srvinfo".

Внутри находится папка reg_1541 (по номеру порта менеджера кластера). В ней:

  • 📄 1CV8Clst.lst — реестр кластера: список баз, их параметры подключения к СУБД, рабочие серверы, администраторы;
  • 📁 папки с именами-GUID — по одной на каждую информационную базу;
  • 📁 внутри GUID-папки: 1Cv8Log (журнал регистрации) и 1Cv8FTxt (индекс полнотекстового поиска).

Файл 1CV8Clst.lst текстовый. Если открыть его копию и найти по тексту имя базы, рядом окажется её GUID, имя сервера СУБД и имя базы в СУБД. Это запасной способ, когда консоль недоступна. Сам файл не редактируйте и не открывайте на запись при работающей службе — повреждённый реестр выключит весь кластер.

Поиск файлов .mdf и .ldf в MS SQL Server

Имя базы в СУБД известно. Теперь подключаемся к MS SQL через SQL Server Management Studio (SSMS) под учётной записью с правами на чтение метаданных.

Способ 1: через свойства базы в SSMS

  1. В «Обозревателе объектов» разверните Базы данных.
  2. Правой кнопкой по базе → Свойства → страница Файлы.
  3. В таблице файлов смотрите столбцы «Путь» и «Имя файла».

Там же видно логические имена файлов. Они понадобятся при переносе.

Способ 2: запросом

Запрос сразу выдаёт все файлы базы с полными путями и размером:

SELECT name AS logical_name,
       type_desc,
       physical_name,
       size * 8 / 1024 AS size_mb
FROM sys.master_files
WHERE database_id = DB_ID(N'buh');

Подставьте вместо buh имя из поля «База данных» консоли кластера. Размер хранится в страницах по 8 КБ, поэтому size * 8 / 1024 даёт мегабайты.

Чтобы увидеть, какие каталоги сервер подставляет для новых баз, выполните:

SELECT SERVERPROPERTY('InstanceDefaultDataPath') AS data_path,
       SERVERPROPERTY('InstanceDefaultLogPath')  AS log_path;

Эти пути задаются в свойствах экземпляра: Свойства сервера → Параметры баз данных → Расположения баз данных по умолчанию. Когда 1С создаёт новую базу через консоль кластера с флажком «Создать базу данных в случае ее отсутствия», файлы ложатся именно туда.

Каталоги по умолчанию по версиям MS SQL

Номер в имени папки зависит от версии сервера:

Версия MS SQLПапка экземпляра по умолчанию
SQL Server 2016MSSQL13.MSSQLSERVER
SQL Server 2017MSSQL14.MSSQLSERVER
SQL Server 2019MSSQL15.MSSQLSERVER
SQL Server 2022MSSQL16.MSSQLSERVER

Для именованного экземпляра вместо MSSQLSERVER стоит его имя. Полный путь — C:\Program Files\Microsoft SQL Server\<папка>\MSSQL\DATA\.

Где хранятся данные базы 1С в PostgreSQL

В PostgreSQL файлы базы не называются по её имени. Каждая база — это подкаталог с числовым идентификатором (oid), а каждая таблица — набор файлов с числовыми именами. Искать «файл базы» поиском Windows или find бесполезно.

Каталог данных кластера PostgreSQL

Подключитесь через psql или pgAdmin и выполните:

SHOW data_directory;

Типичные ответы:

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

Подкаталог конкретной базы

Узнайте oid базы:

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

Данные лежат в <data_directory>/base/<oid>/. Чтобы проверить, сколько база занимает, не считая файлы вручную:

SELECT pg_size_pretty(pg_database_size('buh'));

Если администратор вынес базу в отдельное табличное пространство, её файлы будут не в base, а в каталоге этого пространства. Список пространств и их расположение:

SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace;

Каталог данных PostgreSQL нельзя копировать по частям. Скопировать папку base/<oid> на другой сервер и «подключить» её не получится: база не живёт отдельно от служебных файлов кластера. Переносят базу через pg_dump и pg_restore или выгрузкой .dt из 1С.

Журнал регистрации: где он лежит и что расскажет

Журнал регистрации серверной базы хранится не в СУБД, а на сервере 1С — в папке srvinfo\reg_1541\<GUID базы>\1Cv8Log. В актуальных версиях платформы по умолчанию используется формат одного файла 1Cv8.lgd. В старом формате там лежат файл 1Cv8.lgf и много файлов .lgp по периодам.

Отсюда два практических следствия.

  • 📌 При переносе базы на другой сервер СУБД журнал остаётся на сервере 1С. Если переносите и сервер 1С, журнал копируйте отдельно.
  • 📌 Папка 1Cv8Log за несколько лет вырастает до десятков гигабайт. Чистят её не удалением файлов, а штатно: в Конфигураторе Администрирование → Журнал регистрации → Сократить.

Журнал помогает и в поиске. Если база не открывается после перемещения файлов, в журнале других баз и в журнале событий Windows видно, к какому серверу СУБД и под каким пользователем пытался подключиться рабочий процесс. Отбор по событию «Сеанс» и колонке «Комментарий» даёт текст ошибки СУБД.

Для глубокой диагностики подключений к СУБД включают технологический журнал: файл logcfg.xml в каталоге conf платформы. Он пишет события DBMSSQL и EXCP с текстом ответа сервера. Включайте его на короткое время: при подробной настройке он быстро забивает диск.

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

Чаще всего путь к файлам ищут, чтобы освободить место. Порядок для MS SQL:

  1. Предупредите пользователей. Перенос обрывает все сеансы, делайте его вне рабочего времени.
  2. Сделайте полную резервную копию средствами SQL (BACKUP DATABASE) или выгрузку .dt.
  3. В консоли кластера откройте свойства базы и включите «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена». Завершите активные сеансы.
  4. Переведите базу в автономный режим и укажите новые пути:
ALTER DATABASE buh SET OFFLINE WITH ROLLBACK IMMEDIATE;
ALTER DATABASE buh MODIFY FILE (NAME = buh, FILENAME = N'D:\SQLData\buh.mdf');
ALTER DATABASE buh MODIFY FILE (NAME = buh_log, FILENAME = N'E:\SQLLog\buh_log.ldf');

В NAME указывайте логические имена из запроса к sys.master_files, а не имена файлов.

  1. Скопируйте файлы .mdf и .ldf в новые папки средствами Windows.
  2. Дайте учётной записи службы MS SQL полный доступ к новым папкам. Без этого база не поднимется.
  3. Включите базу: ALTER DATABASE buh SET ONLINE;
  4. Проверьте запросом, что physical_name указывает на новые пути. Снимите блокировки в консоли кластера.

Параметры базы в кластере 1С при этом менять не нужно: имя сервера СУБД и имя базы остались прежними. Старые файлы удаляйте только после проверки, что база открывается и документы видны.

Перед переносом файлов базы
Выполнено: 0 / 6

Восстановление базы и подключение файлов после сбоя

Восстановление из .bak в другую папку

Если копия делалась на другом сервере, пути в ней могут не совпасть с вашими дисками. Сначала посмотрите, какие файлы внутри копии:

RESTORE FILELISTONLY FROM DISK = N'D:\Backup\buh.bak';

Затем восстановите с явными путями:

RESTORE DATABASE buh
FROM DISK = N'D:\Backup\buh.bak'
WITH MOVE N'buh' TO N'D:\SQLData\buh.mdf',
     MOVE N'buh_log' TO N'E:\SQLLog\buh_log.ldf',
     RECOVERY;

Подключение уцелевших .mdf и .ldf

Сервер СУБД умер, а диск с данными цел? Файлы можно подключить к новому экземпляру MS SQL той же или более новой версии:

CREATE DATABASE buh
ON (FILENAME = N'D:\SQLData\buh.mdf'),
   (FILENAME = N'E:\SQLLog\buh_log.ldf')
FOR ATTACH;

Обратно на более старую версию MS SQL базу так не подключить. После подключения базы в новом экземпляре зарегистрируйте её в кластере 1С: Информационные базы → Создать → Информационная база, укажите сервер СУБД и имя существующей базы, флажок создания новой базы не ставьте.

Если база в СУБД после сбоя открывается, но 1С ругается на ошибки, сначала выгрузите .dt, затем запустите тестирование и исправление в Конфигураторе. Для этого режима нужен монопольный доступ.

Типичные ошибки при поиске и переносе

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

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

Можно ли просто скопировать .mdf, чтобы сделать резервную копию базы 1С?
Только при остановленной базе. Штатный способ — BACKUP DATABASE средствами SQL или выгрузка .dt из Конфигуратора: они не требуют отключения базы на время копирования.
Почему файл журнала .ldf больше самой базы?
База в полной модели восстановления, а резервные копии журнала не делаются. Либо настройте регулярный BACKUP LOG, либо переведите базу в простую модель, если восстановление на момент времени не нужно.
Где лежат базы, если сервер 1С и SQL на одном компьютере?
Всё так же: данные — в каталоге данных СУБД, служебные файлы кластера — в srvinfo. Физически это может быть один диск, но разные папки.
Нужно ли менять что-то в 1С после переноса файлов на другой диск?
Нет, если сервер СУБД и имя базы не менялись. Кластер 1С обращается к базе по имени, а не по пути к файлу.
Как узнать, файловая база или серверная?
Откройте строку подключения в окне запуска. File= означает файловую базу с файлом 1Cv8.1CD, Srvr= и Ref= — серверную, данные которой лежат в СУБД.