Почему после перехода на 64-битную платформу 1С не видна база на сервере MS SQL?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При обновлении платформы 1С:Предприятие и одновременном переходе с 32-разрядного сервера приложений на 64-разрядный системные администраторы часто сталкиваются с ситуацией, когда консоль администрирования кластера оказывается пустой. При попытке повторно зарегистрировать существующую базу данных вручную система выдает ошибку: «Ошибка создания информационной базы. База данных ... не найдена в сервере баз данных», хотя физически база присутствует на MS SQL Server и ранее успешно функционировала. Проанализируем причины такого поведения и разберем по шагам, как восстановить работоспособность сервиса.

Причина 1. Разделение каталогов srvinfo для 32- и 64-битных версий

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

  1. Для 32-битного сервера путь по умолчанию: C:\Program Files (x86)\1cv8\srvinfo\
  2. Для 64-битного сервера путь по умолчанию: C:\Program Files\1cv8\srvinfo\

Когда мы устанавливаем 64-битный сервер и запускаем новую службу, она обращается к новому, еще не заполненному каталогу в Program Files. В результате создается чистый кластер серверов с портом по умолчанию 1541, в котором еще нет зарегистрированных информационных баз.

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

  1. Остановим службу 64-битного сервера 1С:Предприятия.
  2. Убедимся, что 32-битная служба также остановлена и переведена в режим отключения.
  3. Скопируем содержимое папки reg_1541 из каталога C:\Program Files (x86)\1cv8\srvinfo\ в каталог C:\Program Files\1cv8\srvinfo\ (при этом обязательно удалим старые файлы блокировок с расширением *.lck).
  4. Либо изменим путь к каталогу данных кластера в реестре Windows в параметрах запуска службы (ключ -d параметра ImagePath в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\).
  5. Запустим службу сервера 1С и проверим отображение баз в консоли.

Причина 2. Права учетной записи на сервере MS SQL Server

Разберем теперь вторую часть проблемы: почему при попытке вручную привязать базу 1С возвращает ошибку о том, что база не найдена в СУБД. Главная причина кроется в правах пользователя, под которым сервер 1С подключается к MS SQL Server.

В MS SQL Server доступ к просмотру метаданных ограничен. Если учетная запись пользователя СУБД не имеет серверного разрешения VIEW ANY DATABASE, сервер баз данных скрывает список существующих баз из системного представления sys.databases. В этом случае кластер 1С делает запрос к СУБД, получает пустой ответ и сообщает, что указанная база данных не найдена.

Проанализируем шаги по исправлению прав пользователя в SQL Server Management Studio (SSMS):

  1. Подключимся к экземпляру MS SQL Server под учетной записью с правами администратора (например, sa).
  2. Развернем узел Security -> Logins и найдем пользователя, под которым сервер 1С подключается к СУБД.
  3. Откроем свойства пользователя (Properties) и перейдем на вкладку Securables.
  4. Проверим, чтобы для сервера было установлено право Grant на директиву VIEW ANY DATABASE.
  5. Перейдем на вкладку User Mapping и убедимся, что для целевой информационной базы пользователю сопоставлена роль db_owner.
  6. Если используется аутентификация средствами SQL, проверим в свойствах сервера СУБД (Security), чтобы был включен смешанный режим: SQL Server and Windows Authentication mode.

После предоставления необходимых прав или указания корректного пользователя с правами db_owner и доступом к просмотру баз регистрация информационной базы в кластере проходит успешно.

Причина 3. Разрядность драйверов СУБД и сетевые настройки

При миграции на 64-разрядный сервер приложений рассмотрим сопутствующие технические нюансы, которые могут блокировать соединение с СУБД:

  1. 64-битные провайдеры данных: Процессы 64-битного сервера (rphost) не могут работать с 32-битными библиотеками подключения к SQL. Убедимся, что на сервере приложений установлен 64-разрядный клиент СУБД (например, SQL Server Native Client или актуальный Microsoft OLE DB Driver for SQL Server).
  2. Регистрозависимость параметров сортировки (Collation): Если в SQL Server используется регистрозависимая сортировка (содержащая в наименовании _CS), имя базы данных в диалоге создания базы 1С должно в точности совпадать по регистру с именем базы в Management Studio.
  3. Служба обозревателя SQL Server Browser: Если MS SQL установлен на именованном экземпляре (к примеру, SQLSRV\INST1), убедимся, что на сервере СУБД запущена служба SQL Server Browser (UDP-порт 1434), либо укажем прямое подключение через статический порт через запятую (SQLSRV,1433).
  4. Конфликт сетевых портов: Не допускайте одновременной работы старой 32-битной и новой 64-битной служб на стандартных портах 1540, 1541, 1560:1591. Старую службу следует полностью остановить или удалить с помощью команды: sc delete "1C:Enterprise 8.3 Server Agent"

Таким образом, комплексное решение проблемы состоит в сопоставлении путей реестра кластера srvinfo и корректной настройке прав учетной записи СУБД в MS SQL Server.

← На главную