Подключение к серверу IBM я от Sql Server 2008 R2

У меня есть большое дело: мне нужно подключиться (я просто хочу читать данные, а не писать) моему клиенту IBM AS/400 (ака iSeries, теперь IBM i) сервер...

Я думаю, что у меня есть все необходимые параметры (дано мне программистом AS/400), но я не могу понять, какой драйвер мне нужно использовать, и если у меня есть все необходимое для этого программное обеспечение!

Я установил драйвер IBM AS/400 ClientAccess 5.8 (с патчем для последней ОС), и теперь я пытаюсь настроить новый Linked Server на моем сервере Sql Server 2008 R2 (x64).

Первая проблема: Какой драйвер использовать?

У меня так много вариантов (но, возможно, никто из них не работает!!):

IBM DB2 UDB for iSeries IBMDASQL OLE DB Provider
IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider
IBM DB2 UDB for iSeries IBMDARLA OLE DB Provider

... или, возможно, другие родовые драйверы OLEDB/ODBC?!

Вторая проблема: Где я должен поместить свои параметры (в каких полях я имею в виду!)

В любом случае, я выбираю поставщика для моего Linked Server, очевидно, мне нужно установить мои параметры... но у меня есть только это:

  • Имя пользователя ADMIN
  • Пароль пользователя ADMIN
  • IP-адрес сервера AS/400
  • Имя "основного" архива, в котором хранятся мои данные (что-то вроде ACG_DATV2)

Третья проблема. Как мне писать свои запросы? Как ссылаться на "архив" AS/400 и таблицы?

Я не знаю, как построить мой запрос на чтение: где хранятся таблицы и представления (?!) и как я могу ссылаться на них?

Заранее благодарю вас!

Ответ 1

Я думаю, что есть много способов добиться того, чего вы хотите, но я попытаюсь объяснить, что бы я сделал в вашем случае.

С этой версией IBM ClientAccess (а также с патчем) у меня не должно быть проблем с подключением к серверу Sql Server 2008 R2, если вы используете правильный поставщик данных.

Прежде всего, попробуйте настроить связанный сервер таким образом:

  • Связанное имя сервера: что вы хотите, это просто пользовательское имя (пример: MYAS400)
  • Поставщик: IBM DB2 UDB for iSeries IBMDASQL OLE DB Provider
  • Название продукта: не важно, что-то вроде iSeries Access OLEDB Driver
  • Источник данных: IP-адрес сервера AS/400 (пример: 192.168.0.1)

Если вы сконфигурируете связанный сервер с помощью мастера или кода SQL, то в первый раз ему потребуется получить доступ к данным сервера AS/400, вам будут предложены учетные данные с типичным окном iSeries (посмотрите в моем примере).

Задайте свое имя пользователя (идентификатор пользователя) и относительный пароль, не считая случая строк.

enter image description here

Как общий отзыв (но это связано только с моим опытом!), старайтесь избегать специальных символов и различий в верхних/нижних случаях...

Если вы приедете сюда (никаких проблем с созданием связанного сервера), Linked Server должен работать (поэтому первая и вторая проблемы решены): пусть построит первый запрос!

После создания связанного сервера все, что вам нужно, это просто правильно ссылаться на архив, библиотеку и, конечно же, правильную таблицу и связанный сервер (по имени): с этой информацией создайте такой запрос ( это обычный синтаксис T-SQL):

SELECT
    (Field1)
    , (Field2)
    , *
FROM (Linked Server Name).(Catalog Name).(Library).(TableName)

Единственной информацией, которую вы, вероятно, не хватает, является "архив": вы можете легко найти ее, просматривая дерево Каталогов внутри вашего нового Linked Server, или просто используйте инструмент iSeries Access Navigator!

Итак, в вашем случае, я думаю, что запрос должен быть (более или менее):

SELECT
    FILIO
    , DTVLD
    , DTVLA
    , SEQZA
    , CFIMP
    , PADRE
    , TPVLD
    , CMVLD
    , *
FROM MYAS400.S242DA0A.ACG_DATV2.ANLE200F

Обратите внимание, что S242DA0A действует только в моем случае...

Помните также, что:

  • AS/400, вероятно, попросит вас ввести учетные данные очень часто: также, если вы закроете и снова откроете SSMS.
  • Производительность?... лучше поговорить о чем-то еще:)... извлеките таблицы в своих таблицах сервера Sql и запросите их оттуда! Сделайте это с помощью простого: SELECT (Fields) INTO myTable FROM (AS/400 table)
  • Я пробовал этот процесс много раз, у меня не было много проблем (как только я получу навыки!)... но только для чтения данных (как вы просили)! Никогда не пытались обновлять данные.

УДАЧА!