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

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


person systempuntoout    schedule 08.02.2010    source источник


Ответы (8)


Это зависит от того, что вы на самом деле пытаетесь сделать. Насколько я понимаю ваш вопрос, вы хотите, чтобы процесс на основе мэйнфрейма обращался к базе данных 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 и просто иметь функцию, которая выполняет предопределенный запрос и иметь интерфейс для получения результата, или вы можете иметь что-то более сложное, где запрос был предоставлен из программы Кобол.

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

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

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

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

person janm    schedule 15.02.2010
comment
Спасибо за ваш ответ. Я немного изменил вопрос, потому что программы должны быть закодированы на Коболе. Извините, если я воспринял язык Кобол как должное. - person systempuntoout; 15.02.2010
comment
Без проблем. Вы можете без проблем вызывать C/C++ из Cobol; соглашения о вызовах четко определены на z/Os. - person janm; 15.02.2010
comment
Хороший ответ и дешевое решение; к сожалению, у нас нет разработчиков C\C++. - person systempuntoout; 16.02.2010

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

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

person TFD    schedule 11.02.2010
comment
Привет, TFD. Да, мы используем ПК. Возможен ли этот хак в производственной среде банка? Бесполезно говорить, что связь с db2 должна продолжать работать :). - person systempuntoout; 11.02.2010
comment
YMMV, но, насколько мне известно, он использовался крупным коммерческим банком в производстве по крайней мере один раз. Если у вас есть ПК, почему бы не перейти на SQL напрямую? - person TFD; 11.02.2010
comment
Правильный сценарий: мейнфрейм подключается к обеим базам данных db2\sql и интегрирует данные для клиентов. - person systempuntoout; 11.02.2010
comment
Да, но это не тот вопрос, который вы задали. Существует множество способов доступа мейнфрейма к SQL Server, например, есть простые адаптеры CICS для OLEDB. - person TFD; 11.02.2010
comment
Некоторые банки используют переключатели транзакций для переноса некоторых транзакций с мейнфрейма на кластеры ПК-серверов. Это просто продвинутая форма взлома Cisco. - person TFD; 11.02.2010

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

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

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

person ConcernedOfTunbridgeWells    schedule 08.02.2010
comment
Спасибо, что мы обычно делаем, так это дублируем таблицы сервера sql на db2, сохраняя их синхронизированными с помощью ночных пакетных заданий... или, как вы сказали, извлекаем данные из sql и db2 и обрабатываем интеграцию в другом месте. Мне было просто любопытно, есть ли способ избежать этих методов. - person systempuntoout; 08.02.2010

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

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

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

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

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

person Chuck    schedule 15.03.2010

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

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

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

person Joe Zitzelberger    schedule 08.06.2010
comment
Мы использовали JZOS Java, чтобы сделать то же самое с драйвером JDBC для доступа к серверу MS-SQL. Кобол не нужен. - person Baruch Atta; 12.10.2018

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

Для вызова функции: SELECT * FROM
TABLE (TCL.BALANCING_RECON(''
)) AS X;

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

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

person BitCounter    schedule 10.03.2011

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

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

person mythz    schedule 15.02.2010

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

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

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

person Portekoi    schedule 21.01.2013