그래서 Ubuntu VM에서 MS SQL Server에 연결할 수 없는 문제에 직면했습니다.
상태:
- 하나의 Windows Server에는 여러 MS SQL 인스턴스가 있습니다.
- Ubuntu 20.04 LTS 가상 머신 2개
두 개의 Ubuntu VM 중 하나는 다음 명령을 사용하여 SQL Server에 완전히 연결할 수 있습니다.
sqlcmd -S sqserver.example.com\\instance1 -U sql.serviceaccount -P 'mypassword'
하지만 다른 서버(설정, 동일한 네트워크, 우분투 버전 등이 매우 유사)에서는 다음 오류가 발생합니다.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. .
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
그래서 VM2 문제 해결을 시작했습니다.
- sqserver.example.com에 ping을 보낼 수 있습니다.
nc
SQL 인스턴스에 연결할 수 있는 개방형 포트(예: 포트 56042) 사용- 모든 방화벽 규칙을 제거하고 iptables를 사용하여 모든 트래픽을 허용했습니다.
- 가상 머신 다시 시작
- IP 구성을 확인하십시오(VM1과 마찬가지로 더 높은 IP 주소(172.16.1.11 대신 172.16.1.12)를 사용하면 제대로 작동합니다).
- 양쪽 끝에 있는 ARP 테이블을 확인하여 이상한 점이 없는지 확인하세요(중복된 IP 등이 없는지).
SQL 측에서:
- SQL Browser 서비스가 실행 중인지 다시 확인하고 다시 시작하세요.
- SQL 인스턴스 다시 시작`
- Windows 방화벽이 있는지(활성화되지 않음) 확인하세요.
모든 작업이 완료된 후 VM2에 Ubuntu를 포기하고 다시 설치했습니다. 기본 서버 설치, 특별한 것은 없습니다. 설치됨마이크로소프트 SQL 도구이전과 동일합니다(VM01에서도 마찬가지).
물론 나는 그것이 작동할 것이라고 예상했지만 놀랍게도 다음과 같은 결과를 얻었습니다.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. .
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
r
정확히 같은 오류입니다.
이 외에도 SQL 서버에 ping을 보낼 수 있고 curl
VM02를 사용하여 해당 컴퓨터의 웹 서버에서 파일을 다운로드할 수 있습니다.
나에게는 선택의 여지가 없었다. SQL 서버는 다른 Linux 컴퓨터와 여러 Windows 컴퓨터에서 액세스할 수 있습니다.
고쳐 쓰다:
이것을 사용Python 스크립트SQL Browser 서비스에서 응답을 받지 못하는 것을 발견했습니다.
VM1에서는 다음과 같은 응답을 받습니다.
Instance 172.16.1.123\instance1 is listening on port 56044.
VM2에서는 다음과 같은 응답을 받습니다.
No response from the SQL Browser service. Verify that the service is available on 172.16.1.123 and \instance1 is a valid instance name on it.
물론 둘 다 동일한 스크립트를 사용하여 실행됩니다.
고쳐 쓰다:
따라서 다음을 사용하여 특정 인스턴스에 연결할 수 있습니다.
sqlcmd -S tcp:sqlserver.example.com,56040 -U sqlaccount
따라서 이 작업은 여전히 이상하지만 지금은 그대로 두겠습니다.