We are trying to shrink the Oracle SYSTEM tablespace to release approximately 10 gigabytes to the Windows 2000 operating system. So far we have moved 2 large tables from SYSTEM to another tablespace (on another drive) using the ALTER TABLE MOVE TABLESPACE command. This has reduced the SYSTEM usage by about 10 gigabytes, but Oracle is still keeping the 10 gigabytes as already allocated and NOT allowing it for use by Windows for other purposes.
All attempts to modify the SYSTEM tablespace using alter table, or alter tablespace have failed, either with error ORA-25143 or with "cannot modify local storage," et cetera. Obviously we cannot drop SYSTEM and redefine its extents. So our question is, how do we shrink the SYSTEM tablespace to the minimum extent?
Sorry, you probably can't. This is why you never place anything but data dictionary tables in SYS. You see, even though you removed the objects, other objects may have extended around them, thus you have the classic "swiss cheese" form of fragmentation, bubbles of free space surrounded by data. You can only shrink until you hit the first piece of used tablespace. You can try to create a map of the tablespace and determine what objects are causing the problems, but you can't rebuild the majority of objects in the system tablespace so it may be a moot point anyway. I'm afraid you are stuck until you can rebuild the entire database.
Dig Deeper on Oracle database design and architecture
Related Q&A from Mike Ault
I am trying to remove carriage returns at the end of clob fields in SQL*Plus. This just nulls out the field in the table. What do I need to change to... Continue Reading
I want to find the length of a numeric datatype field in my table. How can I find it? Continue Reading
We're using the following string to connect to the Oracle DB Server through the OraOLEDB Driver. We want to read WSID from this string in the ... Continue Reading