Hard to say without seeing the Query Plan. You may not even be using indexes. What process is consuming 100% of the CPU, dbwr, lgwr, user session, etc.? What does each of the disks utilization look like?
30000 rows deletion is a small job for Oracle. I think some user process might use the rows when you are trying to delete them. Otherwise it won't take long time.
Also assign exclusive rollback segment for this transaction and try again.
If you are sure that you will not issue rollback, then alter the table in NOLOGGING mode, so that redo will not be generated.
Check for cascading constraints as well. if you have them, you may find that deleting from the children up the tree may be less expensive. i doubt that is the root problem, however, unless it's a really extreme constraint cascade.