After a reboot, I was unable to start my Oracle 9i Application Server. The main symptom was that the status of several services remained undetermined, and that an attempt to restart them resulted in cryptic Java exceptions (e.g., oracle.sysman.emSDK.util.jdk.EMException).

Trying to follow a manual procedure to restart the server shed some light on the problem. When I attempted to start the LDAP server using the command line, I ran into an error:

C:\ora9ias\dcm\bin>oidmon start
OracleDirectoryService started

C:\ora9ias\dcm\bin>oidctl server=oidldapd instance=1 start
*** Instance Number already in use. ***
*** Please try a different Instance number. ***

The reason, as it turns out, is that a failed shutdown left invalid information in the database. Before starting any Oracle components, you may need to delete this. From sqlplus, check what's in the corresponding table:

SELECT * FROM ods.ods_process;

If the table contains a record that does not correspond to a running copy of the LDAP server (in other words: if the table contains any data when no Oracle services are running) delete it. After that, you can start the Oracle services as usual. (You may need to reboot the server first, though, if there was already a botched start attempt.)