|
Программирование >> Oracle
Внешние процедуры на языке С 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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |