Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Help Needed External Procs ORA-28575
Bookmark Fixed font Go to End
Doc ID: Note:70638.1
Subject: External Procedures - Troubleshooting ORA-28575 Errors
Type: BULLETIN
Status: PUBLISHED
Content Type: TEXT/PLAIN
Creation Date: 03-JUN-1999
Last Revision Date: 18-APR-2000
Language: USAENG
External Procedures - Troubleshooting ORA-28575 on UNIX Platforms
Introduction
This article provides a brief overview of the Oracle external procedure architecture and provides a number of suggestions for troubleshooting the ORA-28575 error. Although the emphasis of this bulletin is on the UNIX environment, many of the concepts also apply to Windows and other environments. All concepts apply equally to Oracle 8 and 8i.
This article does not address all aspects of external procedures. It provides just enough background information to provide a context for discussing the ORA-28575 error which is the focus of this article.
Oracle's External Procedure Architecture
A list of the essential components for executing an external procedure is included below, along with a brief description of the role of each.
The database:
The listener:
The external procedure agent:
The user-provided shared library:
The library alias:
The external procedure call specification:
A Typical Sequence of Events
The following is a typical sequence of events:
Note: This step only occurs the first time the external procedure
is invoked within a given session. After that, the existing external procedure agent can be contacted directly.
4. The listener starts an external procedure agent process to service
the external procedure execution request and returns the address of the new extproc agent to the requesting database.
5. The database sends the external procedure agent the name of the
shared library, the name of the C function to invoke, and after performing the required conversions from PL/SQL to C datatypes, the actual arguments.
6. The external procedure agent loads the shared library, invokes
the appropriate C function, converts any returned data from C to the corresponding PL/SQL types, and sends the data back to the database.
Why does the ORA-28575 error occur?
The ORA-28575 error indicates that a failure occurred in steps 3-4 above. Either the database was unable to establish a connection to the external procedure listener (step 3), OR the external procedure listener was unable to execute the extproc agent (step 4).
Troubleshooting the ORA-28575 error
Reasons for the ORA-28575 include:
o Issues with extproc
o Database configuration issues
o Listener configuration issues
Issues with extproc
You can receive this error if the extproc executable either does not exist, OR the listener does not have permissions to execute it, OR you cannot execute extproc for any other reason.
Check the following:
$ ./extproc
If all is well, you should see a banner displayed similar to the following (the text may differ slightly):
Oracle Corporation --- Wed Jul 19 11:00:04.139352
Heterogeneous Agent based on the following module(s): - External Procedure Module
If you do not see such a banner or you receive an error, you may need to reinstall and/or rebuild the extproc executable or change the permissions to make it executable.
Database Configuration Issues
This article does not address database configuration issues other than those which result in the ORA-28575 error.
Database configuration issues resulting in an ORA-28575 include:
In some environments, multiple copies of the tnsnames.ora file may exist in the file system. The copy used by the database is that which is pointed to by TNS_ADMIN when the database is started.
To ensure that your changes to the tnsnames.ora file are picked up by the database, you may need to shut down the database, set the TNS_ADMIN environment variable to indicate the directory with the appropriate file, and restart the database.
2. The tnsnames.ora file is improperly configured
The tnsnames.ora file must be configured to contain a special service name called extproc_connection_data. This service name provides the database with the necessary parameters to connect to the external procedure listener. The entry looks like:
extproc_connection_data =
(DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = extproc_key)) (CONNECT_DATA = (SID = extproc_agent)) )
If, and only if, the sqlnet.ora file contains the following:
names.default_domain = some.domain (e.g. us.oracle.com)
then you must modify the above tnsnames.ora entry as follows:
extproc_connection_data.some.domain = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = extproc_key)) (CONNECT_DATA = (SID = extproc_agent)) ) Setting default_domain causes some.domain to be automatically appended to all service names that are not already qualified with a domain. This is also true for extproc_connection_data. If default_domain is set, and that domain is not appended to the service name in tnsnames.ora, the connection fails. Note: As was the case for tnsnames.ora, the database uses the sqlnet.ora file that was pointed to by TNS_ADMIN at the time the database was last started. Make sure you are looking at the right copy of the file. b. extproc_key must be the same as the KEY=extproc_key entry in the listener.ora file (see below). Otherwise, it can be any string that is not already in use. This uniquely identifies which external procedure listener is to be contacted. c. extproc_agent must be the same as the SID_NAME=extproc_agent entry in the listener.ora file (see below). Otherwise, it can be any SID that is not already in use. This is the service that appears in the list displayed by 'lsnrctl status'. d. PROTOCOL must be set to IPC. Other protocols (e.g. TCP) are currently not supported for external procedures.
3. The names.directory_path parameter in the sqlnet.ora file does
not include the tnsnames.ora file as a source of directory info.
If the sqlnet.ora file pointed to the the TNS_ADMIN environment variable contains an entry of the following form:
names.directory_path = (tnsnames, onames)
then Net8 looks in both the tnsnames.ora file and Oracle Names to resolve service names (including extproc_connection_data). If the 'tnsnames' entry is omitted as follows:
names.directory_path = (onames)
then only Oracle Names is searched and the modifications to the tnsnames.ora file are not picked up by the database.
Listener Configuration Issues
This bulletin does not address listener configuration issues other than those which result in the ORA-28575 error.
Listener configuration issues resulting in an ORA-28575 include:
The external procedure listener reads the listener.ora pointed to by TNS_ADMIN when it is started. If the listener is started prior to some modification to the listener.ora file, you must shut down the listener, set the TNS_ADMIN environment variable to point to the modified copy of listener.ora, and restart the listener.
For example:
$ lsnrctl stop callout_listener $ export TNS_ADMIN=/u02/etc # assumes Korn shell $ lsnrctl start callout_listener
The name callout_listener is not fixed, but is used in this example for consistency with the examples that follow.
2. The listener.ora file is improperly configured
When configuring the listener for external procedures, the following two options exist:
o Configure the existing database listener to listen for external procedures and database connections or o Configure a separate listener specifically for external procedures.
There are several benefits to the second option including:
For these reasons, we recommend the second method. It is the only method addressed in this article.
To properly configure a separate listener for external procedures:
callout_listener = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC) (KEY = extproc_key) ) ) sid_list_callout_listener = (SID_LIST = (SID_DESC = (SID_NAME = extproc_agent) (ORACLE_HOME = oraclehomedir) (PROGRAM = extproc) ) ) where callout_listener is the name of the listener extproc_key agrees with the KEY in tnsnames.ora extproc_agent agrees with the SID in tnsnames.ora ii. Remove any entries related to external procedures from the default listener that is being used to listen for database connections if such entries exist. This is only an issue if you have previously attempted to configure a single listener for both purposes. iii. Restart the database listener to make sure it reflects the most recent listener.ora changes. Restarting the original listener is especially important if it was previously set to listen for external procedures. % lsnrctl stop listener % setenv TNS_ADMIN /u02/etc # assumes C shell % lsnrctl start listener Observe and correct any errors that may have resulted from modifying the listener.ora file (i.e. typographical errors). iv. Start the new external procedure listener. % lsnrctl start callout_listener Observe and correct any errors that may have resulted from modifying the listener.ora file (i.e. typographical errors).
Testing Your Configuration
The database ships with a sample program which can be used to test your external procedure configuration. You can find the following files in the $ORACLE_HOME/plsql/demo directory:
extproc.c # the C file implementing the external procedures
extproc.sql # an SQL script for creating and invoking the required
# packages and procedure/function call specifications.
demo_plsql.mk # a makefile for compiling the extproc demo
The steps for running the demo are:
$ make -f demo_plsql.mk extproc.so
2. Ensure user scott and requisite tables (e.g. EMP and DEPT) exist.
Also, ensure that the DBMS_OUTPUT package exists and is valid.
3. Follow the steps outlined in the comments section of extproc.sql.
A couple of steps must be completed before you run the extproc.sql script, including creating the LIBRARY and granting any privileges required. When creating the LIBRARY, make sure that you specify the correct location for your shared library. The example assumes that you put it in /tmp, however, this may not be the case. 4. From SQL*Plus, execute the following to create the PL/SQL package and call specifications and execute the demo: SQL> @extproc.sql
When executed, the demo invokes several examples, each of which produces output to the screen via the DBMS_OUTPUT package. You should not see any errors. If you receive the ORA-28575, retrace the steps in this article to correct the problem. For other errors, refer to the documentation.
References
For Oracle8:
"PL/SQL User's Guide and Reference, Release 8.0" (A54654-01) "Net8 Administrator's Guide, Release 8.0" (A51576-01)
For Oracle8i:
"Application Developer's Guide - Fundamentals, Release 8.1.5" (A68003-01) "Net8 Administrator's Guide, Release 8.1.5" (A67440-01)
Additional Search Words
unable to open RPC connection to external procedure agent .
Copyright (c) 1995,1999 Oracle Corporation. All Rights Reserved. Legal Notices and Terms of Use. Received on Wed May 24 2000 - 00:00:00 CDT
![]() |
![]() |