При переходе с файлового варианта работы 1С на клиент-серверный (MS SQL Server) системные администраторы часто сталкиваются с проблемой нехватки свободного места на системном диске C. Особенно остро эта проблема проявляется в момент загрузки информационной базы из файла выгрузки .dt. Несмотря на то что сама база данных и её логи могут быть расположены на диске D, процесс загрузки всё равно «съедает» гигабайты на системном разделе. Это происходит из-за того, что сервер 1С использует временные папки профиля пользователя, под которым запущена служба (обычно это usr1cv8), для промежуточной распаковки данных.
В данной статье мы подробно разберем, как обмануть систему и перенаправить потоки временных данных на другой диск, используя механизм символьных ссылок, а также рассмотрим сопутствующие настройки SQL Server и кластера 1С, которые помогут избежать ошибок при развертывании крупных баз.
Проанализируем механику процесса. Когда вы инициируете загрузку .dt через Конфигуратор в клиент-серверном варианте, сервер 1С:Предприятия выполняет следующие действия:
usr1cv8 (путь вида C:\Users\usr1cv8\AppData\Local\Temp).AppData\Roaming\1C\1cv8.tempdb и файл лога транзакций (.ldf) целевой базы.Если размер .dt составляет, например, 10 ГБ, то в процессе распаковки он может занять 30–50 ГБ на диске C еще до того, как данные попадут в SQL. Рассмотрим, как решить эту проблему поэтапно.
Самый эффективный способ, предложенный в обсуждении, — это использование механизма Directory Junction (соединение папок). Мы физически переместим папки на диск D, а на диске C оставим «ярлыки», которые операционная система будет считать реальными папками. Это позволит не менять глобальные переменные окружения, что иногда чревато сбоями других служб.
Разберем по шагам создание бат-файла для автоматизации этого процесса. Прежде чем выполнять скрипт, обязательно остановите службу Агент сервера 1С:Предприятия.
rem Создаем целевые директории на диске D
mkdir D:\1C_Temp\usr1cv8\AppData\Roaming\1C\1cv8
mkdir D:\1C_Temp\usr1cv8\AppData\Local\Temp
rem Удаляем старые папки на диске C (ВНИМАНИЕ: убедитесь, что в них нет важных данных)
rd /s /q "C:\Users\usr1cv8\AppData\Roaming\1C\1cv8"
rd /s /q "C:\Users\usr1cv8\AppData\Local\Temp"
rem Создаем символьные ссылки (Junction)
mklink /j "C:\Users\usr1cv8\AppData\Roaming\1C\1cv8" "D:\1C_Temp\usr1cv8\AppData\Roaming\1C\1cv8"
mklink /j "C:\Users\usr1cv8\AppData\Local\Temp" "D:\1C_Temp\usr1cv8\AppData\Local\Temp"
pause
После выполнения этих команд система будет прозрачно перенаправлять запись из C:\Users\usr1cv8\... на D:\1C_Temp\.... Рассмотрим важный нюанс: если папка Temp используется другими процессами, команда rd /s /q может выдать ошибку «Отказано в доступе». В этом случае удалите содержимое вручную после остановки всех служб 1С.
Помимо временных файлов пользователя, огромный объем может занимать папка srvinfo, где хранятся журналы регистрации и данные полнотекстового поиска. Проанализируем ситуацию: если вы переносите базу, журналы тоже начнут расти. По умолчанию они лежат в C:\Program Files\1cv8\srvinfo.
Чтобы перенести их правильно, выполним следующие действия:
1C:Enterprise 8.3 Server Agent.regedit) и перейдем в ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent.ImagePath. В нем указана строка запуска службы.-d. Например, вместо "C:\Program Files\1cv8\srvinfo" пропишем "D:\1C_Data\srvinfo".usr1cv8 должен иметь права «Полный контроль» на новую папку D:\1C_Data\srvinfo.Даже если мы разберемся с временными файлами 1С, загрузка может прерваться из-за SQL Server. Выясним причину: при массовой вставке данных (а загрузка .dt — это именно она) база tempdb резко увеличивается в размерах. По умолчанию она также часто находится на диске C.
Рассмотрим, как перенести tempdb на диск D с помощью SQL-запроса в SQL Server Management Studio (SSMS):
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\SQL_Data\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\SQL_Data\templog.ldf');
GO
После выполнения запроса необходимо перезапустить службу SQL Server. Старые файлы на диске C можно будет удалить вручную после успешного старта службы на новом месте.
Также проанализируем настройку Recovery Model (Модель восстановления). Перед загрузкой большого .dt крайне рекомендуется установить модель Simple для целевой базы. Это предотвратит раздувание файла лога транзакций .ldf до терабайтных размеров, так как в «простой» модели лог будет автоматически очищаться после фиксации транзакций.
Чтобы ускорить процесс расширения файлов базы данных на диске D и снизить нагрузку на дисковую подсистему, разберем настройку «Мгновенной инициализации файлов». Без неё SQL Server при каждом расширении файла забивает новое место нулями, что долго и создает лишнюю нагрузку.
Для включения выполним следующие шаги:
secpol.msc (Локальная политика безопасности).NT Service\MSSQLSERVER).Мы рассмотрели комплексный подход к проблеме дефицита места на системном диске. Использование mklink для папок профиля usr1cv8 в сочетании с переносом реестра кластера и настройкой tempdb позволяет успешно разворачивать базы любого объема, даже если на диске C осталось всего несколько гигабайт под нужды ОС. Помните, что после проведения всех манипуляций важно контролировать права доступа к новым директориям, чтобы службы 1С и SQL имели возможность беспрепятственно записывать данные.