При переносе информационных баз 1С:Предприятие с одного сервера SQL на другой (например, при обновлении с SQL Server 2012 до 2016) администраторы часто сталкиваются с ситуацией, когда база успешно восстановлена из бэкапа (.bak), видна в SQL Server Management Studio, но консоль администрирования 1С упорно выдает ошибку: «Ошибка создания информационной базы: База данных [...] не найдена в сервере баз данных». Рассмотрим подробнее, почему это происходит и как правильно настроить окружение для корректной работы.
Основная причина такого поведения кроется не в физическом отсутствии базы, а в правах доступа и механизмах идентификации пользователей внутри SQL Server. Когда мы восстанавливаем базу из файла бэкапа на новом сервере, SQL Server назначает владельцем базы (Database Owner) того пользователя, который выполнял операцию восстановления (обычно это доменная учетная запись администратора). Однако служба 1С:Предприятие пытается подключиться к базе, используя свои учетные данные (часто это специальный SQL-пользователь, например, dbuser).
Если этот пользователь не является владельцем базы или не имеет достаточных прав в контексте новой установки SQL, сервер баз данных может вернуть ответ, который 1С интерпретирует как отсутствие базы. Разберем по шагам, как исправить эту ситуацию.
Прежде чем приступать к настройке прав, нам необходимо убедиться, что новый экземпляр SQL Server готов принимать сетевые соединения. По умолчанию в новых версиях SQL Server протокол TCP/IP может быть отключен. Проанализируем настройки в SQL Server Configuration Manager:
SQL Server Configuration Manager.SQL Server Network Configuration -> Protocols for [Имя_Экземпляра].TCP/IP и Shared Memory находятся в статусе Enabled.SQL Server Browser запущена.Без включенного TCP/IP сервер 1С не сможет «увидеть» SQL-сервер, даже если они установлены на одной физической машине, так как консоль 1С всегда инициирует сетевое соединение.
Выясним причину несоответствия владельца. В свойствах восстановленной базы данных часто оказывается, что владельцем является учетная запись, под которой делали Restore. Нам нужно сменить владельца на того SQL-пользователя, который указан в настройках информационной базы в консоли 1С.
Рассмотрим, как сменить владельца через графический интерфейс (SSMS):
Properties (Свойства).Files (Файлы).Owner (Владелец) нажмем на кнопку с тремя точками и выберем нужного SQL-пользователя (например, usr1cv8).Также это можно сделать с помощью SQL-запроса, что гораздо быстрее и надежнее:
USE [Имя_Вашей_Базы]
GO
ALTER AUTHORIZATION ON DATABASE::[Имя_Вашей_Базы] TO [Логин_Пользователя_SQL]
GO
Даже если имя пользователя SQL совпадает на старом и новом серверах, их внутренние идентификаторы (SID) различаются. Это создает проблему «осиротевших» пользователей: пользователь внутри базы есть, но он не связан с логином на уровне сервера. Проанализируем ситуацию и исправим связь.
Для начала удалим старого пользователя из ветки База данных -> Безопасность -> Пользователи, если он мешает созданию нового. Но правильнее будет «склеить» их командой:
USE [Имя_Вашей_Базы]
GO
ALTER USER [Имя_Пользователя] WITH LOGIN = [Имя_Пользователя]
GO
После этого обязательно проверим Сопоставление пользователей (User Mapping) в свойствах логина на уровне сервера:
Security -> Logins на уровне сервера.User Mapping поставим галочку напротив нашей базы и в нижней части окна убедимся, что назначена роль db_owner.Посмотрим на параметры базы после переезда. При восстановлении с SQL 2012 на SQL 2016 база сохраняет старый уровень совместимости (Compatibility Level 110). Для полноценного использования возможностей нового движка рекомендуется поднять его до 130 (для SQL 2016).
Разберем, как это сделать:
Options.Compatibility level в значение SQL Server 2016 (130).Важно: После смены версии или переноса базы обязательно нужно обновить статистику, иначе 1С может начать работать крайне медленно из-за неоптимальных планов запросов. Выполним команду:
USE [Имя_Вашей_Базы]
GO
EXEC sp_updatestats
GO
Подводя итог, если 1С не видит базу на новом SQL-сервере, выполним следующие шаги:
db_owner).ALTER USER.Как показывает практика, в 90% случаев проблема решается именно на этапе назначения правильного Owner в свойствах файлов базы данных SQL, так как 1С критично относится к правам доступа на уровне метаданных сервера.