본문 바로가기
IT/DB

특정 TCP 포트 또는 동적 포트에서 수신 대기하도록 SQL Server 인스턴스를 구성하는 방법

by 불멸남생 2023. 2. 14.

요약

이 문서에서는 Microsoft SQL Server 2000이나 Microsoft SQL Server 2005에서 정적 및 동적 포트를 할당하는 방법을 설명하고 정적 포트나 동적 포트를 사용하도록 SQL Server 2000 인스턴스를 구성하는 방법에 대해서도 설명합니다.

 

정적 포트 할당

정적 포트를 사용하도록 SQL Server 인스턴스를 구성한 경우에 이 SQL Server 인스턴스를 다시 시작하면 SQL Server 인스턴스는 지정된 정적 포트에서만 수신 대기합니다. SQL Server 클라이언트는 SQL Server 인스턴스가 수신 대기하는 정적 포트에만 모든 요청을 보내야 합니다.

그러나 SQL Server 인스턴스가 정적 포트에서 수신 대기하도록 구성된 경우에 SQL Server를 시작할 때 해당 컴퓨터에서 실행 중인 다른 프로그램이 지정된 정적 포트를 이미 사용 중이면 SQL Server가 지정된 정적 포트에서 수신 대기하지 않습니다.

기본적으로 SQL Server의 기본 인스턴스는 정적 포트 1433에서 SQL Server 클라이언트의 요청을 수신 대기합니다. 따라서, 클라이언트 네트워크 라이브러리는 포트 1433이나 해당 클라이언트 컴퓨터에 대해 정의된 전역 기본 포트가 SQL Server의 기본 인스턴스에 연결하는 데 사용된다고 가정합니다.

SQL Server 기본 인스턴스가 포트 1433 이외의 다른 포트에서 수신 대기할 경우에는 서버 별칭 이름을 정의하거나 클라이언트 네트워크 유틸리티를 사용하여 전역 기본 포트를 변경해야 합니다. 그러나 SQL Server 기본 인스턴스가 여러 정적 포트에서 수신 대기하도록 할 수도 있습니다.

여러 정적 TCP 포트에서 수신 대기하도록 SQL Server 2000을 설정하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
294453(http://support.microsoft.com/kb/294453/)여러 정적 TCP 포트에서 수신 대기하도록 SQL Server 2000을 설정하는 방법
SQL Server 기본 인스턴스는 동적 포트 할당을 지원하지 않습니다. 그러나 SQL Server의 명명된 인스턴스는 정적 포트 할당과 동적 포트 할당을 모두 지원합니다. 기본적으로 SQL Server의 명명된 인스턴스는 동적 포트에서 수신 대기합니다.

 

동적 포트 할당

SQL Server의 명명된 인스턴스만 동적 포트 할당 프로세스를 사용할 수 있습니다. 동적 포트 할당 프로세스에서는 SQL Server 인스턴스를 처음 시작할 때 포트가 0으로 설정됩니다. 따라서 SQL Server가 운영 체제로부터 사용 가능한 포트 번호를 요청합니다. 포트 번호가 SQL Server에 할당되면 즉시 SQL Server가 할당된 포트에서 수신 대기를 시작합니다.

할당된 포트 번호는 Windows 레지스트리에 기록됩니다. SQL Server의 명명된 인스턴스를 시작할 때마다 인스턴스는 할당된 포트 번호를 사용합니다. 그러나 SQL Server를 시작할 때 해당 컴퓨터에서 실행 중인 다른 프로그램이 이 할당된 포트 번호를 사용 중이면 SQL Server는 다른 포트를 선택합니다.

SQL Server 인스턴스가 동적 포트 할당을 사용할 때는 사용자나 프로그래머가 명시적으로 포트를 지정하지 않으면 SQL Server 클라이언트에서 작성된 연결 문자열이 대상 TCP/IP 포트를 지정하지 않습니다. 따라서 SQL Server 클라이언트 라이브러리는 UDP 포트 1434에서 서버 컴퓨터에 쿼리하여 SQL Server의 대상 인스턴스에 대한 정보를 수집합니다. SQL Server가 정보를 반환할 때 SQL Server 클라이언트 라이브러리는 이 데이터를 SQL Server의 해당 인스턴스로 보냅니다.

UDP 포트 1434가 비활성화되어 있으면 SQL Server 클라이언트는 SQL Server의 명명된 인스턴스의 포트를 동적으로 결정할 수 없습니다. 따라서 SQL Server 클라이언트가 SQL Server의 명명된 인스턴스에 연결하지 못할 수도 있습니다. 이러한 상황에서 SQL Server 클라이언트는 SQL Server 2000의 명명된 인스턴스가 수신 대기할 동적 할당 포트를 지정해야 합니다.

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
265808(http://support.microsoft.com/kb/265808/)SQL Server 2000 명명된 인스턴스를 연결하는 방법

 

SQL Server 인스턴스의 포트 구성 확인

참고SQL Server 2000의 기본 인스턴스는 항상 정적 포트를 사용합니다.

SQL Server 인스턴스가 수신 대기하는 TCP/IP 포트를 찾으려면 다음과 같이 하십시오.
1. SQL 쿼리 분석기를 시작한 다음 SQL Server 인스턴스에 연결합니다.
2. SQL 쿼리 분석기에서 다음 Transact-SQL 문을 실행합니다.
3. 결과창에서 다음 텍스트를 찾습니다. 여기서X.X.X.X는 SQL Server 인스턴스의 IP 주소이고Y는 SQL Server가 수신 대기하는 TCP/IP 포트입니다.

SQL Server가X.X.X.X:Y에서 수신 중입니다.

참고:예를 들어,결과창에서 "SQL Server가 10.150.158.246: 1433에서 수신 중입니다."라는 텍스트를 찾은 경우 10.150.158.246은 SQL Server의 IP 주소이고 1433은 SQL Server 인스턴스가 수신 대기하는 TCP/IP 포트입니다.
SQL Server 인스턴스의 포트 구성을 확인하려면 다음과 같이 하십시오.
1. 레지스트리 편집기를 시작합니다.
2. 레지스트리 편집기에서 다음 레지스트리 키를 찾습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\MSSQLServer\SuperSocketNetLib\Tcp
참고SQL Server 2005를 사용하는 경우 다음 레지스트리 하위 키를 찾으십시오.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<MSSQL.x>\MSSQLServer\SuperSocketNetLib\Tcp\IPAll
TCPDynamicPorts 값과 TCPPort 값에 유의하십시오. 이 두 값은 포트 할당 방법에 따라 다음과 같이 나타납니다.

 

정적 포트를 사용하도록 SQL Server 인스턴스 구성

SQL Server 2005

정적 포트를 사용하도록 SQL Server 인스턴스를 구성하려면 SQL Server 2005 온라인 설명서의 "방법: 특정 TCP 포트로 수신하도록 서버 구성(SQL Server 구성 관리자)" 항목에 설명되어 있는 단계를 수행하십시오.

SQL Server 2000

정적 포트를 사용하도록 SQL Server 인스턴스를 구성하려면 다음과 같이 하십시오.
1. 서버 네트워크 유틸리티를 시작합니다. 이렇게 하려면 다음 중 하나를 수행하십시오.SQL Server 네트워크 유틸리티대화 상자가 나타납니다.
2. SQL Server 네트워크 유틸리티대화 상자에서일반탭을 누릅니다.
3. 이 서버의 인스턴스목록에서 해당 SQL Server 인스턴스를 선택합니다.

참고TCP/IP 프로토콜이 사용할 수 없도록 설정되어 있으면 지금 사용할 수 있도록 설정하십시오. 이렇게 하려면사용할 수 없는 프로토콜목록 상자에서TCP/IP를 누른 다음사용을 누릅니다.
4. 사용할 수 있는 프로토콜목록 상자에서TCP/IP를 누른 다음속성을 누릅니다.
5. 기본 포트상자에 정적 포트 번호를 입력한 다음확인을 누릅니다.

참고지정한 정적 포트는 해당 SQL Server 인스턴스가 현재 수신 대기 중인 동적 포트와 동일해서는 안 됩니다. 예를 들어, SQL Server 인스턴스가 현재 동적 TCP/IP 포트 1400에서 수신 대기 중인 경우 새 정적 포트로1500을 입력합니다.
6. 확인을 누르고 다시확인을 누릅니다.
7. SQL Server 인스턴스를 다시 시작합니다.
8. SQL Server 오류 로그를 보고 SQL Server 인스턴스가 현재 정적 포트를 사용하고 있는지 확인합니다.

참고SQL Server의 클러스터된 인스턴스가 있는 경우에 클러스터 노드에서 지정된 단계를 수행하면 다른 클러스터 노드의 TCPDynamicPorts 레지스트리 값과 TCPPort 레지스트리 값이 아직도 이전 값을 보유할 수 있습니다. SQL Server 그룹을 해당 클러스터 노드로 이동한 다음 클러스터 노드에서 SQL Server를 온라인 상태로 만들면 클러스터 노드의 레지스트리 값이 올바른 값을 반영합니다.
SQL Server 인스턴스의 정적 포트를 이전에 사용하던 동적 포트와 같은 포트 번호로 설정할 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.
1. TCPDynamicPorts 레지스트리 값과 TCPPort 레지스트리 값을 보고 이전 SQL Server 인스턴스가 사용한 동적 포트 번호를 확인합니다.
2. 서버 네트워크 유틸리티에서 정적 포트를 1단계에서 확인한 레지스트리 값과 다른 포트 번호로 설정합니다.
3. SQL Server 인스턴스를 다시 시작합니다.
4. 서버 네트워크 유틸리티에서 정적 포트를 1단계에서 확인한 레지스트리 값으로 설정합니다.
5. SQL Server 인스턴스를 다시 시작합니다.

 

동적 포트를 사용하도록 SQL Server 인스턴스 구성

SQL Server 2005

동적 포트를 사용하도록 SQL Server 2005 인스턴스를 구성하려면 SQL Server 2005 온라인 설명서의 "방법: 특정 TCP 포트에서 수신 대기하도록 Server 구성(SQL Server 구성 관리자)" 항목에 설명되어 있는 것과 비슷한 방법을 사용하십시오. 자세한 내용은 SQL Server 2005 온라인 설명서의 "서버 네트워크 구성" 항목을 참조하십시오.

SQL Server 2000

동적 포트를 사용하도록 SQL Server 인스턴스를 구성하려면 다음과 같이 하십시오.
1. 서버 네트워크 유틸리티를 시작합니다. 이렇게 하려면 다음 중 하나를 수행합니다.SQL Server 네트워크 유틸리티대화 상자가 나타납니다.
2. SQL Server 네트워크 유틸리티대화 상자에서일반탭을 누릅니다.
3. 이 서버의 인스턴스목록에서 해당 SQL Server 인스턴스를 선택합니다.

참고TCP/IP 프로토콜이 사용할 수 없도록 설정되어 있으면 지금 사용할 수 있도록 설정하십시오. 이렇게 하려면사용할 수 없는 프로토콜목록 상자에서TCP/IP를 누른 다음사용을 누릅니다.
4. 사용할 수 있는 프로토콜목록 상자에서TCP/IP를 누른 다음속성을 누릅니다.
5. 기본 포트상자에서0을 입력한 다음확인을 누릅니다.
6. 확인을 누르고 다시확인을 누릅니다.
7. SQL Server 인스턴스를 다시 시작합니다.
8. SQL Server 오류 로그를 보고 SQL Server 인스턴스가 현재 동적 포트를 사용하고 있는지 확인합니다.

참고SQL Server의 클러스터된 인스턴스가 있는 경우 클러스터 노드에서 지정된 단계를 수행하면 다른 클러스터 노드의 TCPDynamicPorts 레지스트리 값과 TCPPort 레지스트리 값이 아직도 이전 값을 보유할 수 있습니다. SQL Server 그룹을 해당 클러스터 노드로 이동한 다음 클러스터 노드에서 SQL Server를 온라인 상태로 만들면 클러스터 노드의 레지스트리 값이 올바른 값을 반영합니다.

 

문제 해결

정적 TCP/IP 포트를 사용하도록 SQL Server 인스턴스를 구성한 후에도 SQL Server 클라이언트가 SQL Server 인스턴스에 액세스할 수 없는 경우에는 다음과 같은 원인이 있을 수 있습니다.
방화벽이 지정된 TCP/IP 포트를 차단하는 것일 수 있습니다.
SQL Server 인스턴스가 정적 포트에서 수신 대기 중인 상태에서 방화벽이 포트를 차단하고 있으면 SQL Server 클라이언트가 방화벽을 통해 SQL Server 인스턴스에 연결하지 못할 수 있습니다. 이러한 경우에는 방화벽에서 해당 포트를 해제하거나 SQL Server 인스턴스에 새 정적 포트를 할당해야 합니다.

SQL Server 인스턴스가 동적 포트에서 수신 대기 중인 상태에서 방화벽이 UDP 포트 1434를 차단하고 있으면 SQL Server의 명명된 인스턴스에 대한 클라이언트 연결은 현재 할당된 포트를 지정해야 합니다. SQL Server 인스턴스가 다시 시작되면 새로운 동적 포트가 할당될 수 있습니다. 따라서, 새로 할당된 포트를 사용하여 같은 SQL Server 인스턴스에 다시 연결하도록 SQL Server 클라이언트 구성을 변경해야 합니다.

그러나 방화벽이 UDP 포트 1434를 해제하면 SQL Server 클라이언트는 SQL Server 인스턴스에 대한 정보를 자동으로 검색합니다. 따라서 SQL Server 인스턴스를 다시 시작할 때마다 SQL Server 클라이언트 구성을 변경해야 합니다.

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
287932(http://support.microsoft.com/kb/287932/)INF: 방화벽을 통해 SQL Server와 통신하는 데 필요한 TCP 포트

318432(http://support.microsoft.com/kb/318432/)BUG: 방화벽을 통해 클러스터된 명명된 인스턴스에 연결할 수 없다
다른 프로그램이 지정된 TCP/IP 포트를 이미 사용하고 있을 수 있습니다.
다른 프로그램이 지정된 TCP/IP 포트를 이미 사용 중인 경우에는 SQL Server 인스턴스가 이 포트를 사용할 수 없고 SQL Server 클라이언트가 SQL Server 인스턴스에 연결하지 못할 수 있습니다.

이 문제는 정적 TCP/IP 포트를 사용하도록 구성된 SQL Server 인스턴스에만 발생합니다. 동적 포트 할당을 사용하도록 구성된 SQL Server 인스턴스에는 이 문제가 발생하지 않습니다. 동적 포트 할당에서 SQL Server 인스턴스를 시작할 때 다른 프로그램이 지정된 TCP/IP 포트를 이미 사용 중일 경우에는 SQL Server 인스턴스가 새 포트를 선택합니다.

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
293107(http://support.microsoft.com/kb/293107/)PRB: 다른 응용 프로그램에서 사용 중인 TCP/IP 포트

 

참조

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
286303(http://support.microsoft.com/kb/286303/)동적 포트 검색 동안 SQL Server 2000 네트워크 라이브러리의 동작
273673(http://support.microsoft.com/kb/273673/)SQL 가상 서버 클라이언트 연결에 대한 설명
328383(http://support.microsoft.com/kb/328383/)클라이언트 컴퓨터가 SQL Server 인스턴스에 연결하려고 할 때 SQL Server 클라이언트가 프로토콜을 변경할 수 있다
반응형