Oracle XE TNS Listener fails to start

oracleoracle-11g-r2oracle-xe

I freshly installed Oracle XE 11.2.0.2.0 and found out that the TNS Listener service fails to start. At first I tried to start the Windows service by hand. After the failure this is the entry in the event log:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
 <System>
  <Provider Name="Application Error" /> 
  <EventID Qualifiers="0">1000</EventID> 
  <Level>2</Level> 
  <Task>100</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2012-12-18T07:11:23.000000000Z" /> 
  <EventRecordID>6195</EventRecordID> 
  <Channel>Application</Channel> 
  <Computer>[removed]</Computer> 
  <Security /> 
 </System>
 <EventData>
  <Data>tnslsnr.exe</Data> 
  <Data>11.2.0.2</Data> 
  <Data>4e2e9556</Data> 
  <Data>orahasgen11.dll</Data> 
  <Data>11.2.0.1</Data> 
  <Data>4ce506a3</Data> 
  <Data>c0000005</Data> 
  <Data>0002fbdd</Data> 
  <Data>1084</Data> 
  <Data>01cddceee2b90e19</Data> 
  <Data>C:\oraclexe\app\oracle\product\11.2.0\server\BIN\tnslsnr.exe</Data> 
  <Data>C:\oraclexe\app\oracle\product\11.2.0\server\BIN\orahasgen11.dll</Data> 
  <Data>20df4569-48e2-11e2-87b0-1c6f650a0fc2</Data> 
 </EventData>
</Event>

In a second go I tried STATUS and START in LSNRCTL.EXE:

LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   32-bit Windows Error: 61: Unknown error

… and START:

LSNRCTL> START
Starting tnslsnr: please wait...

TNS-12537: TNS:connection closed
 TNS-12560: TNS:protocol adapter error
  TNS-00507: Connection closed
   32-bit Windows Error: 109: Unknown error

Google found a few forum entries with people having a similar error but all of them would either have an inner error different from 109 or not get any reasonable answer at all…

Any ideas? I know that before installing Oracle XE on my computer, an oracle 11.2.0 client was already on it (part of the image).

ORACLE_HOME and TNS_ADMIN point to that client. Would that have any impact? I hope the two Oracle instances are smart enough for each to run independently!

Update: It does! I changed the ORACLE_HOME and now the listener runs. But I can't go and edit the ORACLE_HOME every time I need to start the listener or run SQLPlus from my client installation. I really wonder what an architecture would install a product with its own listener but the listener is not able to run without a global environment variable being set to a certain directory, especially since we know there can be more than 1 oracle installations on one system…

Best Answer

Check this registry key to ensure ORACLE_HOME is configured for the service:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_XE\ORACLE_HOME

If that doesn't exist, check here:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_XE\ORACLE_HOME

Also make sure this other key isn't pointing to your old client registry key:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_XE\ORACLE_HOME_KEY
or
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_XE\ORACLE_HOME_KEY