Как разместить базу данных SQL Server на сетевом диске или внешнем хранилище?

Системный администратор IT и автоматизация бизнеса
← На главную

При администрировании высоконагруженных систем или при необходимости физического разделения серверов приложений и серверов баз данных часто возникает задача: вынести файлы .mdf и .ldf на внешнее сетевое хранилище. Однако стандартные средства Microsoft SQL Server Management Studio (SSMS) при создании базы данных ограничивают выбор только локальными фиксированными дисками сервера. Попытки указать путь в формате UNC (например, \\File-storage\base.mdf) или выбрать подключенный сетевой диск в ОС обычно заканчиваются ошибкой.

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

Почему SQL Server блокирует сетевые пути по умолчанию?

Основная причина такого поведения СУБД — обеспечение целостности данных. SQL Server требует гарантированной записи данных на диск (протокол WAL — Write-Ahead Logging). При работе через стандартные сетевые протоколы старых версий (SMB 1.0/2.0) велика вероятность задержек или обрывов соединения, что может привести к повреждению структуры базы данных. Кроме того, механизмы кэширования операционной системы могут конфликтовать с внутренним кэшем SQL Server.

Тем не менее, существуют ситуации, когда такое размещение оправдано (например, использование мощных СХД, объединенных по оптике, или необходимость быстрой миграции данных). Рассмотрим, как реализовать эту задачу.

Способ 1: Использование флага трассировки 1807 (UNC-пути)

Этот метод позволяет «обмануть» SQL Server и заставить его принимать сетевые пути как валидные места для хранения файлов БД. Разберем этот процесс по шагам.

1. Настройка прав доступа. Прежде чем выполнять команды в SQL, необходимо убедиться, что служба SQL Server имеет физический доступ к сетевой папке. По умолчанию служба часто запускается от имени локальной учетной записи (например, NT Service\MSSQLSERVER), которая не видит сетевые ресурсы. Нам необходимо:

  1. Изменить учетную запись запуска службы SQL Server на доменную учетную запись.
  2. На удаленном сервере (хранилище) предоставить этой доменной учетной записи права Full Control как на уровне общего доступа к папке (Share), так и на уровне файловой системы (NTFS).

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 в список параметров запуска.

Способ 2: Использование технологии iSCSI (Блочный доступ)

Если ваша задача — обеспечить максимальную стабильность и производительность (особенно для баз 1С), использование iSCSI является предпочтительным вариантом. Разберем, в чем преимущество этого подхода.

В отличие от сетевой папки, диск, подключенный через iSCSI, видится операционной системой как локальный физический диск. SQL Server даже не подозревает, что данные передаются по сети. Это снимает все ограничения на выбор путей и не требует включения специальных флагов трассировки.

Алгоритм настройки:

  1. На внешнем хранилище (это может быть специализированная СХД, NAS или сервер на Windows/Linux) создается iSCSI-цель (Target).
  2. На сервере с SQL Server запускается «Инициатор iSCSI» (iSCSI Initiator).
  3. Выполняется подключение к Target, после чего в «Управлении дисками» Windows появляется новый неразмеченный диск.
  4. Диск инициализируется, форматируется (рекомендуется размер кластера 64 КБ для данных SQL) и ему назначается буква (например, D:).
  5. В SSMS вы просто выбираете диск 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 и имеет встроенные механизмы защиты от сбоев питания и разрывов сети.

Выясним причину возможных ошибок

Если после выполнения всех инструкций база все равно не создается, проанализируем возможные причины:

Таким образом, мы выяснили, что размещение базы SQL на внешнем носителе — задача решаемая, но требующая внимательного отношения к правам доступа и сетевой инфраструктуре. Для тестовых задач и разгрузки дисковой подсистемы вполне подходит флаг трассировки 1807, а для боевых систем с высокими требованиями к отказоустойчивости лучше смотреть в сторону iSCSI.

← На главную