The Oracle (tm) Users' Co-Operative FAQ

What is an object of type 'Non-existent' ?


Author's name: Jonathan Lewis

Author's Email: Jonathan@jlcomp.demon.co.uk

Date written: 18th July 2002

Oracle version(s): 8.1.7.0

Looking at view v$access or user_objects, you will sometimes find objects of type NON-EXISTENT. What are they ?

Back to index of questions


There are two issues which result in non-existent objects.

If you drop an object, then it's row in obj$ (the table holding object definitions) is reclassified as type# = 10 (non-existent). If you create a new object before the database is shutdown, this object number (and row) can be re-used. This is an efficiency thing, and stops the obj$ table and its index degenerating over time in systems where objects are frequently dropped and created.

The other reads is that non-existent objects are created to handle 'negative dependency' tracking.

Say you have a view defined by

	create or replace view v1 as 
	select * from t1;

but T1 is actually a public synonym to a table in someone else's schema.

The validity of this view is dependent on the fact that there is no object named T1 in your schema; so Oracle creates a non-existent object in your schema that the view is dependent on (take a look at the view user_dependencies). Then, when you create an object called T1 in your schema, this causes the elimination of the 'non-existent' object, which automatically causes the invalidation and recompilation of the view so that it now references your object T1, rather than the public synonyn T1.


Further reading: Steve Adams has a couple of articles about the cost of public synonyms on his website www.ixora.com.au


Back to top

Back to index of questions