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

StackOverflow https://stackoverflow.com/questions/2220191

Вопрос

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

Это было полезно?

Решение

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

Если вы можете использовать системные службы Unix, вы можете скомпилировать библиотеку TDS, например FreeTDS а затем используйте программу C, чтобы делать с результатом то, что вы хотите.Если вы хотите усложнить задачу, вы можете запустить соединение из собственной среды z/OS, скомпилировав код с помощью IBM C, SAS C или Дигнус 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.Хотя это звучит как жестокое и обычное наказание.

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Возможно, ты сможешь сделать то, что я делал в прошлом.Я написал программы/функции 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.Вот пример определения функции.СОЗДАТЬ ФУНКЦИЮ
TCL.BALANCEING_RECON(VARCHAR(4000))
ВОЗВРАТЫ
СТОЛ(
КОМПАНИЯ СИМВОЛ(6),
ПНОТЕНО ВАРЧАР(14),
ПУНИТ ЧАР(3),
ОСТАВКИ ДЕКАБРЯ(11,2),
FASB_4110 ДЕКАБРЬ(11,2),
FASB_4111 ДЕКАБРЬ(11,2),
USERAMOUNT1 ДЕК(11,2),
USERAMOUNT2 ДЕК(11,2),
ПОЛЬЗОВАТЕЛЬСКОЕ ПОЛЕ 1 VARCHAR(14)
)
ЯЗЫК КОБОЛ
ПРОДОЛЖИТЬ ПОСЛЕ НЕУДАЧИ
НЕ ДЕТЕРМИНИРОВАННЫЙ
ЧИТАЕТ SQL-ДАННЫЕ
ВНЕШНЕЕ ИМЯ DB2TCL02
КОЛЛИД DB2TCL02
СТИЛЬ ПАРАМЕТРА SQL
ВЫЗЫВАЕТСЯ ПРИ НУЛЕВОМ ВВОДЕ
НИКАКОГО ВНЕШНЕГО ДЕЙСТВИЯ
ЗАПРЕТИТЬ ПАРАЛЛЕЛЬНОСТЬ
Блокнот 8000
АСУТАЙМ ЛИМИТ 100
ОСТАВАТЬСЯ ЖИТЕЛЕМ ДА
ТИП ПРОГРАММЫ СУБ
СРЕДА WLM DB2TWLM
БЕЗОПАСНОСТЬ DB2
ДБИНФО
;СОВЕРШИТЬ;
ПРЕДОСТАВИТЬ ВЫПОЛНЕНИЕ ФУНКЦИИ TCL.BALANCING_RECON TO PUBLIC;

Чтобы вызвать функцию:ВЫБЕРИТЕ ИЗ
ТАБЛИЦА (TCL.BALANCEING_RECON(''
)) АС Х;

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top