Как найти физические файлы базы 1С на MS SQL и PostgreSQL и перенести их на другой диск
Содержание
Данные серверной базы 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С Предприятия».
- Откройте консоль и разверните дерево:
Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер> → Информационные базы. - Щёлкните правой кнопкой по нужной базе и выберите
Свойства. - Введите логин и пароль администратора информационной базы, если консоль их спросит.
- Посмотрите поля «Сервер баз данных», «Тип СУБД» и «База данных».
Эти три поля и дают ответ. «Сервер баз данных» — где запущена СУБД (может быть тот же компьютер, а может отдельный). «Тип СУБД» — 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
- В «Обозревателе объектов» разверните
Базы данных. - Правой кнопкой по базе →
Свойства→ страницаФайлы. - В таблице файлов смотрите столбцы «Путь» и «Имя файла».
Там же видно логические имена файлов. Они понадобятся при переносе.
Способ 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 2016 | MSSQL13.MSSQLSERVER |
| SQL Server 2017 | MSSQL14.MSSQLSERVER |
| SQL Server 2019 | MSSQL15.MSSQLSERVER |
| SQL Server 2022 | MSSQL16.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:
- Предупредите пользователей. Перенос обрывает все сеансы, делайте его вне рабочего времени.
- Сделайте полную резервную копию средствами SQL (
BACKUP DATABASE) или выгрузку.dt. - В консоли кластера откройте свойства базы и включите «Блокировка начала сеансов включена» и «Блокировка регламентных заданий включена». Завершите активные сеансы.
- Переведите базу в автономный режим и укажите новые пути:
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, а не имена файлов.
- Скопируйте файлы
.mdfи.ldfв новые папки средствами Windows. - Дайте учётной записи службы MS SQL полный доступ к новым папкам. Без этого база не поднимется.
- Включите базу:
ALTER DATABASE buh SET ONLINE; - Проверьте запросом, что
physical_nameуказывает на новые пути. Снимите блокировки в консоли кластера.
Параметры базы в кластере 1С при этом менять не нужно: имя сервера СУБД и имя базы остались прежними. Старые файлы удаляйте только после проверки, что база открывается и документы видны.
Восстановление базы и подключение файлов после сбоя
Восстановление из .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, затем запустите тестирование и исправление в Конфигураторе. Для этого режима нужен монопольный доступ.