2010-02-08 3 views
4

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

ответ

2

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

Если вы можете использовать Unix System Services, вы можете скомпилировать библиотеку 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 в качестве точки входа в модуль загрузки, а затем вызвать, что из Кобола. Реализация C/C++ должна иметь дело с структурами данных Cobol; они хорошо определены и предсказуемы, так что это не проблема. В зависимости от того, насколько гибко вам нужны вещи, вы можете скомпилировать запрос в код C и просто иметь функцию, которая выполняла предопределенный запрос и имела интерфейс для получения результата, или у вас могло быть что-то более сложное, где был предоставлен запрос из программы Cobol.

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

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

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

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

+0

Спасибо за ваш ответ. Я немного изменил вопрос, потому что программы должны быть закодированы в Cobol.Sorry, если я взял язык Cobol как должное. – systempuntoout

+0

Нет проблем. Вы можете вызвать C/C++ из Cobol без проблем; вызывающие соглашения хорошо определены на z/Os. – janm

+0

Хороший ответ и дешевое решение; к несчастью, у нас нет разработчиков C \ C++. – systempuntoout

1

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

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

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

+0

Спасибо, что мы обычно делаем, дублирующие таблицы SQL Server на db2 держать их синхронизируется через каждую ночь пакетного jobs..or, как вы сказали, извлекают данные из sql и db2 и обрабатывают интеграцию в другом месте. Мне было просто любопытно, есть ли способ избежать этих приемов. – systempuntoout

2

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

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

+0

Hi TFD Да, мы используем ПК. Является ли этот взлом возможным в производственной среде банка? Бесполезно говорить о том, что соединение с db2 должно продолжать работать :). – systempuntoout

+0

YMMV, но он был использован крупным коммерческим банком в производстве хотя бы один раз, насколько мне известно.Если у вас ПК, почему бы им не перейти прямо к SQL? – TFD

+0

Правильный сценарий: «мэйнфрейм подключается как к db2 \ sql, так и интегрирует данные для клиентов». – systempuntoout

0

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

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

1

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

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

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

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

Appliation Development for CICS Web Services

0

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

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

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

1

Возможно, вы могли бы сделать что-то, что я делал в прошлом. Я написал программы/функции DB2 для MS-SQL COBOL, которые делают таблицу/представление MS-SQL SELECT только для DB2. Это связано с созданием работающего сервиса на сетевом сервере, который будет принимать соединения TCP/IP только с мэйнфрейма и использовать учетные данные, переданные в качестве идентификатора пользователя/PW, используемого для доступа к таблице MS-SQL. Затем он выдает выбор против таблицы/представления и сначала передает список имен полей с общим количеством строк. Затем он будет передавать каждую строку, как поля с разделителями табуляции, обратно в мэйнфрейм. Программа COBOL сохранит имена полей в таблице, которая будет использоваться для определения, какую подпрограмму использовать для перевода каждого поля MS-SQL в DB2. С точки зрения DB2 она выглядит как функция, возвращающая поля. У нас около 30 из них. Мне пришлось создать процедуру описания MS-SQL, чтобы помочь создать начальные определения полевых транзакций для программы COBOL. Также необходимо было создать программу COBOL для чтения описательных данных и создания команд привязки и разделения процедур. Одна программа COBOL для каждой таблицы/представления MS-SQL. Вот пример определения функции. CREATE FUNCTION
TCL.BALANCING_RECON (УАКСНАК (4000))
ВОЗВРАТ
ТАБЛИЦА (
SCOMPANY СИМ (6),
PNOTENO VARCHAR (14),
PUNIT СИМ (3),
LATEFEES декабря (11,2),
FASB_4110 декабря (11,2),
FASB_4111 декабря (11,2),
USERAMOUNT1 декабря (11,2),
USERAMOUNT2 декабря (11,2),
USERFIELD1 УАКСНАК (14)
)
ЯЗЫК COBOL
ПРОДОЛЖИТЬ ПОСЛЕ ОТКАЗА
НЕ детерминированных
ЧИТАЕТ SQL DATA
ВНЕШНЕЕ ИМЯ DB2TCL02
COLLID DB2TCL02
ПАРАМЕТР СТИЛЬ SQL
ПРИЗВАЛ NULL INPUT
NO EXTERNAL ACTION
DISALLOW PARALLEL
В Блокнотную 8000
ASUTIME LIMIT 100
STAY РЕЗИДЕНТОМ ДА
ПРОГРАММА ТИП 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, которая отслеживает ID/PW и сервер, на котором запущена запущенная задача. Это происходит, если сервер становится перегруженным, различные варианты могут быть перенесены на разные серверы. Ответ выполняется быстро, даже для больших таблиц. Тайм-аут совпадает с 60 таймаутом блокировки. Транспортировка осуществляется в основном на основе IP. DB2 просто воспринимает данные как внешнюю таблицу.

+0

Это интересно, tnx – systempuntoout

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^