TL; DR; SQL Server 인스턴스가 작동하지 않는 동적 포트를 사용하고 있습니다. SQL Server에서 정적 포트 번호 1433을 사용하도록합니다.
세부 사항 : 기본 및 명명 된 인스턴스 또는 명명 된 인스턴스 만 혼합하면이 문제가 발생할 가능성이 큽니다 (제 경우).
핵심 개념 : 컴퓨터에 설치된 각 Microsoft SQL Server 인스턴스는 다른 포트를 사용하여 들어오는 연결 요청을 수신합니다. SQL Server의 기본 인스턴스는 포트 # 1433을 사용합니다. 명명 된 인스턴스를 설치하면 명명 된 SQL Server 인스턴스에 해당하는 Windows 서비스를 시작할 때 결정되는 동적 포트를 사용하기 시작합니다.
내 코드는 (오류 코드 40) 내 VM에있는 유일한 명명 된 SQL Server 인스턴스에 연결하지 못했습니다. 가능한 해결책은 다음과 같습니다.
솔루션 # 1 : SQL Server 인스턴스에 연결하려는 클라이언트 코드는 SQL Server 브라우저 서비스의 도움을 받아 명명 된 인스턴스가 들어오는 연결을 수신하는 포트 번호를 알아냅니다. 컴퓨터에서 SQL 브라우저 서비스가 실행 중인지 확인하십시오.
해결 방법 # 2 : 아래 스냅 샷에 표시된 것처럼 명명 된 SQL Server 인스턴스가 SQL Server 구성 관리자에서 사용중인 포트 번호 (노란색)를 확인하십시오.
연결 문자열에서 또는 sqlcmd
아래 표시된대로 해당 포트 번호를 사용하십시오 .
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
솔루션 # 3 : 명명 된 인스턴스가 기본 인스턴스에서 사용되는 포트 # 1433을 사용하도록합니다. 기본 SQL Server 인스턴스가 이미 포트 # 1433을 사용하고 있으므로 컴퓨터에 기본 SQL Server 인스턴스가없는 경우에만 작동합니다. 두 개의 다른 Windows 서비스에서 동일한 포트 번호를 사용할 수 없습니다.
마크 TCP Dynamic ports
빈과에 필드 TCP Port
1433 필드.
아래와 같이 연결 문자열에서 포트 번호를 변경하십시오.
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
또는
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
노트 : TCP / IP 설정을 변경할 때마다 해당 Windows 서비스를 다시 시작해야합니다.
흥미롭게도 동일한 오류를 재현하기 위해 동적 포트 설정으로 돌아 갔을 때 오류를 해결 한 후에는 오류가 발생하지 않았습니다. 이유가 확실하지 않습니다.
SQL Server의 동적 포트에 대한 자세한 내용은 아래의 흥미로운 스레드를 읽으십시오.
여러 인스턴스에서 SQL Server 포트를 구성하는 방법은 무엇입니까?
동적 포트는 언제 "동적"입니까?
TCP 동적 포트를 언제 사용하고 언제 TCP 포트를 사용합니까?
이 블로그 에서 내 문제의 해결책을 이끌어 냈습니다.