Кобол Microfocus не может подключиться к postgres с помощью DSN

Я работаю над кодом COBOL Microfocus в поле UNIX и пытаюсь подключиться к базе данных Postgres, используя системный DSN, который уже создается, и для подключения к этой базе данных я выполняю ниже SQL-запрос в нашем коде: -

EXEC SQL CONNECT TO ‘SYSTEM_DSN’ USER ‘username.password’ END-EXEC.

Однако я получаю следующую ошибку в ответе, когда я отправляю JCL для кода Microfocus COBOL: -

JCLCM0188I J0003556 BE24010R JOB STARTED 01:02:56
 CASKC0027E Error executing service 'PGM#AR641010' Load error : file 'sqlastrt' error code: 173, pc=F97, call=1, seg=0 173 Called program file not found in drive/directory 01:02:57
 JCLCM0192S J0003556 BE24010R STEP ABENDED STEP001 - COND CODE RTS0173 01:02:57
 JCLCM0181S J0003556 BE24010R JOB ABENDED - COND CODE RTS0173 01:02:57

DSN драйвера ODBC, созданный со следующими данными в /etc/odbc.ini:

[DTF_Postgres_DSN]
Driver=/usr/edb/connectors/odbc/edb-odbc.so

person AmitG    schedule 01.08.2018    source источник
comment
Если вы помечаете это с помощью JCL, вы должны показать JCL.   -  person NicC    schedule 01.08.2018
comment
Это среда MicroFocus. Я не уверен, должен ли JCL быть здесь тегом, поскольку это не настоящая z/OS или z/VSE, а просто имитация.   -  person zarchasmpgmr    schedule 02.08.2018
comment
@AmitG Мой ответ вам подходит? Если да: пожалуйста, примите. Если нет: прокомментируйте отсутствующие/непонятные части.   -  person Simon Sobisch    schedule 09.10.2018


Ответы (1)


На самом деле ошибка не говорит «не удается подключиться к postgres», а «вызванный программный файл« sqlastrt »не найден».

Очень вероятно, что показанный EXEC SQL прекомпилятор преобразует в CALL 'sqlastrt', и этот модуль/функция не найден в среде выполнения COBOL.

Опции:

  • Если где-то есть модуль с таким же именем: включите его каталог в путь запуска COBOL (и проверьте с помощью ldd, что его зависимости находятся в LD_LIBRARY_PATH), в противном случае либо
  • предварительно загрузите общий объект (библиотека postgresql/odbc), предоставляющий эту функцию (также убедитесь, что ldd не показывает отсутствующие зависимости) или
  • убедитесь, что ваш компилятор использует статическую компоновку для сгенерированных CALLs и ссылку на библиотеку postgresql/odbc, таким образом, нет динамического поиска модуля в среде выполнения COBOL, вместо этого система загрузит его, когда программа COBOL загружается в память

Как только эта проблема будет решена, вы сможете проверить, действительно ли библиотека postgres/odbc находит/читает созданный вами DSN.

person Simon Sobisch    schedule 01.08.2018