Upgrade from Oracle 10g to Oracle 11g with ODP.net and NHibernate ORA-12514

Firstly, let me say that there is nothing special about this upgrade. The instructions which I wrote here will still work with an 11g database.

The issue I had was more with, what is the difference between a SID and a SERVICE_NAME which is used to identify the data instance to connection to. The SID and SERVICE _NAME are part of the connection string used by ODP.Net to make the connection.

When I pointed my NHibernate program to an 11g instance of Oracle, while previously using 10g, I received an “ORA-12514: TNS:listener does not currently know of the service requested in connect descriptor”.

I tried downloading and installing the newest version of ODP.Net, searched for possible new connection string and told the DBA that he configured the listener incorrectly.

The solution, in this case was to change the SERVICE _NAME to SID in the connection string. The differences are described below.

Attribute Description
SID The unique name of the database instance
SERVICE_NAME An alias to a database instance, support clustering

An alias simply means that the name used to access a service never changes because the alias really just points to something else, like an IP address or SID. This allows what is behind the alias to change without requiring a change to the alias and therefore a change on the client or user side. This is a powerful and very useful concept.

The problem was that the 10g database supported an alias while the 11g database did not. Cost some hours but was solved by searching the internet.

I add my experience so perhaps in the future it helps someone find the solution faster. Good luck!