Есть ли какой-нибудь способ получить доступ к серверу Sql из мейнфрейма z / OS и получить результат в эмуляции терминала IBM 3270? - PullRequest
4 голосов
/ 08 февраля 2010

Есть ли какой-либо (возможно дешевый) доступ к Microsoft Sql Server из мэйнфрейма z / OS (программы COBOL), который приводит к эмуляции терминала 3270?
Я знаю, что 3270 - довольно старая система, но в банке CED все еще очень популярна.

Ответы [ 8 ]

2 голосов
/ 15 февраля 2010

Это зависит от того, что вы на самом деле пытаетесь сделать. Я прочел ваш вопрос так: вы хотите, чтобы процесс на мэйнфрейме обращался к базе данных SQL Server, а затем что-то делал с результатом, возможно, с терминалом 3270.

Если вы можете использовать системные службы Unix, вы можете скомпилировать библиотеку TDS, например FreeTDS , а затем использовать программу на C, чтобы сделать то, что вы хотите, с результатом. Если вы хотите усложнить задачу, вы можете запустить соединение из собственной среды z / OS, скомпилировав код с помощью IBM C, SAS C или Dignus C / C ++ . Я могу порекомендовать Dignus, и я использовал его для создания кода, который взаимодействует с другими языками в z / OS. Заголовки Dignus и библиотека времени выполнения имеют (из памяти) некоторую родословную FreeBSD, которая помогает упростить портирование.

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

Если вы хотите использовать Java, вы можете использовать что-то вроде jTDS и писать код Java, чтобы делать то, что вам нужно. Я не использовал Java в z / OS, поэтому не могу дать там конкретного совета, но я использовал jTDS на других платформах и был доволен результатом.

Обновление:

Вы можете экспортировать функцию C в качестве точки входа в загрузочный модуль и затем вызывать ее из Cobol. Реализация C / C ++ должна иметь дело со структурами данных Cobol; они хорошо определены и предсказуемы, так что это не проблема. В зависимости от того, насколько гибкими вам нужны вещи, вы можете скомпилировать запрос в код на языке C и просто иметь функцию, которая выполняла предопределенный запрос и имел интерфейс для получения результата, или вы могли бы иметь что-то более сложное, когда запрос был предоставлен из программы Cobol.

Я использовал этот подход для предоставления функций API разработчикам Adabas / Natural, и он работал хорошо. Компилятор Dignus имеет механизм, позволяющий вызывающим сторонам предоставлять дескриптор библиотеки времени выполнения, чтобы вы могли управлять временем жизни среды выполнения C из вызывающей программы.

Для разработчика на C / C ++ это должно быть довольно просто. Если все ваши разработчики являются разработчиками Cobol, все может быть немного сложнее.

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

Для полноты я упомяну возможность реализации протокола TDS в Cobol. Звучит как жестокое и обычное наказание.

2 голосов
/ 11 февраля 2010

Если у вас есть эмуляция терминала 3270, какие терминалы вы используете? ПК

Один интересный хак - использование маршрутизатора Cisco для преобразования TCP на лету 3270 в vanilla, а затем написание простого прокси-сервера TCP для процедур SQL Server

1 голос
/ 10 марта 2011

Вы могли бы сделать что-то, что я делал в прошлом. Я написал программы / функции DB2 для MS-SQL COBOL, которые делают выбор таблицы / представления MS-SQL только для DB2. Это включало создание работающей службы на сетевом сервере, которая принимала бы соединения TCP / IP только с мэйнфрейма и использовала учетные данные, передаваемые как идентификатор пользователя / пароль, используемый для доступа к таблице MS-SQL. Затем он выполнит выборку для таблицы / представления и сначала передаст список имен полей с общим количеством строк. Затем он будет передавать каждую строку в виде полей с разделителями табуляции обратно в мэйнфрейм. Программа COBOL сохранит имена полей в таблице, которая будет использоваться для определения того, какую подпрограмму использовать для перевода каждого поля MS-SQL в DB2. С точки зрения DB2 это похоже на функцию, которая возвращает поля. У нас около 30 из них работает. Мне пришлось создать процедуру описания MS-SQL, чтобы помочь создать начальные определения полевых переходов для программы на языке COBOL. Также пришлось создать программу на языке COBOL для чтения описательных данных и создания команд разделения и процедур. Одна программа на языке COBOL для каждой таблицы / представления MS-SQL. Вот пример определения функции. СОЗДАТЬ ФУНКЦИЮ
TCL.BALANCING_RECON (УАКСНАК (4000)) * * +1002 ВОЗВРАТ
ТАБЛИЦА (
SCOMPANY CHAR (6),
ПНОТЕНО ВАРЧАР (14),
PUNIT CHAR (3),
LECEFEES DEC (11,2),
FASB_4110 DEC (11,2),
FASB_4111 ДЕК (11,2),
USERAMOUNT1 DEC (11,2),
USERAMOUNT2 DEC (11,2),
USERFIELD1 VARCHAR (14)
)
ЯЗЫКОВОЙ КОБОЛ
ПРОДОЛЖИТЬ ПОСЛЕ ОТКАЗА
НЕ ДЕТЕРМИНИСТИЧЕСКИЙ
ЧИТАЕТ ДАННЫЕ SQL
ВНЕШНЕЕ ИМЯ DB2TCL02
COLLID DB2TCL02
ПАРАМЕТР СТИЛЬ SQL
ВЫЗВАН НА НУЛЕВОЙ ВХОД
НЕТ ВНЕШНЕГО ДЕЙСТВИЯ
DISALLOW PARALLEL
SCRATCHPAD 8000
ASUTIME LIMIT 100
ПРЕБЫВАТЬ РЕЗИДЕНТ ДА
ПРОГРАММА ТИПА SUB
WLM ENVIRONMENT DB2TWLM
БЕЗОПАСНОСТЬ DB2
DBINFO
; COMMIT;
GRANT EXECUTE ON FUNCTION TCL.BALANCING_RECON TO PUBLIC;

Для вызова функции: ВЫБРАТЬ * ОТ
TABLE (TCL.BALANCING_RECON (''
)) AS X;

Вы должны поместить любые команды фильтра MS-SQL между кавычками.

Меня не просили обновить какие-либо данные MS-SQL, поэтому я еще не преодолел это препятствие. В DB2 также есть база данных, которая отслеживает ID / PW и сервер, на котором запущена запущенная задача. Это так, если сервер перегружен, разные варианты могут быть отправлены на разные серверы. Ответ быстрый, даже для больших таблиц. Тайм-аут совпадает с тайм-аутом 60 тупиков. Транспорт в основном на основе IP. DB2 просто видит данные как ссылки на внешние таблицы.

1 голос
/ 08 июня 2010

Просто получите драйвер JDBC для доступа к серверу MS-SQL. Затем вы можете создать его подкласс и использовать его в своей программе на Cobol и обращаться к базе данных так же, как если бы вы использовали его из Java.

Получив результаты, вы можете представить их с помощью обычных функций BMS.

Никаких грязных хаков или хитрых сетевых трюков не требуется. С IBM Enterprise Cobol вы действительно можете просто создать класс Java и использовать его так же, как в пространстве Java.

1 голос
/ 15 марта 2010

Это возможно, если вы пишете программы на языке COBOL, работающие в CICS.

Сначала оберните хранимую процедуру базы данных SQL Server оболочкой веб-службы. Для примера посмотрите статью 28577 на devx.com.

После этого вызовите новую веб-службу SQL Server, используя вызов веб-службы CICS.

Последнее использование стандартных команд CICS BMS для представления данных пользователю.

Разработка приложений для веб-сервисов CICS

1 голос
/ 08 февраля 2010

Не так - эмуляторы 3270 подключаются к мэйнфрейму IBM. Чтобы получить данные из базы данных SQL-сервера на мэйнфрейме, вам нужно написать программу, работающую на мэйнфрейме, которая считывает данные из базы данных SQL-сервера. Это потребует от вас запуска программного обеспечения драйвера на мэйнфрейме. Возможно, вам удастся найти стороннюю компанию, которая делает такие вещи, но это, вероятно, будет довольно дорого.

Если вам нужно собрать отчет или что-то, объединяющее данные из системы мэйнфреймов с внешними источниками данных, может быть проще получить данные с мэйнфрейма и выполнить интеграцию в другом месте - возможно, какой-то витрины данных.

Альтернативой может быть извлечение необходимых данных из базы данных SQL Server и загрузка их на мэйнфрейм в виде плоского файла для обработки там.

0 голосов
/ 21 января 2013

В моей компании мы используем Java для подключения к Sql Server.

И CL вызывает эту Java-программу:)

Очень просто ...

0 голосов
/ 15 февраля 2010

В ходе грязных хаков вы задумывались о создании простого HTTP или TCP-сервера, который возвращает .csv нужных вам табличных данных?

Это означает, что вашему клиенту нужен только простой клиент HTTP / TCP для доступа к данным, а не клиентская библиотека базы данных.

...