Como eu disse na introdução desta dica, existem várias maneiras de se identificar qual porta TCP uma instância do SQL Server está usando. Sabemos que por default o SQL Server usa a porta 1433, no entanto, isso somente é verdade quando estamos falando de uma instância DEFAULT.
Para um ambiente multi-instâncias, ou seja, um servidor com várias instâncias do SQL Server, muito provavelmente você terá uma instância usadando a porta default 1433 e as demais subirão usando uma outra porta qualquer e que muito provavelmente será alterada a cada vez que o SQL Server for reiniciado.
Bom, muitas vezes, principalmente quando estamos solucionando problemas de conectividade, precisamos identificar qual porta uma instância SQL está usando. Existem várias maneiras de se identificar esta porta, a mais simples dela (na minha opinião) é consultando o log de erros do SQL Server usando a procedure de sistema sp_readerrorlog e procurando pela entrada abaixo:
2009-03-15 20:02:05.200 Server Server is listening on [ ‘any’ <ipv4> 1528].
Neste exemplo a intância do SQL Server está usando a porta TCP 1528.
Outras maneira de também se obter a porta seriam consultando as propriedades do protocolo TCPIP no servidor SQL Server ou ainda consultando a chave do registro do windows. Para esta última, você pode obviamente acessar o registro e procurar pela entrada do registry ou ainda usar uma extended stored procedure não documenta chamada xp_regread.
Abaixo está um script que você pode estar usando para obter esta informação no seu dia-a-dia. Neste script aproveito para não apenas mostrar o número da porta mas também outras informações inportantes e que normalmente estamos querendo saber como: nome do servidor, nome da instância, edição, versão do SQL, nível (Service Pack) e a chave do registro onde encontra-se a informação de porta.
SELECT @@SERVERNAME AS ServerName, @@SERVICENAME AS ServiceName
SELECT SERVERPROPERTY(‘Edition’) AS SQLEdition,
SERVERPROPERTY(‘ProductVersion’)AS SQLVersion,
SERVERPROPERTY(‘ProductLevel’) AS SQLLevel
DECLARE @value VARCHAR(20)
DECLARE @key VARCHAR(100)
IF ISNULL(CHARINDEX(”, @@SERVERNAME, 0), 0) > 0
BEGIN
— Instância nomeada. Ex. MYSERVERSQLEXPRESS
SET @key = ‘SOFTWAREMicrosoftMicrosoft SQL Server’ + @@servicename + ‘MSSQLServerSuperSocketNetLibTcp’
END
ELSE
BEGIN
— Instância Default
SET @key = ‘SOFTWAREMICROSOFTMSSQLSERVERMSSQLSERVERSUPERSOCKETNETLIBTCP’
END
SELECT @KEY as [Key]
EXEC master..xp_regread @rootkey = ‘HKEY_LOCAL_MACHINE’, @key = @key,
@value_name = ‘TcpPort’, @value = @value OUTPUT
SELECT ‘Port Number : ‘ + CAST(@value AS VARCHAR(5)) AS PortNumber
GO
Ao executar o script você terá uma saída semelhante a esta:
ServerName ServiceName
—————– ——————
SRVSQL2008 MSSQLSERVER
SQLEdition SQLVersion SQLLevel
—————– ————————– ———-
Developer Edition 10.0.1600.22 RTM
Key
—————————————————————-
SOFTWARE/MICROSOFT/MSSQLSERVER/MSSQLSERVER/SUPERSOCKETNETLIB/TCP
PortNumber
————————-
Port Number : 1528
Este script funciona para o SQL Server 2000/2005 e 2008. Não testei com o SQL Server 7, mas muito possivelmente também funcionará.
Abraços
Nilton Pinheiro

