Я использую Microsoft JDBC mssql-jdbc-7.0.0.jre8.jar для подключения к серверу MS-SQL 11.00.2100. На данный момент я могу подключиться, используя DBeaver, но не могу подключиться, используя Tomcat или даже простой класс Java + JDBC. Эти альтернативы терпят неудачу с таймаутом.
Мой URL JDBC выглядит так:
jdbc:sqlserver://thundercat.md.pt:1433;database=MYDBNAME;instanceName=MYINSTANCENAME;user=myusername;password=mypassword;loginTimeout=50;
Мои выводы на данный момент:
должно быть что-то в конфигурации сервера, потому что у меня есть аналогичный сервер в той же сети, и я могу подключиться. Но я не могу узнать, что (не очень подкованный в MS-SQL).
Хотя используется тот же драйвер JDBC, DBeaver подключается не так, как Tomcat или мой простой класс; Используя tcpdump, я обнаружил, что DBeaver начинается с соединения UDP с портом 1434 и переходит с соединения tcp между двумя случайными портами, но мой простой класс всегда вместо этого начинается с соединения tcp с портом 1433, что приводит к ошибке по таймауту.
Мой код очень прост, и он работает, если я просто указываю на другой сервер, поэтому он должен иметь какое-то отношение к настройке сети на этом сервере и / или с этим соединением jdbc.
String connectionUrl =
"jdbc:sqlserver://" + host + ":1433;" + "database=" + database + ";" +
"instanceName=" + instance + ";" + "user=" + user + ";" +
"password=" + password + ";" +
"loginTimeout=50;";
Connection connection = DriverManager.getConnection(connectionUrl);
Statement statement = connection.createStatement();
Хотя эти параметры работают в DBeaver, они терпят неудачу с таймаутом от Tomcat или моего простого класса.
Это трафик для успешного соединения с DBeaver:
10:01:13.649901 IP 10.10.1.5.50031 > 10.10.3.50.1434: UDP, length 16
10:01:13.650674 IP 10.10.3.50.1434 > 10.10.1.5.50031: UDP, length 101
10:01:13.652401 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 0
10:01:13.652823 IP 10.10.3.50.49831 > 10.10.1.5.55025: tcp 0
10:01:13.653400 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 0
10:01:13.653452 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 67
10:01:13.654168 IP 10.10.3.50.49831 > 10.10.1.5.55025: tcp 31
10:01:13.656148 IP 10.10.1.5.55025 > 10.10.3.50.49831: tcp 273
...
И это неудачное соединение из моего класса jdbc:
10:02:26.273941 IP 10.10.1.5.55074 > 10.10.3.50.1433: tcp 0
10:02:26.874860 IP 10.10.1.5.55076 > 10.10.3.50.1433: tcp 0
10:02:29.877173 IP 10.10.1.5.55076 > 10.10.3.50.1433: tcp 0
10:02:35.875310 IP 10.10.1.5.55076 > 10.10.3.50.1433: tcp 0
10:02:39.575984 IP 10.10.1.5.55086 > 10.10.3.50.1433: tcp 0
10:02:42.575554 IP 10.10.1.5.55086 > 10.10.3.50.1433: tcp 0
10:02:48.576195 IP 10.10.1.5.55086 > 10.10.3.50.1433: tcp 0
...
Я хотел бы понять, как настроить соединение JDBC, чтобы оно работало так же, как DBeaver.