При администрировании высоконагруженных систем или при необходимости физического разделения серверов приложений и серверов баз данных часто возникает задача: вынести файлы .mdf и .ldf на внешнее сетевое хранилище. Однако стандартные средства Microsoft SQL Server Management Studio (SSMS) при создании базы данных ограничивают выбор только локальными фиксированными дисками сервера. Попытки указать путь в формате UNC (например, \\File-storage\base.mdf) или выбрать подключенный сетевой диск в ОС обычно заканчиваются ошибкой.
В этой статье мы подробно разберем, почему SQL Server накладывает такие ограничения, и рассмотрим рабочие способы их обхода, включая использование специальных флагов трассировки и подключение блочных устройств через iSCSI. Проанализируем риски и требования к производительности, которые критически важны для стабильной работы 1С:Предприятия.
Основная причина такого поведения СУБД — обеспечение целостности данных. SQL Server требует гарантированной записи данных на диск (протокол WAL — Write-Ahead Logging). При работе через стандартные сетевые протоколы старых версий (SMB 1.0/2.0) велика вероятность задержек или обрывов соединения, что может привести к повреждению структуры базы данных. Кроме того, механизмы кэширования операционной системы могут конфликтовать с внутренним кэшем SQL Server.
Тем не менее, существуют ситуации, когда такое размещение оправдано (например, использование мощных СХД, объединенных по оптике, или необходимость быстрой миграции данных). Рассмотрим, как реализовать эту задачу.
Этот метод позволяет «обмануть» SQL Server и заставить его принимать сетевые пути как валидные места для хранения файлов БД. Разберем этот процесс по шагам.
1. Настройка прав доступа. Прежде чем выполнять команды в SQL, необходимо убедиться, что служба SQL Server имеет физический доступ к сетевой папке. По умолчанию служба часто запускается от имени локальной учетной записи (например, NT Service\MSSQLSERVER), которая не видит сетевые ресурсы. Нам необходимо:
2. Включение флага трассировки. Теперь выполним команду, которая разрешит использование сетевых путей. Для этого в Management Studio откроем новое окно запроса и введем следующий код:
-- Включение флага трассировки 1807 глобально для всего сервера
DBCC TRACEON (1807, -1);
GO
После выполнения этой команды SQL Server позволит вам создавать базы данных, указывая абсолютный UNC-путь к файлам. Например:
CREATE DATABASE [MyDatabase] ON PRIMARY
( NAME = N'MyDatabase', FILENAME = N'\\NetworkStorage\SQLData\MyDatabase.mdf' )
LOG ON
( NAME = N'MyDatabase_log', FILENAME = N'\\NetworkStorage\SQLLogs\MyDatabase_log.ldf' )
GO
Важное замечание: команда DBCC TRACEON действует только до перезагрузки службы SQL Server. Чтобы флаг применялся автоматически при каждом запуске сервера, его необходимо прописать в параметрах запуска службы в SQL Server Configuration Manager. Добавьте параметр -T1807 в список параметров запуска.
Если ваша задача — обеспечить максимальную стабильность и производительность (особенно для баз 1С), использование iSCSI является предпочтительным вариантом. Разберем, в чем преимущество этого подхода.
В отличие от сетевой папки, диск, подключенный через iSCSI, видится операционной системой как локальный физический диск. SQL Server даже не подозревает, что данные передаются по сети. Это снимает все ограничения на выбор путей и не требует включения специальных флагов трассировки.
Алгоритм настройки:
D:).D: для хранения базы данных.Этот метод гораздо надежнее, так как iSCSI работает на более низком уровне протоколов и лучше обрабатывает ситуации с временной потерей связи.
Рассмотрим несколько важных нюансов, которые помогут избежать «тормозов» системы после переноса базы в сеть:
1. Разделение файлов данных и логов. Транзакционный лог (.ldf) — это самое узкое место по операциям записи. При каждой транзакции 1С SQL Server должен дождаться подтверждения записи в лог. Мы настоятельно рекомендуем оставлять файл лога на быстром локальном диске (SSD/NVMe), а в сетевое хранилище выносить только основной файл данных (.mdf).
2. TempDB. Никогда не размещайте системную базу tempdb на сетевом ресурсе. Она используется для временных таблиц 1С и требует минимальных задержек. tempdb должна всегда находиться на самом быстром локальном носителе сервера.
3. Пропускная способность сети. Для работы SQL Server через сеть крайне желательно использовать выделенный сетевой адаптер и гигабитную сеть (минимум 1 Гбит/с, в идеале 10 Гбит/с или оптоволоконное соединение), чтобы избежать конкуренции за трафик с пользователями терминального сервера.
4. Версия протокола SMB. Если вы используете способ с UNC-путями на современных ОС, убедитесь, что используется протокол SMB 3.0 (доступен начиная с Windows Server 2012). Он официально поддерживается Microsoft для размещения данных SQL Server и имеет встроенные механизмы защиты от сбоев питания и разрывов сети.
Если после выполнения всех инструкций база все равно не создается, проанализируем возможные причины:
Recovery Pending. Это означает, что служба SQL Server запустилась быстрее, чем поднялось сетевое соединение с хранилищем. В настройках службы SQL Server стоит установить зависимость от службы сетевых подключений или использовать тип запуска «Automatic (Delayed Start)».Таким образом, мы выяснили, что размещение базы SQL на внешнем носителе — задача решаемая, но требующая внимательного отношения к правам доступа и сетевой инфраструктуре. Для тестовых задач и разгрузки дисковой подсистемы вполне подходит флаг трассировки 1807, а для боевых систем с высокими требованиями к отказоустойчивости лучше смотреть в сторону iSCSI.