Pourquoi ne puis-je pas me connecter à une instance partagée LocalDB de SQL Server 2012?

j'essaie de configurer une instance partagée SQL Server 2012 LocalDB (RTM, x64) sur ma machine Windows 7 x64 et je ne semble pas pouvoir me connecter à l'instance partagée. J'utilise une invite de commande administrateur pour toute la configuration. Voici comment je crée l'instance:

sqllocaldb create MyInstance

ce Qui donne la réponse:

LocalDB instance "MyInstance" created with version 11.0.

So far So good. Aujourd'hui je partage l'exemple:

sqllocaldb share "MyInstance" "MySharedInstance"

ce qui donne:

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

toujours en forme. À ce point, je la commande info produit:

.MySharedInstance
MyInstance
v11.0

Se connecter à l'instance à partir du compte propriétaire (qui est un administrateur) en utilisant à la fois une invite de commande admin ou non-admin semble fonctionner correctement. Les choses sortent des sentiers battus, cependant, quand je me connecte comme un utilisateur régulier (pas un administrateur windows) et que j'essaie de me connecter:

sqlcmd -S (localdb).MySharedInstance

résultat:

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..

augmenter le délai de connexion en utilisant le bouton "-l" n'aide pas. Je peux me connecter à la V11 par défaut.0 CAs, qui n'est pas partagé. La commande info pour l'utilisateur non-administrateur donne le même résultat que ci-dessus sauf pour "MyInstance" puisque c'est une instance nommée appartenant à l'utilisateur administrateur. La commande suivante (qui fonctionne pour l'administrateur utilisateur / propriétaire de l'instance):

sqllocaldb info ".MySharedInstance"

se traduit aussi par une erreur:

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

alors la question est pourquoi mon utilisateur non administrateur ne peut pas se connecter à mon instance partagée? Cela semble à l'encontre de l'objectif des instances partagées. Et avec le " sqllocaldb info" commande lancer une erreur quand j'essaie de demander à propos de l'instance partagée?

24
demandé sur Cory McCarty 2012-04-18 21:28:06

4 réponses

ANOTHER EDIT

Cory, si vous avez des versions précédentes de SQL Server installées (par exemple 2008), c'est la version de sqlcmd vous êtes en utilisant. Pour vous connecter à LocalDb, vous devez utiliser la versionsqlcmd. Ainsi, vos instructions à vos utilisateurs doivent s'assurer qu'ils utilisent la version SQL Server 2012 en exécutant:

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

Cela a fonctionné pour moi. Ce que je n'ai pas vérifié, c'est si ce chemin et cette version sqlcmd est disponible pour les utilisateurs qui ont installé le sqllocaldb.msi. Désolé, mais je n'ai pas de machines nues sans SQL Server 2012 installé (ou avec seulement les versions précédentes installées) pour essayer cela à fond. Mais s'il vous plaît, faites-moi savoir si vous appelez explicitement la version 110 de sqlcmd le truc.

je pense que vous pouvez également être en mesure de demander aux utilisateurs de modifier leur système de variables, de sorte que le 110 versions viennent en premier (ce qui à mon humble avis devrait être le cas automatiquement.)

FileTimeToSystemTime a été confirmé comme un bug par L'un des collègues de Krzysztof. Il n'y a donc toujours pas de solution que je connaisse pour les non-propriétaires de se connecter via sqllocaldb. Mais j'ai montré que les deux SSMS et sqlcmd peut être fait pour travailler, donc j'espère que cela vous rapproche de la course.

EDIT

vous devez ajouter des utilisateurs non propriétaires à l'instance, par exemple CREATE LOGIN [MyDomain\OtherUser] FROM WINDOWS; et toutes les autorisations appropriées. Dans mon test, le login était défaillant. et générer le mauvais message d'erreur (le message D'erreur "FileTimeToSystemTime" est un bug). Vous avez également besoin d' GRANT CONNECT. Une fois que vous faites cela, vous être capable de se connecter depuis le second utilisateur en utilisant Management Studio avec cette connexion (la seule que j'ai essayé):

(localdb)\.\MySharedInstance

Mais sqlcmd, j'ai toujours une erreur s'affiche n'importe comment j'essaie de me connecter:

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

donne:

HResult 0xFFFFFFFF, Level 16, State 1 SQL Server Interfaces Réseau:

erreur Locating Server / Instance spécifiée [xffffff].

Sqlcmd: Erreur: Microsoft SQL Server Native Client 10.0: un client lié au réseau ou spécifique à l'instance erreur s'est produite lors de l'établissement d'une connexion pour SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifier si le nom de l'instance est correct et si SQL Server est configuré pour autoriser les connexions à distance. Pour plus d'informations, consultez les livres SQL Server en ligne..

Sqlcmd: Erreur: Microsoft SQL Server Native Client 10.0 : Login timeout expirer.

Bien que j'ai vérifié que l'instance est configuré pour accepter les connexions à distance. Donc, il y a un autre cercle sqlcmd doit aller.

et concernant le sqllocaldb exe, comment suivre toute logique? Je peux voir l'exemple est là, via info, j'ai un message d'erreur lorsque j'essaie de l'arrêter, je reçois un message que c'est [déjà] a commencé quand j' essayez de le démarrer, mais je ne peux pas me connecter?

enter image description here

Donc à moins que vous besoinsqlcmd accès, dans le court terme, je voudrais que les utilisateurs secondaires fassent leur chose avec les SSMS (une fois que vous avez accordé les permissions adéquates) et j'espère que Krzysztof aura plus d'informations sur les autres éléments.


concernant la mise à jour 4.0.2, de http://connect.microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances:

nous avons pris la décision explicite de ne pas inclure .NET Framework 4.0.2 dans LocalDB programme d'installation. L'installation de la mise à jour du. Net Framework augmenterait la taille de L'installateur LocalDB et provoquer un redémarrage probable. Depuis LocalDB est construit pour être indépendant du .NET, nous ne pensions pas que nous devrait prendre ce coût pour chaque installation LocalDB. Future. net les versions (y compris .NET 4.5, maintenant en CTP) vont prendre en charge LocalDB à partir de boîte. Certains développeurs peuvent également vouloir opter pour ODBC, PHP Pilote / AOP, et probablement JDBC dans le futur. Les développeurs ne seront pas être intéressé par la mise à jour .NET.

23
répondu Aaron Bertrand 2012-04-19 14:56:26

comme le suggérait le post original, ce n'était pas aussi simple que prévu, mais j'ai finalement pu me connecter via le tuyau nommé.

Connecting to a LocalDB instance via named pipe

7
répondu Russell Speight 2014-01-10 05:23:35

CETTE RÉPONSE SUPPOSE QUE SUPPRIMER L'INSTANCE EST OK.

ie: toutes vos données seront parties et c'est OK.

j'avais le même problème, après avoir mis à jour mon SSMS.

sqllocaldb i
.\MyCustomInstance

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

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

pour se débarrasser de l'instance incriminée, j'ai dû en créer une autre MyCustomInstance ce qui, je suppose, va écraser ce qui est déjà là, et maintenant vous pouvez le supprimer

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

alors, démarrez l'instance et partagez-la. Vous devez impérativement démarrer l'instance premier.

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

maintenant, quand vous avez besoin de vous connecter, vous vous connectez avec (localdb)\.\MyCustomInstance

1
répondu ton.yeung 2016-08-26 16:23:41

Le problème est que vous devez citer le nom db:

sqlcmd -S "(localdb)\.\MySharedInstance"
-4
répondu Richard Hein 2012-11-23 16:02:44