I was trying to drop a tablespace which I know there were no segments in it. A simple query from dba_segments returns no rows which means there are no segments allocated in this tablespace. But strangely I got this:
SQL> drop tablespace psapsr3old including contents and datafiles;
drop tablespace psapsr3old including contents and datafiles
*
ERROR at line 1:
ORA-14404: partitioned table contains partitions in a different tablespace
How come I cannot drop a tablespace with no segments in it?
Enter deferred segment creation. Things were simpler on 9i or 10g. The database I get this error on is an 11.2.0.2 database. Starting with 11.2.0.1 things may fool you when it comes to segments in the database. 11.2 brought us the feature called "deferred segment creation" which means no segments are created if you do not insert any data into the tables you created. Have a look at the note "11.2 Database New Feature Deferred Segment Creation [Video] (Doc ID 887962.1)" about this feature. It is there to save disk space in case you have lots of tables without data in them. In 11.2.0.1 it was only for non-partitioned heap tables, starting with 11.2.0.2 it is also used for partitioned tables.
2 where tablespace_name='PSAPSR3OLD'
3 group by segment_created;
SEG COUNT(*)
--- ----------
NO 13482
SQL> select segment_created,count(*) from dba_tab_partitions
2 where tablespace_name='PSAPSR3OLD'
3 group by segment_created;
SEGM COUNT(*)
---- ----------
NO 1237
There are thousands of objects in there.
What is the solution then?
Obviously it is to get rid of these objects by moving them to a different tablespace. The standard "alter table move" and "alter table move partition" commands do the job. Then the question becomes; will a move table operation create the segment in the new tablespace? If you are on 11.2.0.1, yes it will, defeating the whole purpose of this feature. If you are on 11.2.0.2 it will not create the segments. This is explained in the note "Bug 8911160 - ALTER TABLE MOVE creates segment with segment creation deferred table (Doc ID 8911160.8)".
After everything is moved you can safely drop the tablespace without this error.
UPDATE: Gokhan Atil made me aware of Randolf Geist's post about the same issue. See that post here.
0 comments:
Post a Comment