Professional Documents
Culture Documents
In order to regain unused space on your database you need to use SHRINK command on
Oracle. I will try to illustrate this feature with a very simple example:
First create a table:
Attention please, We have not committed the data yet. If we issue a rollback statement all
of the inserts we have done will be gone and this table will be empty. Normally, we shall
expect what we have done would not cost a space to us. But this is so wrong in Oracle
terms. Oracle already allocated that space (segments) and even if you didn't commit it, it
wont release it until you do something for releasing.
Did you see the FREE(MB) column, it was 2MB before and after shrink operation it is 25
MB. Don't worry about the bar chart, it will show the right result soon, it is due to OEM’s
weird and lazy behavior.
Now we have a smaller table but still have a big datafile. Small table was not our main
aim, we want to resize the physical file on OS. After this shrink operation we can resize it
because we have free space on that file, lets use OEM for that:
ATTENTION: If I entered a value lower than 26.25 MB, it would raise an error because
there is still 26.25 MB data on this datafile.
* If you receive an ORA-03297 error when trying to apply the changes, you need to
REORGANIZE the tablespace. How you can reorganize a tablespace is illustrated at the end
of this document?
Lets see the result on OS view too, pay attention to the size value of USERS01.dbf file:
This is a great feature if you had a lot of delete operations on your tables before, you can
free your unused spaces by using this feature. By the way, you need to enable row
movement on the table you want to make shrink operation and also the tablespace you are
working on must have auto segment management.
If you receive above error when you try to resize your datafile, it means that your datafile
is fragmented and it is needed to be reorganized. You can reorganize your datafiles by
reorganizing your tablespaces. Below screen shows how can you reorganize tablespaces
through OEM:
When you choose the Reorganize action, basically oracle will create a job which will create
a new tablespace with a new datafile and move all your tables to your new tablespace from
old fragmented tablespace. After move operations complete, it will drop your old
tablespace and rename fresh tablespace to deleted one’s name. Finally you will have a
unfragmented tablespace with new datafile name. Oracle does not delete the old
fragmented datafile after reorganizing operation, you need to manually delete it from OS
file structure you need to shutdown and startup your db to be able to delete that file from
OS otherwise it gives in use error).