Подтвердить что ты не робот

Почему я не могу подключиться к общему экземпляру SQL Server 2012 LocalDB?

Я пытаюсь настроить общий экземпляр SQL Server 2012 LocalDB (RTM, x64) на моей машине с Windows 7 x64, и я не могу подключиться к общему экземпляру. Я использую командную строку администратора для всех настроек. Вот как я создаю экземпляр:

sqllocaldb create MyInstance

Что дает ответ:

LocalDB instance "MyInstance" created with version 11.0.

Пока все хорошо. Теперь я делюсь экземпляром:

sqllocaldb share "MyInstance" "MySharedInstance"

Результат:

Private LocalDB instance "MyInstance" shared with the shared name: "MySharedInstance".

Все еще выглядит хорошо. На этом этапе команда info дает:

.\MySharedInstance
MyInstance
v11.0

Подключение к экземпляру из учетной записи владельца (которая является администратором) с использованием командной строки admin или non-admin, похоже, работает нормально. Все происходит со следов, хотя, когда я вхожу в систему как обычный пользователь (а не администратор Windows) и пытаюсь подключиться:

sqlcmd -S (localdb)\.\MySharedInstance

приводит к:

Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. .
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired.
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..

Увеличение таймаута входа с помощью переключателя "-l" не помогает. Я могу подключиться к экземпляру по умолчанию v11.0, который не является общим. Команда info для пользователя, не являющегося администратором, дает то же самое, что и выше, кроме как "MyInstance", поскольку он является именованным экземпляром, принадлежащим пользователю admin. Следующая команда (которая работает для владельца/владельца приложения admin):

sqllocaldb info ".\MySharedInstance"

также приводит к ошибке:

Windows API call "FileTimeToSystemTime" returned error code: -2147024809.

Поэтому возникает вопрос, почему мой пользователь, не являющийся администратором, не подключается к моему общему экземпляру? Похоже, что это превзошло все цели общих дел. И что с командой "sqllocaldb info" бросает ошибку при попытке запроса об общем экземпляре?

4b9b3361

Ответ 1

ДРУГОЕ ИЗОБРАЖЕНИЕ

Cory, если у вас установлены предыдущие версии SQL Server (например, 2008), то есть версия sqlcmd, которую вы используете. Чтобы подключиться к LocalDb, вам нужно использовать версию SQL Server 2012 sqlcmd. Поэтому ваши инструкции для ваших пользователей должны гарантировать, что они используют версию SQL Server 2012, запустив:

C:\Program Files\Microsoft SQL Server\110\Tools\Binn\sqlcmd -S "(localdb)\.\InstanceName"

Это сработало для меня. Я не проверял, доступен ли этот путь и версия sqlcmd для пользователей, которые только установили sqllocaldb.msi. Извините, но у меня нет готовых машин без установки SQL Server 2012 (или только с установленными ранее версиями), чтобы полностью изучить это. Но, пожалуйста, дайте мне знать, если прямое обращение к версии 110 sqlcmd делает трюк.

Я думаю, вы также можете дать указание пользователям изменить свои системные переменные, чтобы первые версии были первыми (что должно быть IMHO автоматически).

FileTimeToSystemTime подтверждено как ошибка одного из сотрудников Krzysztof. Таким образом, до сих пор нет исправления, которое я знаю о том, что не владельцы подключаются через sqllocaldb. Но я показал, что SSMS и sqlcmd можно заставить работать, поэтому я надеюсь, что вы приблизитесь к запуску.

EDIT

Вам нужно добавить в экземпляр любых пользователей, не являющихся владельцами. CREATE LOGIN [MyDomain\OtherUser] FROM WINDOWS; и любые соответствующие разрешения. В моей тестовой логике произошел сбой и возникла ошибка сообщения об ошибке (сообщение об ошибке "FileTimeToSystemTime" является ошибкой). Вам также нужно GRANT CONNECT. Как только вы это сделаете, вы сможете подключиться от второго пользователя с помощью Management Studio с этим соединением (единственное, что я пробовал):

(localdb)\.\MySharedInstance

Но из sqlcmd я все равно получаю сообщение об ошибке независимо от того, как я пытаюсь подключиться:

sqlcmd -S "(localdb)\.\MySharedInstance"
sqlcmd -S ".\MySharedInstance"
sqlcmd -S "(localdb)\MySharedInstance"
sqlcmd -S "GREENHORNET\MySharedInstance"
sqlcmd -S ".\LOCALDB#SH04FF8A"
sqlcmd -S "GREENHORNET\LOCALDB#SH04FF8A"

Весь выход:

HResult 0xFFFFFFFF, уровень 16, состояние 1 Сетевые интерфейсы SQL Server:

Ошибка определения местонахождения сервера/экземпляра [xFFFFFFFF].

Sqlcmd: Ошибка: Собственный клиент Microsoft SQL Server 10.0: связанный с сетью или ошибка экземпляра произошла при установлении соединения для SQL Server. Сервер не найден или недоступен. Проверить, если имя экземпляра правильно, и если SQL Server настроен на разрешение удаленных соединений. Дополнительные сведения см. В электронной документации по SQL Server..

Sqlcmd: ошибка: собственный клиент Microsoft SQL Server 10.0: время ожидания входа в систему истекли.

Хотя я проверил, что экземпляр настроен на прием удаленных соединений. Итак, есть еще один обруч, который должен пройти sqlcmd.

А что касается sqllocaldb exe, как это следует за любой логикой? Я вижу, что экземпляр существует через info, я получаю сообщение об ошибке, когда пытаюсь остановить его, я получаю сообщение о том, что он [уже] запущен, когда я пытаюсь запустить его, но я не могу подключиться к это?

enter image description here

Поэтому, если вам не нужен доступ sqlcmd, в краткосрочной перспективе я бы добавил, что вторичные пользователи делают свое дело с SSMS (как только вы предоставили соответствующие разрешения), и, надеюсь, у Krzysztof будет больше информации о других элементах.


Что касается обновления 4.0.2, от http://connect.microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances:

Мы приняли явное решение не включать .NET Framework 4.0.2 в Установщик LocalDB. Установка обновления .NET Framework увеличится размер установщика LocalDB и вызвать вероятную перезагрузку. поскольку LocalDB построен независимо от .NET, мы не думали, что мы следует брать эту стоимость для каждой установки LocalDB. Будущее .NET версии (включая .NET 4.5, теперь в CTP) будут поддерживать LocalDB из коробка. Некоторые разработчики могут также захотеть выбрать ODBC, PHP Driver/PDO и, возможно, JDBC в будущем. Эти разработчики не будут заинтересуйтесь обновлением .NET.

Ответ 2

Как было предложено в оригинальном посте, это было не так прямо, как ожидалось, но в конечном итоге я смог подключиться через именованный канал.

Connecting to a LocalDB instance via named pipe

Ответ 3

НАСТОЯЩИЙ ОТВЕТ ПРЕДУПРЕЖДЕНИЕ УДАЛЕНИЕ ИНСТАНЦИИ ОК.
т.е.: все ваши данные исчезнут, и все в порядке.

У меня была такая же проблема после обновления моего SSMS.

sqllocaldb i
.\MyCustomInstance

sqllocaldb d
LocalDb instance ".\MyCustomInstance" does not exist!

sqllocaldb i .\MyCustomInstance
Windows API call "FileTimeToSystemTime" returned error code: -2147024809.

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

sqllocaldb c MyCustomInstance
LocalDB instance "MyCustomInstance" created with version 11.0.
sqllocaldb d .\MyCustomInstance
LocalDB instance ".\Octopus" deleted.

Затем запустите экземпляр и поделитесь им. Императиву вы сначала запускаете экземпляр.

sqllocaldb s MyCustomInstance
LocalDB instance "MyCustomInstance" started.
sqllocaldb h MyCustomInstance MyCustomInstance
Private LocalDB instance "MyCustomInstance" shared with the shared name: "MyCustomInstance".

Теперь, когда вам нужно подключиться, вы подключаетесь к (localdb)\.\MyCustomInstance

Ответ 4

Установите полную .NET Framework 4.5.2 или более позднюю версию, затем перезагрузите компьютер, после чего вы сможете подключиться, используя:

sqlcmd -S (localdb)\.\MySharedInstance

Я обнаружил, что именованные каналы генерируют новый хеш при перезагрузке компьютера, именованный общий экземпляр будет сохраняться после перезагрузки.

Важно отметить, что это не будет работать до перезагрузки.

Ответ 5

Проблема заключается в том, что вам нужно указать имя db:

sqlcmd -S "(localdb)\.\MySharedInstance"