22

我想在我的Windows 7 x64机器上建立一个SQL Server 2012 LocalDB(RTM,x64)共享实例,我似乎无法连接到共享实例。我正在使用管理员命令提示符进行所有设置。下面是我如何创建实例:为什么我无法连接到SQL Server 2012 LocalDB共享实例?

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

仍在寻找好。在这一点上,我的信息的命令得到:同时使用管理员或非管理员命令提示符

.\MySharedInstance 
MyInstance 
v11.0 

连接到从所有者帐户(这是管理员)的情况下,似乎很好地工作。事情脱落的轨道,不过,当我登录为普通用户(不是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实例。除非没有“MyInstance”,否则非admin用户的info命令会产生与上述相同的结果,因为它是admin用户拥有的命名实例。下面的命令(其中工程管理员用户/实例所有者):

sqllocaldb info ".\MySharedInstance" 

也导致错误:

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

所以,问题是,为什么不能我非管理员用户连接到我的共享实例?这似乎打败了共享实例的全部目的。当我尝试查询共享实例时,“sqllocaldb info”命令有什么问题会引发错误?

+0

你说的是一个非管理员的Windows用户连接?所以你已经注销并以不同的用户身份登录?或者是用户试图从不同的机器连接? – 2012-04-18 17:37:56

+0

以不同的用户身份登出并重新登录。我不需要从不同的机器连接。 – 2012-04-18 17:55:53

+0

您确定实例在注销事件之后仍然存在吗?如果您以管理员用户身份注销并重新登录,会发生什么情况?我怀疑你会遇到同样的问题。 – 2012-04-18 18:00:11

回答

24

ANOTHER编辑

科里,如果你有安装了SQL Server(例如2008年)以前的版本,那就是sqlcmd版本所使用。为了连接到LocalDb,您需要使用sqlcmd的SQL Server 2012版本。所以,你的用户在你的指令必须确保他们通过运行使用SQL Server 2012版本:

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

这为我工作。我没有验证的是sqlcmd的这个路径和版本是否可用于仅有的用户安装了sqllocaldb.msi。很抱歉,我没有安装SQL Server 2012的裸机(或只安装了以前的版本)来彻底试用。但是,如果明确地调用sqlcmd的110版本,请告诉我。

我认为你也可以指导用户改变他们的系统变量,以便110个版本优先(恕我直言自动应该是这种情况)。

FileTimeToSystemTime已经被Krzysztof的同事证实为一个错误。因此,我仍然没有解决非业主通过sqllocaldb进行连接的问题。但我已经证明SSMS和sqlcmd都可以运作,所以我希望让你更接近跑步。

编辑

你需要的任何非所有者用户添加到该实例,例如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, Level 16, State 1 SQL Server Network Interfaces:

Error Locating Server/Instance Specified [xFFFFFFFF].

Sqlcmd: Error: Microsoft SQL Server Native Client 10.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..

Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : Login timeout expired.

虽然我已经验证实例设置为交流检查远程连接。所以sqlcmd必须经过一些其他的箍。

而关于sqllocaldb exe,这是如何遵循任何逻辑?我可以通过info看到实例,当我试图阻止它时,我收到了一条正确的错误消息,当我尝试启动它时,我收到一条消息,说明[它已经]已启动,但我无法连接到它?

enter image description here

所以,除非你需要sqlcmd访问,在短期内我将有二次用户做他们的事与SSMS(一旦你授予足够的权限),希望克日什托夫·将有更多信息其他项目。


关于4.0.2更新,从http://connect.microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances

We made an explicit decision not to include .NET Framework 4.0.2 in LocalDB installer. Installing the .NET Framework update would increase the size of the LocalDB installer and cause a likely reboot. Since LocalDB is built to be independent of the .NET, we didn’t think we should take this cost for every LocalDB installation. Future .NET versions (including .NET 4.5, now in CTP) will support LocalDB out of the box. Some developers may also want to opt in for ODBC, PHP Driver/PDO, and probably JDBC in the future. Those developers will not be interested in updating .NET.

+3

这解决了我的问题! – Andy 2013-05-03 16:12:35

+0

对我也是 – Gomes 2013-09-26 10:01:42

-4

问题是你需要引用的数据库名称:

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

我不认为这是答案;一旦我使用正确版本的sqlcmd(Sql Server 2012附带的版本),我就不需要引用它。 – Andy 2013-05-03 16:13:12

6

由于原来的建议后,该WASN没有预期的那么直接,但我最终能够通过命名管道进行连接。

Connecting to a LocalDB instance via named pipe

+0

奇怪的是,我与默认的MSSQLLocalDB实例有相同的问题,并且通过实例管道名称进行连接(删除之前存在的C:\ Users \ \中的数据库MDF和LDF文件之后)。 – 2017-01-19 17:12:12

1

这个答案承担,删除实例确定。
ie:你所有的数据都将消失,那没关系。

升级我的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