sql >> Base de Datos >  >> Database Tools >> SSMS

Conexión remota a MS SQL:error al usar pyodbc vs éxito al usar SQL Server Management Studio

"Pero, ¿por qué...?"

Para aquellos interesados ​​en por qué SQL Server Management Studio (SSMS) puede conectarse a servername\instance mientras que otras aplicaciones (como nuestras aplicaciones pyodbc) no pueden hacerlo, se debe a que SSMS mantiene una lista de números de puerto MRU (Usados ​​más recientemente) en el registro de Windows en

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect

Cada entrada de MRU (valor de registro) se parece a esto:

Name: PANORAMA\SQLEXPRESS
Type: REG_SZ 
Data: -1006030326:tcp:PANORAMA,52865

Una vez que SSMS se haya conectado correctamente por nombre de instancia a través del servicio SQL Browser en la máquina remota, puede continuar conectándose por nombre de instancia incluso si SQL Browser ya no se está ejecutando en la máquina remota, siempre que el número de puerto no haya cambiado. Las aplicaciones que no usan esta lista de MRU (como nuestra aplicación pyodbc) deben tener el servicio de navegador SQL ejecutándose en la máquina remota cada vez que quieran conectarse por nombre de instancia.

El escenario más común:

  • Quiero conectarme a YOUR-PC\SQLEXPRESS . Intento hacerlo desde SSMS en MY-PC , pero no funciona porque el navegador SQL se instaló con el "Modo de inicio" establecido en "Manual" en YOUR-PC .
  • Le pido que inicie el servicio SQL Browser en YOUR-PC , y usted cumple amablemente, pero simplemente inicia el servicio y se olvida de cambiar la configuración del "Modo de inicio" a "Automático".
  • Puedo conectarme a través de SSMS (que almacena en caché el YOUR-PC\SQLEXPRESS puerto en la MRU). Mi aplicación Python también puede conectarse.
  • Después de la próxima vez YOUR-PC se reinicia, puedo conectarme a través de SSMS (a través de MRU) pero mi aplicación de python no puede (porque el servicio del navegador SQL ya no se ejecuta en YOUR-PC ).