On which port is SQL Server running?
April 15, 2015 1 Comment
Earlier this week, a good friend asked me the simple question: “How can I check on which port my SQL Server is currently running?” There are multiple ways, so let’s take a look at the ways you can find out the answer!
SQL Server Error Log
It’s a misconception that only error messages are logged in the SQL Server error log. There are also informational messages logged, which you can use to find the port on which SQL Server is currently running:
xp_readerrorlog 0, 1, N'Server is listening on'
The result:
SQL Server Configuration Manager
The SQL Server configuation manager is a tool which is installed alongside SQL Server. In this tool, you can change for example the TCP/IP settings of your SQL Server. It also shows you the current port on which SQL Server is running:
DMV
You can also query the system DMV’s:
SELECT DISTINCT local_tcp_port FROM sys.dm_exec_connections WHERE local_tcp_port IS NOT NULL
or
SELECT local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID
Command prompt
Finding the used port via a command prompt requires some more information. First, you need to find the process ID (PID) that SQL Server is using. The quickest way is to use the Task Manager in Windows. Once you have the PID, you can run the commmand below:
“netstat -ano | findstr [PID]”
The result:
Registry
The port number can also be found in the registry. Just remember, that the folder you see in the screenshot below contains my instance name (SQL2014DEV). Change this to your instance name!
You can also use the “master.dbo.xp_regread” stored procedures to read this registry key from T-SQL:
DECLARE @TCPPort NVARCHAR(5), @RegKeyName VARCHAR(8000); SET @RegKeyName = CONCAT('Software\Microsoft\Microsoft SQL Server\', @@SERVICENAME, '\MSSQLServer\SuperSocketNetLib\TCP') EXEC xp_regread @rootkey = 'HKEY_LOCAL_MACHINE', @key = @RegKeyName, @value_name = 'TcpPort', @value = @TCPPort OUTPUT; SELECT @TCPPort;
Event Viewer
SQL Server also logs the port in the Windows Event Viewer. If you open the application log, and you filter on eventid 26022, you’ll see the port that is in use:
PowerShell
After I posted this blog, Johan Bijnens (@alzdba) sent me a message: I forgot the PowerShell option!
#tcpport.ps1 #Evaluates the SQL Server instances on a Windows server and returns the TCP port number used by each instance [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null $m = New-Object ('Microsoft.SqlServer.Management.Smo.WMI.ManagedComputer') 'HOME' $m.ServerInstances | ForEach-Object { $m.Name + '\' + $_.Name + ', ' + $m.ServerInstances[$_.Name].ServerProtocols['Tcp'].IPAddresses['IP1'].IPAddress.IPAddressToString + ':' + $m.ServerInstances[$_.Name].ServerProtocols['Tcp'].IPAddresses['IPAll'].IPAddressProperties['TcpDynamicPorts'].Value }
Thanks Johan for reminding me on this! The full code can be found on MSDN.
Pingback: Searching through the SQL Server error logs | SQL from the Trenches