we use oracle9i database. and since last week my oracle crash many times, after running for 30 hours more or less. we see errors repeat in my trc file and alert log :

qmhGetHTTPError: Got unknown oracle error. Error stack is:
ORA-00942: table or view does not exist

we do not find the exact table or view does not exist. if we upgrade our database to oracle 10g or 11g,will solve the problems? I found some error another log,

error 1242 detected in background process
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01114: IO error writing block to file 16 (block # 156925)
ORA-01110: data file 16: 'D:\ORACLE\ORADATA\SDH\SDH_DATA4.ORA'
ORA-27072: skgfdisp: I/O error
OSD-04008: WriteFile() 
O/S-Error: (OS 1450) 

 will above implies hard disk error? anyone gets an idea? thanks for all.
  • 1
    The existing answers are applicable to your original posts description, but based on your update the second problem seems to be much worse. At best something like a backup process is locking the data file. At worst your data file is corrupted and you will have to restore from backup. You should open a case with Oracle if you haven't already and probably create a second question if you have a specific question about the data file errors. Commented Apr 20, 2012 at 19:26

3 Answers 3


The error you're getting indicates that a query is trying to reference an object that doesn't exist or that the user doesn't have access to. If you started getting it a week ago and weren't getting it before that, something changed a week ago so that an object was dropped, a privilege was revoked, or a SQL statement was added that references an invalid object. It is unlikely that upgrading the database would resolve the error.

Can you determine the SQL statement that your application is issuing when it receives this error? If not, can you add additional logging so that you can determine what statement is generating the error? If your application doesn't log the SQL statements it generates, you could create a SERVERERROR trigger (based on this trigger code). Obviously, you would probably want to log more than just the SQL statement.

create table stmt_err_log (
  sql_stmt varchar2(1000)

  pragma autonomous_transaction;
  id NUMBER;
  sql_text ORA_NAME_LIST_T;
  v_stmt CLOB;
  n := ora_sql_txt(sql_text);
  IF n >= 1
    FOR i IN 1..n LOOP
      v_stmt := v_stmt || sql_text(i);
  FOR n IN 1..ora_server_error_depth LOOP
   IF ora_server_error(n) = '942'
     insert into scott.stmt_err_log( sql_stmt )
       values( v_stmt );
   END IF;
 END after_error;
  • thanks.it is hard to find sql statement error.because i do not know where the code have been changed.we are trying to find where the sql problem it is.
    – snow8261
    Commented Apr 20, 2012 at 6:24
  • @snow8261 - I updated my answer with a trigger that will log the SQL statement. Commented Apr 20, 2012 at 6:52
  • i already create the trigger, and wait for the result.meanwhile, i found a error says ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode i donot know if this error relate to the database crash.
    – snow8261
    Commented Apr 20, 2012 at 8:20
  • 3
    The error "IO error writing block to file 16 (block # 156925)" sounds more like that the data file containing the table is corrupted.
    – user1822
    Commented Apr 20, 2012 at 9:15
  • @JustinCave I did the trigger yesterday, i find the 00942 error in my log,but still did not find the sql statement in the stmt_err_log table.sounds like it does not work at all. thanks
    – snow8261
    Commented Apr 21, 2012 at 3:05

Mostly, if the table really exists, the reason is, that the user under which the DML statement is executed, does not have permission to select from the table. If the user is not granted the select privilege, no upgrade will ever help.


Broken shared cursor (sql re-use) as cause of ORA-00942:

I recently had this error, although the table to select from did exist and the user had sufficient privileges. Furthermore, select from SQL Developer or Sqlplus worked correctly, and even other queries on the same table within the application (using NHibernate). Only one specific, but important query to get an item by name failed again and again.

The cause of this was a broken shared cursor (similar to a query plan in MS SQL Server) which didn't work anymore after I changed some user rights. My solution was to do an


to clear the cursor cache (an admin had to do it!). There are probably other ways to do this on user or SQL statement level (the above is for the whole database server), which I did not understand the quick way. An alternative may be:


perhaps somebody can add the correct syntax how to remove shared cursors for a table or user this way, and tell if full admin rights are required for this.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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