sql-server - servidor - sql server express
¿Por qué no puedo conectarme a una instancia compartida de SQL Server 2012 LocalDB? (4)
Como sugirió la publicación original, esto no fue tan sencillo como se anticipó, pero finalmente pude conectarme a través de la tubería con nombre.
Estoy intentando configurar una instancia compartida de SQL Server 2012 LocalDB (RTM, x64) en mi máquina con Windows 7 x64 y parece que no puedo conectarme a la instancia compartida. Estoy usando un indicador de comando del Administrador para toda la configuración. Así es como estoy creando la instancia:
sqllocaldb create MyInstance
Lo que da la respuesta:
LocalDB instance "MyInstance" created with version 11.0.
Hasta ahora tan bueno. Ahora comparto la instancia:
sqllocaldb share "MyInstance" "MySharedInstance"
Lo que resulta en:
Private LocalDB instance "MyInstance" shared with the shared name: "MySharedInstance".
Todavía se ve bien. En este punto, el comando info produce:
./MySharedInstance
MyInstance
v11.0
La conexión a la instancia desde la cuenta del propietario (que es un administrador) usando un indicador de comando de administrador o no administrador parece funcionar bien. Sin embargo, las cosas se salen de las pistas cuando inicio sesión como usuario regular (no como administrador de Windows) e intento conectarme:
sqlcmd -S (localdb)/./MySharedInstance
resultados en:
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..
Aumentar el tiempo de espera de inicio de sesión utilizando el interruptor "-l" no ayuda. Puedo conectarme a la instancia v11.0 predeterminada, que no se comparte. El comando de información para el usuario no administrador produce lo mismo que el anterior, excepto sin "MyInstance", ya que es una instancia con nombre propiedad del usuario administrador. El siguiente comando (que funciona para el usuario administrador / propietario de la instancia):
sqllocaldb info "./MySharedInstance"
también resulta en un error:
Windows API call "FileTimeToSystemTime" returned error code: -2147024809.
Entonces, la pregunta es ¿por qué mi usuario no administrador puede conectarse a mi instancia compartida? Esto parece derrotar todo el propósito de las instancias compartidas. ¿Y qué ocurre con el comando "sqllocaldb info" que produce un error cuando intento consultar sobre la instancia compartida?
ESTA RESPUESTA ASUME QUE ELIMINAR LA INSTANCIA ESTÁ BIEN.
es decir: todos sus datos se habrán ido y eso está bien.
Estaba teniendo el mismo problema, después de actualizar mi SSMS.
sqllocaldb i
./MyCustomInstance
sqllocaldb d
LocalDb instance "./MyCustomInstance" does not exist!
sqllocaldb i ./MyCustomInstance
Windows API call "FileTimeToSystemTime" returned error code: -2147024809.
Para deshacerme de la instancia ofensiva, tuve que crear otra MyCustomInstance
que supongo que sobrescribirá lo que ya existe, y ahora puede eliminarlo
sqllocaldb c MyCustomInstance
LocalDB instance "MyCustomInstance" created with version 11.0.
sqllocaldb d ./MyCustomInstance
LocalDB instance "./Octopus" deleted.
Luego, inicia la instancia y compártela. Es imperativo que inicie la instancia primero.
sqllocaldb s MyCustomInstance
LocalDB instance "MyCustomInstance" started.
sqllocaldb h MyCustomInstance MyCustomInstance
Private LocalDB instance "MyCustomInstance" shared with the shared name: "MyCustomInstance".
Ahora, cuando necesita conectarse, se conecta con (localdb)/./MyCustomInstance
El problema es que necesitas citar el nombre de la base de datos:
sqlcmd -S "(localdb)/./MySharedInstance"
Otra edición
Cory, si tiene versiones anteriores de SQL Server instaladas (por ejemplo, 2008), esa es la versión de sqlcmd
que está usando. Para conectarse a LocalDb, debe estar utilizando la versión SQL Server 2012 de sqlcmd
. Por lo tanto, sus instrucciones para sus usuarios deben garantizar que usen la versión de SQL Server 2012 ejecutando:
C:/Program Files/Microsoft SQL Server/110/Tools/Binn/sqlcmd -S "(localdb)/./InstanceName"
Esto funcionó para mí. Lo que no he verificado es si esta ruta y la versión de sqlcmd
están disponibles para usuarios que solo han instalado sqllocaldb.msi. Lo siento, pero no tengo ninguna máquina desnuda sin SQL Server 2012 instalado (o con solo las versiones anteriores instaladas) para probar esto a fondo. Pero, por favor, avíseme si llamar explícitamente a la versión 110 de sqlcmd
hace el truco.
Creo que también puede instruir a los usuarios para que modifiquen sus variables de sistema para que las 110 versiones sean las primeras (lo que en mi humilde opinión debería ser el caso).
El FileTimeToSystemTime
ha sido confirmado como un error por uno de los colaboradores de Krzysztof. Así que todavía no hay una solución que conozca para que los no propietarios se conecten a través de sqllocaldb
. Pero he demostrado que tanto SSMS como sqlcmd
pueden funcionar, así que espero que eso te acerque más a la ejecución.
EDITAR
CREATE LOGIN [MyDomain/OtherUser] FROM WINDOWS;
agregar cualquier usuario que no sea propietario a la instancia, por ejemplo, CREATE LOGIN [MyDomain/OtherUser] FROM WINDOWS;
y cualquier permiso apropiado también. En mi prueba, el inicio de sesión estaba fallando y generaba un mensaje de error incorrecto (el mensaje de error "FileTimeToSystemTime" es un error). También necesitas GRANT CONNECT
. Una vez que haga esto, podrá conectarse desde el segundo usuario utilizando Management Studio con esta conexión (la única que probé):
(localdb)/./MySharedInstance
Pero desde sqlcmd
, todavía recibo un error, no importa cómo intente conectarme:
sqlcmd -S "(localdb)/./MySharedInstance"
sqlcmd -S "./MySharedInstance"
sqlcmd -S "(localdb)/MySharedInstance"
sqlcmd -S "GREENHORNET/MySharedInstance"
sqlcmd -S "./LOCALDB#SH04FF8A"
sqlcmd -S "GREENHORNET/LOCALDB#SH04FF8A"
Todo el rendimiento:
HResult 0xFFFFFFFF, Nivel 16, Estado 1 Interfaces de red de SQL Server:
Error al localizar el servidor / instancia especificada [xFFFFFFFF].
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0: Se ha producido un error específico de la instancia o relacionado con la red al establecer una conexión a SQL Server. El servidor no se encuentra o no es accesible. Compruebe si el nombre de la instancia es correcto y si SQL Server está configurado para permitir conexiones remotas. Para obtener más información, consulte los libros en línea de SQL Server.
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0: Tiempo de espera de inicio de sesión caducado.
Aunque he verificado que la instancia está configurada para aceptar conexiones remotas. Así que hay otro aro por el cual sqlcmd
debe estar pasando.
Y con respecto al exe sqllocaldb
, ¿cómo sigue esto alguna lógica? Puedo ver que la instancia está allí a través de la info
, recibo un mensaje de error correcto cuando intento detenerlo, recibo un mensaje de que ya está iniciado cuando intento iniciarlo, ¿pero no puedo conectarme?
Entonces, a menos que necesite el acceso a sqlcmd
, en el corto plazo, los usuarios secundarios harán su trabajo con SSMS (una vez que haya otorgado los permisos adecuados) y con suerte Krzysztof tendrá más información sobre los otros elementos.
Con respecto a la actualización 4.0.2, desde http://connect.microsoft.com/SQLServer/feedback/details/723737/smo-cant-connect-to-localdb-instances :
Tomamos la decisión explícita de no incluir .NET Framework 4.0.2 en el instalador de LocalDB. La instalación de la actualización de .NET Framework aumentaría el tamaño del instalador de LocalDB y causaría un reinicio probable. Dado que LocalDB está diseñado para ser independiente de .NET, no pensamos que deberíamos tomar este costo por cada instalación de LocalDB. Las versiones futuras de .NET (incluyendo .NET 4.5, ahora en CTP) admitirán LocalDB de manera inmediata. Es posible que algunos desarrolladores también deseen optar por ODBC, PHP Driver / PDO y probablemente JDBC en el futuro. Esos desarrolladores no estarán interesados en actualizar .NET.