locked
Error de conexión a SQL Server 2008

    Question

  • Hola a todos,

    Tengo una máquina virtual con Windows 2008, en esta máquina hay instalada una instancia de SQL Server 2000 (SQL2000) y otra de SQL Server 2008 (SQL2008).

    Desde la máquina virtual de desarrollo con VS2008, puedo crear conexiones a las bases de datos de la instancia SQL2000 sin problemas, sin embargo a la instancia SQL2008 no hay manera.

    El error que me aparece cuando intento configurar una conexión es "Error relacionado con la red o especifico de la instancia mientras se establecía una conexión con el servidor SQL Server. No se encontró el servidor o éste no estaba accesible. Compruebe que el nombre de la instancia es correcto y que SQL Server está configurado para admiitir conexiones remotas. (provider: Interface de red SQL, error: 26 - Error al buscar el servidor o instancia especificado)".

    Como la instancia de SQL2000 es la primera que se instaló en el servidor, tiene el mismo nombre que el servidor y proporcionando el nombre del servidor se conecta sin problemas. De igual modo tambien se conecta sin problemas si facilito la IP del servidor.

    Para conectar con la instancia de SQL2008 escribo en la casilla "Servidor\SQL2008", siendo servidor el nombre del servidor y no conecta. Si le doy la IP del servidor me conecta con la instancia de SQL2000.

    En la configuración de SQL Server 2008 tengo habilitados los protocolos TCP/IP y las canalizaciones con nombre. La base de datos con la que quiero conectar tiene habilitado el permiso de acceso remoto. Conectarme por Telnet no lo puedo hacer porque el puerto esta cerrado.

    Las pruebas las realizo con el usuario sa y el servidor SQL2008 esta configurado para autenticación mixta, Windows y SQL Server. No puedo utilizar la autenticación de Windows porque no hay establecido un dominio, la red es por grupo de trabajo.

    Evidentemente hay algo que no escribo bien o no tengo bien configurado.  

    ¿Que otras formas hay para probar una conexión?, ¿Que debería comprobar que esté abierto o configurado?

    Gracias por anticipado.
    Tomás.
    Tomas
    Sunday, August 30, 2009 7:46 PM

Answers

  • Hola.

    Es entonces es que era el firewall.

    En cuanto a que el nombre de la instancia (servidor\instancia) aparezcan en las listas desplegables, ya debería listarse, es una tarea que realiza el servicio SQL Browser, el cual ya indicaste que estaba arrancado. Corrobora que el puerto de este servicio (UDP 1434) no está cortado por ese mismo firewall.

    En algunas aplicaciones (como Management Studio), lo que se lista son los últimos servidores a los que conectaste (salvo una opción en el menú de conexión que permite buscar servidores dentro de la red).

    Alberto López Grande.
    Monday, August 31, 2009 10:16 AM
  • Hola.

    Vayamos por partes. El servicio SQL Browser, que es el que rastrea los servidores de SQL Server de una red, sólo esta 1 vez, no una vez por instancia. De hecho, basta con que haya 1 en la red, no hace falta ni que esté en cada máquina. Este servicio es el que usa el puerto UDP 1434. Y la instancia de 2000 era visible porque los firewalls normalmente permiten el acceso a SQL Server por el puerto 1433, pero no en otros puertos (como era el caso de la instancia 2008).


    Alberto López Grande.
    • Marked as answer by Tomas-Msdn Monday, August 31, 2009 2:02 PM
    Monday, August 31, 2009 12:12 PM
  • Hola.

    Es el primer caso que veo en el que una instancia de SQL Server se instala en el mismo puerto que otra instancia, pero desde luego eso no tiene sentido (otra cosa es que se haga a mano). Debes tener errores en el log de la instancia que arranca la segunda. Ahora está resuelto, así que por ese lado, no hay más problema.

    En una instalación "normal", cada instancia toma un puerto.


    Alberto López Grande.
    • Marked as answer by Tomas-Msdn Monday, August 31, 2009 2:41 PM
    Monday, August 31, 2009 2:22 PM

All replies

  • Hola.

    Pueden ser un montón de cosas, entre ellas y yo diría que más probable, un firewall, ya que dices que no puedes hacer telnet al puerto en el que escucha esa instancia. Asegúrate también de que el servicio SQL Browser está corriendo (es el que permite averiguar el puerto en el que está escuchando la instancia). Si no es eso y todo lo demás (nombres correctos, contraseñas correctas, etc.), nos dices.


    Alberto López Grande.
    Sunday, August 30, 2009 9:10 PM
  • En la configuración de SQL Server 2008 tengo habilitados los protocolos TCP/IP y las canalizaciones con nombre. La base de datos con la que quiero conectar tiene habilitado el permiso de acceso remoto. Conectarme por Telnet no lo puedo hacer porque el puerto esta cerrado.
    Pues allí parece estar el problema. Verifique que no haya un firewall bloqueando el puerto donde la instancia está escuchando.
    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    Monday, August 31, 2009 12:27 AM
  • Hola Alberto,

    En servicio SQL Browser está corriendo. Una cosa que me desconcierta es que estando corriendo este servicio, el asistente de configuraciones de conexiones de VS2008 no sea capaz de descubrir el servidor SQL2008, ¿conocen otras programas o formas de crear comprobar las conexiones?

    La instancia SQL2008 escuha por el puerto 1433. He detenido el servidor SQL2000 para ver si no intercepta la entrada por este puerto y el trafico que llega por el 1433 lo recibe la instancia SQL2008, pero da el mismo error.

    He probado de cambiar el puerto a 1434 para SQL2008, he abierto una regla en el firewall para este puerto, copiando los mismos parametros que existen para la regla del puerto 1433 y tampoco ha dado resultado. El cambio del puerto lo he hecho en la vista de propiedades del protocolo de cliente FTP/IP, en el SQL Configuration Manager, ¿sólo es necesario hacerlo aquí, verdad?

    Evidentemente hay algo que no esta bien, pero debe ser tan sutil que no puedo verlo, ¿alguna sugerencia?

    Gracias.
    Tomas
    Monday, August 31, 2009 7:29 AM
  • Hola.

    Hay varias cosas confusas en lo que dices, como que la instancia por defecto sea la de 2000, pero que no escuche en el puerto 1433 y que sea una instancia con nombre (la de 2008) la que esté en ese puerto. Así que vamos a ir primero a comprobar que la instancia de 2008 está funcionando. ¿Puedes conectarte localmente al servidor? Prueba a crear una UDL para verificarlo (http://msdn.microsoft.com/en-us/library/e38h511e(VS.71).aspx).

    Si no puedes conectarte localmente, entonces el problema está en el servidor, verifica usuarios, contraseña, nombre de la instancia, etc. Si puedes conectarte, el problema está entre el servidor y el cliente. Prueba a quitar temporalmente todo firewall existente entre las dos máquinas. De todos modos, si no le puedes hacer un telnet, no vas a poder conectar.

    Recuerda que para que tome efecto el cambio de puerto has de reiniciar el servicio de SQL Server.

    Alberto López Grande.
    Monday, August 31, 2009 7:42 AM
  • Hola Gustavo,

    He realizado pruebas de conexión desde una hoja Excel y como en los otros casos, la única instancia que es visible es la de SQL2000 que esta nombrada con el mismo nombre del servidor, en este caso 2008R2.

    La otra instancia de Sql Server 2008 que a mi entender debería mostrarse como 2008R2\SQL2008, no es visible en momento alguno, ni desde Excel en la máquina real, ni desde VS2008 en la máquina virtual y tampoco desde VS2005 en otra máquina virtual con la que también he realizado pruebas.

    ¿Donde debo mirar para asegurarme que el nombre de la instancia SQL2008 se publica o se hace visible?

    Gracias.
    Tomas
    Monday, August 31, 2009 7:44 AM
  • Hola.

    ¿Probaste lo que te comenté? 

    El nombre de la instancia lo puedes ver, por ejemplo, en el panel de servicios. Localiza el servicio que comience por "SQL Server" y en el nombre, lo que va entre paréntesis es nombre de la instancia (salvo la instancia por defecto, que pone MSSQLSERVER).

    Alberto López Grande.
    Monday, August 31, 2009 8:46 AM
  • Desde la máquina cliente, que es una máquina virtual con XP, he creado una conexion UDL y en la caja que pide el nombre del servidor muestra 2008R2, que es el nombre de la instancia principal del SQL Server que se corresponde con una instancia de SQL Server 2000.

    La instancia de SQL Server 2008, está identificada como SQL2008, como se puede ver en Sql Server Configuration Manager -> Servicios de SQL Server -> SQL Server (SQL2008). Con esta instancia no hay forma de conectar.

    Con la instancia 2008R2 se puede conectar sin problemas. tanto por el nombre de la instancia como por IP.

    Despues de esta primera prueba he cambiado en Sql Server Configuration Manager -> Protocolos de SQL2008 -> TCP/IP -> Propiedades -> DireccionesIP -> IPAll -> Puerto TCP = 1443, antes en ésta caja no había nada, estaba en blanco.

    En Configuración de SQL Native Client 10.0 -> Protocolos de cliente -> TCP/IP -> Propiedades -> Puerto predeterminado = 1443, antes tenía el puerto 1433.

    He creado una regla en el Firewall para abrir el puerto 1443 para la subred local y he vuelto a crear una conexion UDL, en esta ocasión, ¡POR FIN!, he podido conectar con la instancia de SQL2008.

    El poder conectar por la IP ya es un paso para no estar detenido, como me ocurría hasta ahora y así poder seguir haciendo cosas.

    Ahora me gustaría saber como puedo hacer para que la instancia 2008R2\SQL2008 sea visible y se pueda conectar a ella por nombre y pueda ser seleccionable en todas las cajas de texto, como en la caja de UDL donde pide el nombre del servidor y se debería poder descubrir automáticamente.
    Tomas
    Monday, August 31, 2009 9:38 AM
  • Hola.

    Es entonces es que era el firewall.

    En cuanto a que el nombre de la instancia (servidor\instancia) aparezcan en las listas desplegables, ya debería listarse, es una tarea que realiza el servicio SQL Browser, el cual ya indicaste que estaba arrancado. Corrobora que el puerto de este servicio (UDP 1434) no está cortado por ese mismo firewall.

    En algunas aplicaciones (como Management Studio), lo que se lista son los últimos servidores a los que conectaste (salvo una opción en el menú de conexión que permite buscar servidores dentro de la red).

    Alberto López Grande.
    Monday, August 31, 2009 10:16 AM
  • Hola Alberto,

    Termino de crear una regla en el Firewall para el puerto UDP 1434 y ¡POR FIN! ya es visible la instancia de SQL2008 con el formato de servidor\instancia.

    Hay una cosa que me tiene despistado y es que si SQL2000 y SQL2008 utilizan el puerto UDP 1434 para hacerse visibles, ¿porqué hasta que he creado la regla para este puerto la instancia con nombre que se corresponde a SQL2008 no ha sido visible y la SQL2000 siempre ha sido visible?.

    Gracias por tu tiempo.

    Tomas
    Monday, August 31, 2009 11:27 AM
  • Hola.

    Vayamos por partes. El servicio SQL Browser, que es el que rastrea los servidores de SQL Server de una red, sólo esta 1 vez, no una vez por instancia. De hecho, basta con que haya 1 en la red, no hace falta ni que esté en cada máquina. Este servicio es el que usa el puerto UDP 1434. Y la instancia de 2000 era visible porque los firewalls normalmente permiten el acceso a SQL Server por el puerto 1433, pero no en otros puertos (como era el caso de la instancia 2008).


    Alberto López Grande.
    • Marked as answer by Tomas-Msdn Monday, August 31, 2009 2:02 PM
    Monday, August 31, 2009 12:12 PM
  • A vale, desconocía éste detalle del funcionamiento del servicio SQL Browser.

    Entonces entiendo que el primer problema que tenía para poder conectar con la instancia de SQL2008, es que ambas instancias escuchaban por el puerto TCP 1433 y que la instancia de SQL2000, supongo tenía preferencia y recibía todo el trafico del puerto 1433.

    ¿O esto no es así y todas las instancias de SQL Server que se instalen en un servidor pueden recibir datos por el mismo puerto 1433?


    Tomas
    Monday, August 31, 2009 2:01 PM
  • Hola.

    Es el primer caso que veo en el que una instancia de SQL Server se instala en el mismo puerto que otra instancia, pero desde luego eso no tiene sentido (otra cosa es que se haga a mano). Debes tener errores en el log de la instancia que arranca la segunda. Ahora está resuelto, así que por ese lado, no hay más problema.

    En una instalación "normal", cada instancia toma un puerto.


    Alberto López Grande.
    • Marked as answer by Tomas-Msdn Monday, August 31, 2009 2:41 PM
    Monday, August 31, 2009 2:22 PM
  • Ahora entiendo porqué tenía estos problemas tan raros, había una mezcla de puertos y filtros del Firewall.

    Gracias por todo Alberto.
    Tomas
    Monday, August 31, 2009 2:41 PM