SQL Сервер к PostgreSQL связанному серверу или лучший вариант - PullRequest
0 голосов
/ 28 января 2020

Я искал inte rnet и, по-видимому, в Linux версии SQL Server 2019 связанные серверы допускаются только от 1 SQL Server к другому SQL серверу. Мне нужно создать связанный сервер с linux SQL Server 2019 до postgresql 4.17, чтобы я мог запрашивать таблицы, которые находятся в PostgreSQL с SQL Server.

На моем компьютере Windows установлены драйверы ODB C, которые могут подключаться, и на моем сервере Ubuntu, на котором размещен SQL Server 2019, установлены драйверы odb c. извлекать данные и выполнять запросы из служб SSIS. OPENQUERY, OPENDATASOURCE и OPENROWSET тоже не работают.

Не могу поверить, что это невозможно. Будем весьма благодарны за любые предложения или идеи о том, как это сделать или как можно ближе к наилучшему из возможных решений.

1 Ответ

1 голос
/ 29 января 2020

Редактировать

Linux версия SQL Сервер 2019 поддерживает только связанные соединения с другими серверами SQL.

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-editions-and-components-2019?view=sql-server-linux-2017

Я предлагаю рассмотреть другие способы импорта данных, например, BCP и SSIS, к сожалению.

Конец редактирования

Ваше заявление: "очевидно, в Linux версии SQL Связанные серверы с сервером 2019 допускаются только между 1 SQL Сервер к другой SQL сервер. " Не могли бы вы сослаться, где это указано в документах Microsoft?

В примечаниях к выпуску для SQL Сервер 2019 на Linux Я вижу упоминание о связанных серверах (без каких-либо утверждений что вы можете подключиться только к другим SQL серверам).

Есть ли сообщение об ошибке, которое вы получаете, или могли бы вы дать нам дополнительную информацию о том, какие шаги вы предприняли и что вы сделали для устранения неполадок? Есть несколько конфигураций, необходимых для обеспечения связи на linux, в соответствии с документацией:

Функции, которые включают исходящие TCP-соединения из процесса sqlservr, такие как связанные серверы или группы доступности, могут не работать, если выполняются оба следующих условия:

Целевой сервер указан в качестве имени хоста, а не IP-адреса.

В исходном экземпляре в ядре отключен IPv6. Чтобы убедиться, что в вашей системе включен IPv6 в ядре, должны пройти все следующие тесты:

  • cat / proc / cmdline выведет загрузочную командную строку текущего ядра. Выходные данные не должны содержать ipv6.disable = 1.
  • Каталог / proc / sys / net / ipv6 / должен существовать.
  • Программа C, которая вызывает сокет (AF_INET6, SOCK_STREAM, IPPROTO_IP), должна завершиться успешно - системный вызов должен вернуть fd! = -1 и не завершиться с ошибкой EAFNOSUPPORT. Точная ошибка зависит от функции. Для связанных серверов это проявляется как ошибка времени ожидания входа. Для групп доступности, ALTER AVAILABILITY GROUP JOIN DDL на вторичном сервере завершится ошибкой через 5 минут с ошибкой тайм-аута конфигурации загрузки.

Чтобы обойти эту проблему, выполните одно из следующих действий:

  • Используйте IP-адреса вместо имен хостов для указания цели TCP-соединения.

  • Включите IPv6 в ядре, удалив ipv6.disable = 1 из загрузочной cmdline , Способ сделать это зависит от дистрибутива Linux и загрузчика, такого как grub. Если вы хотите, чтобы IPv6 был отключен, вы все равно можете отключить его, установив net .ipv6.conf.all.disable_ipv6 = 1 в конфигурации sysctl (например, /etc/sysctl.conf). Это по-прежнему не позволяет сетевому адаптеру системы получать IPv6-адрес, но позволяет функциям sqlservr работать.

...