そのため、Ubuntu VMがMS SQL Serverに接続できないという問題に直面しました。
状態:
- 1 つの Windows Server には複数の MS SQL インスタンスがあります。
- Ubuntu 20.04 LTS仮想マシン2台
2 つの Ubuntu VM の 1 つは、次のコマンドを使用して SQL Server に完全に接続できます。
sqlcmd -S sqserver.example.com\\instance1 -U sql.serviceaccount -P 'mypassword'
ただし、他のサーバー(設定、同じネットワーク、Ubuntuバージョンなどが非常に似ています)では、次のエラーが発生します。
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を放棄して再インストールしました。基本的なサーバーのインストール、特別なことはありません。インストール済みMicrosoft 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を使用してそのコンピューターのWebサーバーからファイルをダウンロードできます。
私には選択の余地はなかった。 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
したがって、この作業はまだ異常ですが、今はそのままにします。