Программирование >>  Oracle 

1 ... 288 289 290 [ 291 ] 292 293 294 ... 469


Внешние процедуры на языке С 1287

справки в разделе NetAssistantHelp, Local, Listeners, How To..., и Configure External Pcedures for the Listener.

После изменения файла LISTENER.ORA не забудьте остановить и запустить процесс прослушивания с помощью команд lsnrctl stop и lsnrctl start из командной строки.

Следующий конфигурационный файл - TNSNAMES.ORA. Этот файл должен находиться в каталоге, который сервер будет использовать при разрешении имен. Обычно файл TNSNAMES.ORA находится на клиенте и используется для поиска сервера. В данном случае сервер сам должен найти службу по имени. Файл TNSNAMES.ORA будет иметь примерно такой вид:

# TNSN1ES.ORA Network Configuration

# File:С:\oracle\network\admin\TNSNAMES.ORA

# Generated by Oracle configuration tools.

EXTPROC CONNECTION DATA = (DESCRIPTION = (ADDRESS LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCl))

(CONNECT DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

В этом конфигурационном файле существенно следующее.

EXTPROC CONNECTION DATA. Имя службы, которую будет искать сервер. Это имя использовать обязательно. Далее будет рассмотрена проблема, связанная с установкой параметра names.default domain в конфигурационном файле SQLNET.ORA.

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCl)). Этот параметр должен быть таким же, как в файле LISTENER.ORA. В частности, значения компонента KEY = должны совпадать.

(CONNECT DATA =(SID = PLSExtProc). Значение после SID = должно соответствовать значению SID в конструкции (SID DESC = (SID NAME = PLSExtProc) в файле LISTENER.ORA.

С именем EXTPROC CONNECTION DATA связана следующая проблема. Если в файле SQLNET.ORA задан стандартный домен, он должен быть включен в запись TNSNAMES. Так что, если в файле SQLNET.ORA есть следующая установка:

names.default domain = world необходимо задать в файле TNSNAMES.ORA значение

EXTPROC CONNECTION DATA.wod, а не просто EXTPROC CONNECTION DATA.

Любые ошибки в представленных выше конфигурационных файлах почти наверняка приведут к выдаче сообщения об ошибке ORA-28575, представленного ниже:



1288 Глава 18

ERROR at line 1:

ORA-28575: unable to open RFC connection to external procedure agent

ORA-06512: at USERNAME.PROCEDURE NAME , line 0 ORA-0 6 512: at line 5

При получении этого сообщения об ошибке имеет смысл проверить следующее:

доступна ли программа extproc и является ли она выполняемой;

правильно ли настроена среда сервера для использования внешних процедур;

правильно ли сконфигурирован процесс прослушивания.

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

Проверка программы extproc

Если после конфигурирования поддержки внешних процедур вы получаете сообщение об ошибке ORA-28575, прежде всего необходимо проверить наличие программы extproc и возможность ее выполнения. Это легко сделать из командной строки - как в Windows, так и в UNIX. Это надо делать, зарегистрировавшись как пользователь, от имени которого будет запускаться процесс прослушивания (поскольку именно этот процесс и будет выполнять программу extproc), чтобы убедиться, что этот пользователь имеет все необходимые права. Затем нужно выполнить следующую команду:

C:\oracle\BIN>.\extproc.exe

Oracle Corporation-SATURDAY AUG 05 2 000 14:57:19.851

Heterogeneous Agent based on the following module(s): - External Procedure Module

C:\oracle\BIN>

Результат работы должен быть подобен представленному выше. Обратите внимание, что я выполнял команду из каталога [ORACLE HOME]\bin, поскольку именно в и находится программа extproc.exe. Если выполнить эту программу не удается, значит, установка выполнена некорректно или необходимо исправить конфигурацию на уровне операционной системы.

Проверка среды сервера

В среде сервера нужно проверить несколько установок. Прежде всего проверьте, используется ли соответствующий файл TNSNAMES.ORA и правильно ли он сконфигурирован. Например, на моей UNIX-машине с помощью программы truss я получил следующую информацию:

$ setenv TNS ADMIN /tmp

$ truss sqlplus /@ora8i.us.oracle.com & grep TNSNAMES

access( /export/home/tkyte/.TNSNAMES.ORA , 0) Err#2ENOENT access( /tmp/TNSNAMES.ORA , 0) Err#2 ENOENT



Внешние процедуры на языке С 1289

access(/var/opt/oracle/TNSNAMES.ORA , 0) Err#2 ENOENT

access(Vexport/home/oracle8i/network/admin/TNSNAMES.ORA , 0) = 0

Итак, сервер Oracle искал файл TNSNAMES.ORA:

в моем начальном каталоге;

в каталоге, задаваемом переменной среды TNS ADMIN;

в каталоге /var/opt/oracle;

и, наконец, в каталоге $ORACLE HOME/network/admin/.

Типичная ошибка: файл TNSNAMES.ORA конфигурируется в каталоге [ORACLE HOME]/network/admin, но установлена переменная среды TNS ADMIN, которая заставляет сервер Oracle искать файл TNSNAMES.ORA в другом месте. Поэтому проверьте, используется ли соответствующий файл TNSNAMES.ORA (чтобы добиться однозначности, просто установите переменной среды TNS ADMIN требуемое значение перец запуском сервера; это гарантирует, что сервер Oracle использует именно тот экземпляр файла, который необходимо).

Убедившись, что используется соответствующий файл TNSNAMES.ORA, надо поискать ошибки конфигурирования в этом файле. Следует проверить в соответствии с представленными выше примерами, настроены ли компоненты (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCl)) и (CONNECT DATA = (SID = PLSExtProc)) корректно. Сравните их с содержимым файла LISTENER.ORA. Если для установки использовалась программа Net8 Assistant, заботиться о соответствии круглых скобок не придется. Если файл редактируется вручную, будьте очень внимательны. Одна незакрытая или стоящая не на своем месте круглая скобка не позволит использовать соответствующую запись.

Проверив корректность этих компонентов, обратите внимание на имя записи в файле TNSNAMES.ORA. Это должна быть запись EXTPROC CONNECTION DATA. Никакое другое имя не подходит (к имени записи может быть только добавлено имя домена). Проверьте правильность написания имени. Одновременно сверьтесь с конфигура-ционн1м файлом SQLNET.ORA. Сервер Oracle ищет файл SQLNET.ORA так же, как и файл TNSNAMES.ORA. Учтите, что он необязательно находится в том же каталоге, что и файл TNSNAMES.ORA, - он может быть и в других местах. Если установлен любой из параметров:

names.directory path

names.default domain

необходимо убедиться, что файл TNSNAMES.ORA им соответствует.

Если параметр names.default domain имеет непустое значение, например (WORLD), необходимо проверить, указан ли этот домен в соответствующей записи файла TNSNAMES.ORA. Вместо EXTPROC CONNECTION DATA, в качестве имени записи в этом случае должно быть указано EXTPROC CONNECTION DATA.WORLD.

Если установлен параметр names.directory path, необходимо убедиться, что он содержит значение TNSNAMES. Если параметр names.directory path имеет, например, значение (HOSTNAME,ONAMES), то протокол Net8 будет использовать имена хостов (Host



1 ... 288 289 290 [ 291 ] 292 293 294 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика