I'm trying to deploy a page called 'Create' on my Redhat 7 linux web server using Apache. When I try to reach my page, I get the following error message from my error log:

[cgi:error] [pid 23367:tid 3936258880] [client] AH01215: Schema .myuser@mydb . Password : /my/directory/cgi-bin/Create - Error while trying to retrieve text for error ORA-12154

I've looked online and I cannot find anything about this error. Can someone point me in the right direction as to what this error means?

  • What software were you using to "deploy" this "page"? What software resides behind (created) "/my/directory/cgi-bin/Create"? – Jeff Schaller Dec 30 '19 at 16:37
  • Create is a cgi script that i'm trying to open via IE. – casper1111 Dec 30 '19 at 16:43
  • what did you search for on the web? ... there are a lot of hits for that error code – jsotola Dec 30 '19 at 18:18
  • I see JavaScript AH01215: (8)Exec format error End of script output, and AH01215: defined(%hash) is deprecated errors. I don't see anything for "Schema . Password". – casper1111 Dec 30 '19 at 18:27
  • The designation AH01215 is a generic Apache error code from mod_cgi, the remainder of the error message is the error output from CGI received by Apache. Make sure that Apache is configured properly to handle CGI scripts and check your CGI script for conditions where it could error out with that Schema...Password string. – GracefulRestart Dec 30 '19 at 20:15

This seems to not be a single error message, but a combination resulting from an error happening several layers deep in your software stack and all the layers contributing parts to the error message as it finds its way out of the stack.

The words "Schema" and "Password" together suggest that the script might be trying to connect to a database.

The tail end of the message is Error while trying to retrieve text for error ORA-12154. ORA-nnnnn is a standard format for error codes from Oracle database or drivers for it. So, your script might be trying to connect to an Oracle database with a service name mydb using user/schema name mypass and password mypass, encountering error ORA-12154 and then failing to retrieve the corresponding error message text for some reason.

But what does ORA-12154 mean? Google to the rescue!

The full English text of the error message seems to be:

ORA-12154: TNS:could not resolve the connect identifier specified

It seems that whatever database client/driver the script is using has no clue as to how to reach the mydb database.

If you have a tnsnames.ora file defining the network connection parameters for the database connection, you should verify that the script is getting the correct ORACLE_HOME and any other required Oracle-specific environment variables, so that the database client/driver used by the script will actually find the tnsnames.ora file. Then, make sure that any hostnames/IP addresses/ports mentioned in that file are correct and that any hostnames are resolvable.

If the CGI script is executed in a chrooted environment, it might not have access to /etc/resolv.conf or to any DNS resolver libraries, and so be unable to resolve any hostnames.

Or if your Oracle driver/client is configured to use some other naming methods (Oracle technical term) to find the database connection parameters, you'll need to find out which method is used and whether or not it produces valid results for database service name mydb. You might need to talk to a database administrator: "My client is configured like this, and I'm getting an ORA-12154 error message. Does any of this look wrong to you?"

Oh, and since you've posted the password to your database publicly, you might really want to get it changed now.

  • Late reply, my apologies. I can now connect via sqlplus with myname@mydb -- I wasn't able to before. I editted my tnsnames.ora file located where my program is. (I was editing the wrong tnsnames.ora file). I'm still getting the ORA-12154 error on the cgi script, though. – casper1111 Jan 7 '20 at 17:37

What I had to do to fix my issue was to modify code in my oracle profile: /etc/profile.d/oracle.sh so it runs for everybody. It was coded to run only for users in a specific group.

Thank you everybody for your input!

Not the answer you're looking for? Browse other questions tagged or ask your own question.