Come trovare la porta per MS SQL Server 2008?


107

Sto eseguendo MS SQL Server 2008 sulla mia macchina locale. So che la porta predefinita è 1433 ma in qualche modo non è in ascolto su questa porta. L'SQL è un'edizione Express.

Ho già provato il log, SQL Server Management Studio, il registro e la stored procedure estesa per trovare la porta. Ma non sono riuscito a trovarlo. Mi aiuti per favore. Grazie.


Sto aggiornando la domanda con altre risorse che ho esaminato in modo che ne abbia i segnalibri e che anche altri possano farne uso. blogs.msdn.com/sql_protocols/archive/2008/11/05/... decipherinfosys.wordpress.com/2008/01/02/... dumbledad.wordpress.com/2008/07/09/...
royalghost

Sto usando la vista TCP per vedere la porta su cui è in esecuzione. Sono sorpreso di vedere che il server sta prendendo una porta dinamica invece di 1433 anche dopo averlo installato come istanza predefinita. Ho anche disinstallato l'edizione express e ho installato l'edizione completa, dopodiché solo io posso vedere il processo come sqlservr.exe: 5272. E, la mia ipotesi è che sia in ascolto alla porta 5272.
royalghost

Risposte:


140

Fare clic sul Startpulsante in Windows. Vai aAll Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager

Fare clic su SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IP doppio clic (selezione con clic destro Properties) su TCP/IP.

Troverai Default Port 1433.

A seconda della connessione, il numero di porta può variare.


Sul mio computer, che esegue Windows 10 e con SQL Server 2012 Express installato, SQL Server Configuration Manager non è elencato nel menu Start di Windows ma può essere trovato nello snap-in MMC Gestione computer nel gruppo Servizi e applicazioni . Anche la porta dinamica non si trova nella voce "Configurazione client SQL nativa" (che è la versione "11.0" per me) ma nella voce Configurazione di rete SQL Server (e nella scheda Indirizzi IP della finestra delle proprietà del protocollo TCP / IP , in in fondo, nelle impostazioni TCP Dynamic Ports ).
Kenny Evitt

Questa risposta si riferisce alla porta del client, non alla porta del server che è ciò che viene chiesto nella domanda originale. La risposta di @ brothers28 di seguito è più accurata.
Slogmeister Extraordinaire

52

Puoi anche guardare con un file

netstat -abn

Fornisce le porte con l'applicazione corrispondente che le tiene aperte.

Modifica : o TCPView .


Potete farmi sapere con quale nome è denominato MS SQL Server 2008 come applicazione?
royalghost

2
Dovrebbe essere sqlservr.exe (non ne ho uno da controllare).
rslite

1
Questo ha funzionato per me. Il numero di porta si trova sulla riga sopra [sqlservr.exe].
Zane

L'ho trovato sotto Ssms.exe
ThiagoPonte

49

Ecco 5 metodi che ho trovato:

  • Metodo 1: Gestione configurazione SQL Server
  • Metodo 2: Visualizzatore eventi di Windows
  • Metodo 3: registri degli errori di SQL Server
  • Metodo 4: sys.dm_exec_connections DMV
  • Metodo 5: lettura del registro utilizzando xp_instance_regread

Metodo 4: sys.dm_exec_connections DMV
Penso che questo sia quasi il modo più semplice ... I
DMV restituiscono lo stato del server che può essere utilizzato per monitorare l'istanza di SQL Server. Possiamo utilizzare sys.dm_exec_connections DMV per identificare il numero di porta dell'istanza di SQL Server in ascolto utilizzando il codice T-SQL di seguito:

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

Result Set:
local_tcp_port
61499

(1 row(s) affected)

Metodo 1: Gestione configurazione SQL Server

Passaggio 1. Fare clic su Start> Tutti i programmi> Microsoft SQL Server 2012> Strumenti di configurazione> Gestione configurazione SQL Server

Passaggio 2. Accedere a Gestione configurazione SQL Server> Configurazione di rete SQL Server> Protocolli per

Passaggio 3. Fare clic con il pulsante destro del mouse su TCP / IP e selezionare Proprietà

inserisci qui la descrizione dell'immagine

Passaggio 4. Nella finestra di dialogo Proprietà TCP / IP, vai alla scheda Indirizzi IP e scorri verso il basso fino al gruppo IPAll.

inserisci qui la descrizione dell'immagine

Se SQL Server, se configurato per essere eseguito su una porta statica, sarà disponibile nella casella di testo Porta TCP e se è configurato su una porta dinamica, la porta corrente sarà disponibile nella casella di testo Porte dinamiche TCP. Qui la mia istanza è in ascolto sulla porta numero 61499.

Gli altri metodi si possono trovare qui: http://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/


1
Ha funzionato per me. Ho provato le proprietà TCP / IP della configurazione di SQL Native Client e che restituiva il valore predefinito 1433. Ma quando ho controllato le porte dinamiche TCP da Configurazione di rete di SQL Server. Ho scoperto che la porta è 67244. Dopo di che sono riuscito a connettermi con successo a quella porta. +1
Reuben

17

Mi sono imbattuto in questo perché ho appena avuto problemi a creare una connessione remota e non riuscivo a capire perché la configurazione della porta 1433 nel firewall non stia facendo il lavoro. Finalmente ho il quadro completo ora, quindi ho pensato di condividerlo.

Prima di tutto è necessario abilitare "TCP / IP" utilizzando SQL Server Configuration Manager in Protocolli per SQLEXPRESS!

Quando viene utilizzata un'istanza denominata ("SQLExpress" in questo caso), questa sarà in ascolto su una porta dinamica. Per trovare questa porta dinamica hai un paio di opzioni; per dirne alcuni:

  • verifica ERRORLOGdi SQL Server situato in '{MS SQL Server Path}\{MS SQL Server instance name}\MSSQL\Log'(all'interno troverai una riga simile a questa: "2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]"-> quindi 51118 è la porta dinamica in questo caso.

  • controllo del registro:, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{MSSQL instance name}\MSSQLServer\SuperSocketNetLib\Tcp\IPAllper il mio caso TcpDynamicPorts=51118.

    Modifica : {MSSQL instance name}è qualcosa come:, MSSQL10_50.SQLEXPRESSnon soloSQLEXPRESS

Ovviamente, abilitare questa porta TCP nel firewall e creare una connessione remota passando: "x.x.x.x,51118"(dove xxxx è l'ip del server) lo risolve già a questo punto.

Ma poi volevo connettermi da remoto passando il nome dell'istanza (es:) x.x.x.x\SQLExpress. È qui che entra in gioco il servizio SQL Browser. Questa è l'unità che risolve il nome dell'istanza nella porta 51118. Il servizio SQL Browser ascolta sulla porta UDP 1434 (standard e statica), quindi ho dovuto consentirlo anche nel firewall del server.

Per estendere un po 'la risposta effettiva: se qualcun altro non ama le porte dinamiche e vuole una porta statica per la sua istanza di SQL Server, dovrebbe provare questo collegamento .


1
+1 per il servizio SQL Browser. Questa è la chiave per il funzionamento di SQL Express con i numeri di porta
peterG

11

Nel registro ERROLOG per una riga come sotto. Se non lo vedi, SQL Server non è abilitato per l'accesso remoto o semplicemente non è tramite TCP. Puoi modificarlo tramite SQL Server Configuration Manager.

Server is listening on [ 192.128.3.2 <ipv4> 1433].

Non vedo quel registro, ma in SQL Server Management Studio in Connessioni è selezionata l'opzione "Consenti connessioni remote a questo server". Quindi, la mia comprensione è che la connessione remota è consentita.
royalghost

@royal: oltre a "consentire connessioni remote" è necessario abilitare anche il protocollo TCP. In questo momento il server probabilmente sta solo ascoltando NP
Remus Rusanu

vedi la risposta di seguito da @morteza per leggere il log tramite query SQL xp_readerrorlog 0, 1, N'Server is listening on'
Tilo

8

Ho risolto il problema abilitando il TCP / IP utilizzando SQL Server Configuration Manager in Protocolli per SQLEXPRESS2008, ho riavviato il servizio e ora il "Server è in ascolto" compare nel file ERRORLOG


8

Prova questo (richiede l'accesso a sys.dm_exec_connections):

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL

3
FYI: se il server SQL non ha una connessione aperta, probabilmente non mostrerà nulla.
Tilo

6
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc' 
GO

[Identificare la porta utilizzata dall'istanza denominata del motore di database di SQL Server leggendo i log degli errori di SQL Server]


1
grazie buon suggerimento Morteza, ottengo un errore utilizzando quanto sopra su SQL2012 ma quanto segue è sufficiente per le mie esigenze: XP_READERRORLOG 0, 1, N'Server è in ascolto '
mattpm

Copia l'errore con la tua query ma funziona, xp_readerrorlog 0, 1, N'Server is listening on'
Tilo

6

Puoi usare questi due comandi: tasklistenetstat -oan

Tasklist.exeè come taskmgr.exema in modalità testo.

Con tasklist.exeo taskmgr.exepuoi ottenere un PID disqlservr.exe

Con netstat -oan, mostra un PID di connessione e puoi filtrarlo.

Esempio:

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

In questo esempio, la porta SQLServer è 1280

Estratto da: http://www.sysadmit.com/2016/03/mssql-ver-puerto-de-una-instancia.html


5

Uso il seguente script in 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

Non sono sicuro del motivo per cui questo è stato downvotato, non dà la risposta immediata ma ti dà la risposta e molto di più. Aggiungendo questo al mio elenco di domande utili.
Tony

come la query molto, inoltre sembra non mostrare se nessuna connessione è aperta / stabilita.
Tilo

4

Questo può essere fatto anche tramite una scansione delle porte, che è l'unico metodo possibile se non si dispone dell'accesso amministrativo a un server remoto.

L'utilizzo di Nmap ( http://nmap.org/zenmap/ ) per eseguire una "scansione TCP intensa" ti darà risultati come questo per tutte le istanze sul server:

[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: per eseguire il test con Query Analyzer o MS SQL Server Management Studio, è necessario formare il nome del server e la porta in modo diverso da come ci si connetterebbe normalmente a una porta, ad esempio su HTTP, utilizzando una virgola invece di due punti .

  • Nome server Management Studio: 10.0.0.1,49843
  • Stringa di connessione: Data Source=10.0.0.1,49843

però

  • Stringa di connessione JDBC: jdbc:microsoft:sqlserver://10.0.0.1:49843;DatabaseName=DATABASE

1

Questo funziona per SQL Server 2005 - 2012. Cercare id evento = 26022 nel registro degli errori sotto le applicazioni. Ciò mostrerà il numero di porta del server sql e gli indirizzi IP a cui è consentito l'accesso.


1

Oltre a quanto sopra elencato, ho dovuto abilitare sia le porte TCP che UDP per la connessione remota di SQLExpress. Poiché ho tre diverse istanze sulla mia macchina di sviluppo, abilito 1430-1435sia TCP che UDP.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.