可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Yes I read this How to find the port for MS SQL Server 2008?
no luck.
telnet 1433
returns connection failed, so I must specify other port.
I tried to use
netstat -abn
but I don't see sqlservr.exe or something similar on this list.
Why it so difficult to find that port? :/
回答1:
Try this:
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on'
GO
http://www.mssqltips.com/sqlservertip/2495/identify-sql-server-tcp-ip-port-being-used/
回答2:
very simple.
make a note of the sqlsrvr.exe PID from taskmanager
then run this command:
netstat -ano | findstr *PID*
it will show TCP and UDP connections of your SQL server (including ports)
standard is 1433 for TCP and 1434 for UDP
example :
回答3:
This is the one that works for me:
SELECT DISTINCT
local_tcp_port
FROM sys.dm_exec_connections
WHERE local_tcp_port IS NOT NULL
回答4:
If you can start the Sql Server Configuration Manager > SQL Server Network Configuration > Your instance > TCP/IP > Properties
回答5:
If you have run "netstat -a -b -n" (from an elevated command prompt) and you don't see "sqlservr.exe" at all then either your SQL Server service is not running or its TCP/IP network library is disabled.
Run SQL Server Configuration Manager (Start | All Programs | Microsoft SQL Server 2008 | Configuration Tools).
Navigate to SQL Server Services.
In the right-hand pane look for SQL Server (). Is it stopped? If so, start it.
Navigate to SQL Server Network Configuration (or SQL Server Network Configuration (32-bit) as appropriate) then Protocols for .
In the right-hand pane look for "TCP/IP". Is it disabled? If so, enable it, then restart the SQL Server service.
Note that he Instance ID will be MSSQLSERVER for the default instance.
Please also note that you don't have to enable the TCP/IP network library to connect a client to the service. Clients can also connect through the Shared Memory network library (if the client is on the same machine) or the Named Pipes network library.
回答6:
Maybe it's not using TCP/IP
Have a look at the SQL Server Configuration Manager to see what protocols it's using.
回答7:
In our enterprise I don't have access to MSSQL Server, so I can'r access the system tables.
What works for me is:
- capture the network traffic
Wireshark
(run as Administrator, select Network Interface),while opening connection to server.
- Find the ip address with
ping
- filter with
ip.dst == x.x.x.x
The port is shown in the column info
in the format src.port -> dst.port
回答8:
Try to enable the protocol by:
Configuration Manger > SQL server Network Configuration > Protocols for MSSQLSERVER > properties of TCP/IP
回答9:
This is another script that I use:
-- Find Database Port script by Jim Pierce 09/05/2018
USE [master]
GO
DECLARE @DynamicportNo NVARCHAR(10);
DECLARE @StaticportNo NVARCHAR(10);
DECLARE @ConnectionportNo INT;
-- Look at the port for the current connection
SELECT @ConnectionportNo = [local_tcp_port]
FROM sys.dm_exec_connections
WHERE session_id = @@spid;
-- Look for the port being used in the server's registry
EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
,@key =
'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
,@value_name = 'TcpDynamicPorts'
,@value = @DynamicportNo OUTPUT
EXEC xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE'
,@key =
'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll'
,@value_name = 'TcpPort'
,@value = @StaticportNo OUTPUT
SELECT [PortsUsedByThisConnection] = @ConnectionportNo
,[ServerStaticPortNumber] = @StaticportNo
,[ServerDynamicPortNumber] = @DynamicportNo
GO
回答10:
SQL Server 2000
Programs |
MS SQL Server |
Client Network Utility |
Select TCP_IP then Properties
SQL Server 2005
Programs |
SQL Server |
SQL Server Configuration Manager |
Select Protocols for MSSQLSERVER or select Client Protocols and right click on TCP/IP
回答11:
try once:-
USE master
DECLARE @portNumber NVARCHAR(10)
EXEC xp_instance_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key =
'Software\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\Tcp\IpAll',
@value_name = 'TcpDynamicPorts',
@value = @portNumber OUTPUT
SELECT [Port Number] = @portNumber
GO
回答12:
select * from sys.dm_tcp_listener_states
More there:
https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-tcp-listener-states-transact-sql?view=sql-server-2017
回答13:
Here is a quick PowerShell script (since no one has provided solution in PowerShell yet:))
Note: this must be executed at Server (either RDP or use PS Remoting), if ran correctly following will print exact port number:
cls
$id = (ps "sql*" | ? {$_.ProcessName -eq "sqlservr"}).Id
$id | % {
$strAllSQLConnections = netstat -ano | findstr $_
$port = $strAllSQLConnections | % { if($_ -match "0\.0\.0\.0:\d{2,5}") {$Matches[0]} }
$port = ($port -split ':')[1]
if ($port -gt 0) {Write-Host "An instance of Sql Server is listening on port: " $port}
}
You might need to tweak the code, works great for me.
HTH