¿Cómo encontrar el puerto para MS SQL Server 2008?

107

Estoy ejecutando MS SQL Server 2008 en mi máquina local. Sé que el puerto predeterminado es 1433, pero de alguna manera no escucha en este puerto. El SQL es una edición Express.

Ya probé el registro, SQL Server Management Studio, el registro y el procedimiento almacenado extendido para encontrar el puerto. Pero no pude encontrarlo. Por favor, ayúdame. Gracias.

fantasma real
fuente
Estoy actualizando la pregunta con otros recursos que miré para que tenga marcadores de ellos y otros puedan hacer uso de ellos también. blogs.msdn.com/sql_protocols/archive/2008/11/05/… decipherinfosys.wordpress.com/2008/01/02/… dumbledad.wordpress.com/2008/07/09/…
royalghost
Estoy usando la vista TCP para ver el puerto en el que se está ejecutando. Me sorprende ver que el servidor está tomando un puerto dinámico en lugar de 1433 incluso después de instalarlo como instancia predeterminada. También desinstalé la edición express e instalé la edición completa, después de lo cual solo puedo ver el proceso como sqlservr.exe: 5272. Y mi suposición es que está escuchando en el puerto 5272.
royalghost

Respuestas:

140

Haga clic en el Startbotón en Windows. IrAll Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager

Haga clic en SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IP hacer doble clic (clic derecho en seleccionar Properties) en TCP/IP.

Encontrarás Default Port 1433.

Según la conexión, el número de puerto puede variar.

UdayKiran Pulipati
fuente
En mi computadora, con Windows 10 y con SQL Server 2012 Express instalado, el Administrador de configuración de SQL Server no aparece en el menú de inicio de Windows, pero se puede encontrar en el complemento MMC de Administración de equipos en el grupo Servicios y aplicaciones . El puerto dinámico tampoco se encuentra en el elemento 'Configuración de cliente nativo de SQL' (que es la versión "11.0" para mí) sino en el elemento Configuración de red de SQL Server (y en la pestaña Direcciones IP de la ventana de propiedades del protocolo TCP / IP , en la parte inferior, en la configuración TCP Dynamic Ports ).
Kenny Evitt
Esta respuesta se refiere al puerto del cliente, no al puerto del servidor, que es lo que se pregunta en la pregunta original. La respuesta de @ brothers28 a continuación es más precisa.
Slogmeister Extraordinaire
52

También puedes mirar con un

netstat -abn

Le da a los puertos la aplicación correspondiente que los mantiene abiertos.

Editar : o TCPView .

rslite
fuente
¿Puede decirme con qué nombre se llama MS SQL Server 2008 como aplicación?
royalghost
2
Debería ser sqlservr.exe (aunque no tengo uno para verificar).
rslite
1
Esto funcionó para mí. El número de puerto está en la línea de arriba [sqlservr.exe].
Zane
Lo encontré en Ssms.exe
ThiagoPonte
49

Aquí hay 5 métodos que encontré:

  • Método 1: Administrador de configuración de SQL Server
  • Método 2: Visor de eventos de Windows
  • Método 3: registros de errores de SQL Server
  • Método 4: sys.dm_exec_connections DMV
  • Método 5: leer el registro usando xp_instance_regread

Método 4: sys.dm_exec_connections DMV
Creo que esta es casi la forma más fácil ... Los
DMV devuelven el estado del servidor que se puede usar para monitorear la instancia de SQL Server. Podemos usar sys.dm_exec_connections DMV para identificar el número de puerto que la instancia de SQL Server está escuchando usando el siguiente código T-SQL:

SELECT local_tcp_port
FROM   sys.dm_exec_connections
WHERE  session_id = @@SPID
GO

Result Set:
local_tcp_port
61499

(1 row(s) affected)

Método 1: Administrador de configuración de SQL Server

Paso 1. Haga clic en Inicio> Todos los programas> Microsoft SQL Server 2012> Herramientas de configuración> Administrador de configuración de SQL Server

Paso 2. Vaya a Administrador de configuración de SQL Server> Configuración de red de SQL Server> Protocolos para

Paso 3. Haga clic derecho en TCP / IP y seleccione Propiedades

ingrese la descripción de la imagen aquí

Paso 4. En el cuadro de diálogo Propiedades de TCP / IP, vaya a la pestaña Direcciones IP y desplácese hacia abajo hasta el grupo IPAll.

ingrese la descripción de la imagen aquí

Si SQL Server está configurado para ejecutarse en un puerto estático, estará disponible en el cuadro de texto TCP Port, y si está configurado en un puerto dinámico, el puerto actual estará disponible en el cuadro de texto TCP Dynamic Ports. Aquí mi instancia está escuchando en el puerto número 61499.

Los otros métodos que puede encontrar aquí: http://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/

hermanos28
fuente
1
Trabajó para mi. Probé las propiedades de TCP / IP de la configuración del cliente nativo de SQL y devolvía el valor predeterminado 1433. Pero cuando verifiqué los puertos dinámicos de TCP de la configuración de red de SQL Server. Encontré que el puerto es 67244. Y después de eso pude conectarme con éxito a ese puerto. +1
Reuben
17

Me encontré con esto porque tuve problemas para crear una conexión remota y no podía entender por qué la configuración del puerto 1433 en el firewall no funciona. Finalmente tengo la imagen completa ahora, así que pensé que debería compartirla.

En primer lugar, es imprescindible habilitar "TCP / IP" utilizando el Administrador de configuración de SQL Server en Protocolos para SQLEXPRESS.

Cuando se utiliza una instancia con nombre ("SQLExpress" en este caso), escuchará en un puerto dinámico. Para encontrar este puerto dinámico tiene un par de opciones; para nombrar unos pocos:

  • comprobación ERRORLOGde SQL Server ubicado en '{MS SQL Server Path}\{MS SQL Server instance name}\MSSQL\Log'(dentro encontrará una línea similar a esta: "2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]"-> por lo que 51118 es el puerto dinámico en este caso.

  • comprobando registro:, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{MSSQL instance name}\MSSQLServer\SuperSocketNetLib\Tcp\IPAllpara mi caso TcpDynamicPorts=51118.

    Editar : {MSSQL instance name}es algo como:, MSSQL10_50.SQLEXPRESSno soloSQLEXPRESS

Por supuesto, permitir este puerto TCP en el firewall y crear una conexión remota pasando: "x.x.x.x,51118"(donde xxxx es la ip del servidor) ya lo resuelve en este punto.

Pero luego quería conectarme de forma remota pasando el nombre de la instancia (por ejemplo:) x.x.x.x\SQLExpress. Aquí es cuando entra en juego el servicio SQL Browser. Esta es la unidad que resuelve el nombre de la instancia en el puerto 51118. El servicio del navegador SQL escucha en el puerto UDP 1434 (estándar y estático), así que tuve que permitir esto también en el firewall del servidor.

Para extender un poco la respuesta real: si a alguien más no le gustan los puertos dinámicos y quiere un puerto estático para su instancia de SQL Server, debería probar este enlace .

Aprendiz
fuente
1
+1 para el servicio de navegador SQL. Esta es la clave de cómo funciona SQL Express con los números de puerto
peterG
11

En el registro de ERROLOG para una línea como la siguiente. Si no lo ve, SQL Server no está habilitado para acceso remoto, o simplemente no lo está a través de TCP. Puede cambiar esto a través del Administrador de configuración de SQL Server.

Server is listening on [ 192.128.3.2 <ipv4> 1433].
mrdenny
fuente
No veo ese registro, pero en SQL Server Management Studio, en Conexiones, "Permitir conexiones remotas a este servidor" está marcado. Por lo tanto, tengo entendido que se permite la conexión remota.
royalghost
@royal: Además de 'permitir conexiones remotas', también debe habilitar el protocolo TCP. En este momento, el servidor probablemente solo esté escuchando NP
Remus Rusanu
vea la respuesta a continuación de @morteza para leer el registro a través de una consulta SQL xp_readerrorlog 0, 1, N'Server is listening on'
Tilo
8

Resolví el problema habilitando TCP / IP usando el Administrador de configuración de SQL Server en Protocolos para SQLEXPRESS2008, reinicié el servicio y ahora el "El servidor está escuchando" aparece en el archivo ERRORLOG

Lepez
fuente
8

Prueba esto (requiere acceso a sys.dm_exec_connections):

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL
Tilo
fuente
3
FYI: si el servidor SQL no tiene una conexión abierta, es probable que no muestre nada.
Tilo
6
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc' 
GO

[Identifique el puerto utilizado por la instancia con nombre del motor de base de datos de SQL Server leyendo los registros de errores de SQL Server]

Morteza
fuente
1
gracias buen consejo Morteza, obtengo un error al usar lo anterior en SQL2012 pero lo siguiente es suficiente para mis necesidades: XP_READERRORLOG 0, 1, N'Server está escuchando '
mattpm
Copie ese error con su consulta, pero esto funciona, xp_readerrorlog 0, 1, N'Server is listening on'
Tilo
6

Puede utilizar estos dos comandos: tasklistynetstat -oan

Tasklist.exees como taskmgr.exepero en modo texto.

Con tasklist.exeo taskmgr.exepuede obtener un PID desqlservr.exe

Con netstat -oan, muestra un PID de conexión y puede filtrarlo.

Ejemplo:

C:\>tasklist | find /i "sqlservr.exe"
sqlservr.exe  1184 Services    0 3.181.800 KB

C:\>netstat -oan | find /i "1184"
TCP  0.0.0.0:1280  0.0.0.0:0  LISTENING  1184

En este ejemplo, el puerto de SQLServer es 1280

Extraído de: http://www.sysadmit.com/2016/03/mssql-ver-puerto-de-una-instancia.html

Demestrestalk
fuente
5

Yo uso el siguiente script en SSMS

SELECT
     s.host_name
    ,c.local_net_address
    ,c.local_tcp_port
    ,s.login_name
    ,s.program_name
    ,c.session_id
    ,c.connect_time
    ,c.net_transport
    ,c.protocol_type
    ,c.encrypt_option
    ,c.client_net_address
    ,c.client_tcp_port
    ,s.client_interface_name
    ,s.host_process_id
    ,c.num_reads as num_reads_connection
    ,c.num_writes as num_writes_connection
    ,s.cpu_time
    ,s.reads as num_reads_sessions
    ,s.logical_reads as num_logical_reads_sessions
    ,s.writes as num_writes_sessions
    ,c.most_recent_sql_handle
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id

--filter port number
--WHERE c.local_tcp_port <> 1433
Rubens
fuente
No estoy seguro de por qué se rechazó, no da la respuesta inmediata, pero le da la respuesta y mucho más. Añadiendo esto a mi lista de consultas útiles.
Tony
Al igual que la consulta, también parece que no se muestra si no hay conexión abierta / establecida.
Tilo
4

Esto también se puede hacer a través de un escaneo de puertos, que es el único método posible si no tiene acceso de administrador a un servidor remoto.

El uso de Nmap ( http://nmap.org/zenmap/ ) para hacer un "escaneo TCP intenso" le dará resultados como este para todas las instancias en el servidor:

[10.0.0.1\DATABASE]    
Instance name: DATABASE
Version: Microsoft SQL Server 2008 R2 RTM    
Product: Microsoft SQL Server 2008 R2    
Service pack level: RTM    
TCP port: 49843    
Named pipe: \\10.0.0.1\pipe\MSSQL$DATABASE\sql\query

Nota importante: para probar con el analizador de consultas o MS SQL Server Management Studio, debe formar el nombre de su servidor y el puerto de manera diferente a como lo haría normalmente para conectarse a un puerto, a través de HTTP, por ejemplo, usando una coma en lugar de dos puntos .

  • Nombre del servidor de Management Studio: 10.0.0.1,49843
  • Cadena de conexión: Data Source=10.0.0.1,49843

sin embargo

  • Cadena de conexión JDBC: jdbc:microsoft:sqlserver://10.0.0.1:49843;DatabaseName=DATABASE
Shane
fuente
1

Esto funciona para SQL Server 2005 - 2012. Busque id de evento = 26022 en el registro de errores en aplicaciones. Eso mostrará el número de puerto del servidor SQL, así como las direcciones IP que pueden acceder.

Mukus
fuente
1

Además de lo que se enumera anteriormente, tuve que habilitar los puertos TCP y UDP para que SQLExpress se conectara de forma remota. Como tengo tres instancias diferentes en mi máquina de desarrollo, habilito 1430-1435tanto TCP como UDP.

D. Davidson
fuente