programing

실행 중인 SQL Server 포트를 찾는 방법은 무엇입니까?

easyjava 2023. 4. 29. 10:03
반응형

실행 중인 SQL Server 포트를 찾는 방법은 무엇입니까?

예, 이 문서를 읽었습니다. MS SQL Server 2008용 포트를 찾는 방법은 무엇입니까?

운이 없습니다.

텔넷 1433

연결 실패를 반환하므로 다른 포트를 지정해야 합니다.

사용하려고 했습니다.

netstat -abn

하지만 이 목록에 sqlservr.exe 또는 유사한 것이 없습니다.

왜 그 항구를 찾는 것이 그렇게 어렵습니까?:/

사용해 보십시오.

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/

매우 간단합니다. 태스크 관리자의 sqlsrvr.exe PID를 기록한 다음 다음 명령을 실행합니다.

netstat -ano | findstr *PID*

SQL 서버(포트 포함)의 TCP 및 UDP 연결 표준이 TCP의 경우 1433이고 UDP의 경우 1434임을 나타냅니다.

예:여기에 이미지 설명 입력

이것이 저를 위해 작동하는 것입니다.

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

SQL Server 구성 관리자 > SQL Server 네트워크 구성 > 사용자 인스턴스 > TCP/IP > 속성을 시작할 수 있는 경우

여기에 이미지 설명 입력

"netstat -a -b -n"(고급 명령 프롬프트에서)을 실행했는데 "sqlservr.exe"가 전혀 표시되지 않으면 SQL Server 서비스가 실행되고 있지 않거나 TCP/IP 네트워크 라이브러리가 비활성화됩니다.

SQL Server 구성 관리자를 실행합니다(시작 | 모든 프로그램 | Microsoft SQL Server 2008 | 구성 도구).

SQL Server 서비스로 이동합니다.오른쪽 창에서 SQL Server()를 찾습니다.멈췄나요?그렇다면 시작합니다.

SQL Server 네트워크 구성(또는 SQL Server 네트워크 구성(32비트))으로 이동한 다음 프로토콜 for. 오른쪽 창에서 "TCP/IP"를 찾습니다.사용할 수 없습니까?그런 경우 이를 활성화한 다음 SQL 서버 서비스를 다시 시작합니다.

인스턴스 ID는 기본 인스턴스의 MSSQLSERVER가 됩니다.

또한 클라이언트를 서비스에 연결하기 위해 TCP/IP 네트워크 라이브러리를 활성화할 필요가 없습니다.클라이언트는 공유 메모리 네트워크 라이브러리(클라이언트가 동일한 컴퓨터에 있는 경우) 또는 명명된 파이프 네트워크 라이브러리를 통해 연결할 수도 있습니다.

TCP/IP를 사용하지 않는 것일 수 있습니다.

SQL Server 구성 관리자에서 사용 중인 프로토콜을 확인합니다.

한 번 시도:-

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

다음은 제가 사용하는 또 다른 스크립트입니다.

-- 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

SQL Server Management(sqlservermanager15.msc)를 검색하지 않으려면 데이터베이스에서 다음 쿼리를 실행합니다(예: sqlcmd 또는 ssms).

SELECT * FROM [sys].[dm_tcp_listener_states]
listener_id ip_address is_sig4 항구 유형 type_message state_state_s start_time
1 ::1 거짓의 1433 0 TSQL 0 온라인. 2021-01-01 00:00:00.000000
2 127.0.0.1 진실의 1433 0 TSQL 0 온라인. 2021-01-01 00:00:00.000000

이것을 지적해 준 @vladimir-bashutin에게 감사드립니다.다음은 또 다른 예입니다.

SELECT [name]
  ,[protocol_desc]
  ,[type_desc]
  ,[state]
  ,[state_desc]
  ,[is_admin_endpoint]
FROM [master].[sys].[endpoints]
이름. protocol_interval type_message state_state_s is_admin_proxy
TSQL 로컬 컴퓨터 공유_메모리 TSQL 0 시작된 거짓의
TSQL 명명된 파이프 NAMED_PIPES TSQL 0 시작된 거짓의
TSQL 기본 TCP TCP TSQL 0 시작된 거짓의
TSQL 기본 VIA 비아 TSQL 0 시작된 거짓의

이제 포트와 프로토콜을 사용할 수 있습니다.이러한 시스템 테이블에 액세스할 수 없는 경우 https://github.com/adzm/ssrpc 과 같은 SSRP 클라이언트를 사용해 보십시오.

우리 회사에서는 MSSQL 서버에 액세스할 수 없기 때문에 시스템 테이블에 액세스할 수 없습니다.

저에게 맞는 것은 다음과 같습니다.

  1. 트래픽 네트픽Wireshark서버에 대한 연결을 여는 동안 관리자로 실행되고 네트워크 인터페이스를 선택합니다.
  2. IP로 ping
  3. .ip.dst == x.x.x.x

는 포가열표니다 됩니다.infosrc.port -> dst.port

select * from sys.dm_tcp_listener_states 

더 보기: https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-tcp-listener-states-transact-sql?view=sql-server-2017

구성 관리자 > SQL 서버 네트워크 구성 > MSSQL SERVER 프로토콜 > TCP/IP 속성을 사용하여 프로토콜을 활성화합니다.

SQL Server 2000 프로그램 | MS SQL Server | 클라이언트 네트워크 유틸리티 | TCP_ 선택IP 후 속성

SQL Server 2005 프로그램 | SQL Server | SQL Server 구성 관리자 | MSSQL SERVER 프로토콜을 선택하거나 클라이언트 프로토콜을 선택하고 TCP/IP를 마우스 오른쪽 버튼으로 클릭합니다.

PowerShell에서 이 포트를 사용하여 인스턴스가 사용 중인 포트를 확인할 수 있습니다.

을 변경할 수 .MSSQLSERVER사용자 자신의 인스턴스 이름으로.

$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer' localhost
$tcp = $wmi.ServerInstances['MSSQLSERVER'].ServerProtocols['Tcp']
$ipAll = $tcp.IPAddresses | where { $_.Name -eq "IPAll" }
write-host ($ipAll.IPAddressProperties.value)

제 경우 서버가 원격이었고 명명된 인스턴스를 사용했습니다.SQL Browse 서비스는 이를 클라이언트의 포트로 변환합니다.SQL Management Studio를 통해 연결만 하면 됩니다.서버 이름의 nslookup을 수행하여 해당 IP를 가져옵니다.그러면 다음을 수행합니다.

netstat -ano | findstr {ip}

목록에 동일한 포트 번호를 사용하는 원격 연결이 몇 개 있어야 합니다.서버가 동적 포트를 사용하도록 구성된 경우 변경됩니다.

최상의 옵션은 아니지만 다른 방법은 호스트 시스템에서 Windows 레지스트리를 읽는 것입니다. PowerShell 프롬프트를 높이면 다음과 같은 작업을 수행할 수 있습니다.

#Get SQL instance's Port number using Windows Registry:
$instName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server').InstalledInstances[0]
$tcpPort = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$instName\MSSQLServer\SuperSocketNetLib\Tcp").TcpPort
Write-Host The SQL Instance:  `"$instName`"  is listening on `"$tcpPort`"  "TcpPort."

여기에 이미지 설명 입력 이 PowerShell 스크립트를 호스트 서버(SQL 인스턴스/SQL Server 설치 호스트)에서 실행해야 합니다. 즉, 먼저 SQL Server/Box/VM에 RDP를 입력한 다음 이 코드를 실행해야 합니다.

HTH

언급URL : https://stackoverflow.com/questions/12297475/how-to-find-sql-server-running-port

반응형